Feature: S3-based secondary Storage

Background: Cloudstack artifacts such as templates, ISOs and snapshots are stored in Secondary Storage. This can present a few issues - such as scalability, performance issues, as when a number of hosts access secondary storage concurrently, typically via SSVM there can be performance degradation. Object Storage can also provides built-in high availability capability. When using an Object Storage, access to secondary storage data can be made available across multiple zones in a Region. This is a huge benefit as it is not necessary to copy templates, snapshots etc. across zones as would be needed in a NFS-only environment.

In order to address this issue, CloudStack also has an integration with OpenStack Object Storage component "Swift". However, when Swift is used as a secondary storage, NFS is still required on a per-zone basis as secondary storage and serves as a staging area. The artifacts are copied from Swift to NFS shares and then on to the primary storage. 

Requirement:

- Ability to add an S3-based Object Storage as a secondary storage in CloudStack for storing all artifacts currently stored in secondary storage - snapshots, ISOs and templates

- S3-based secondary storage has be available within the entire region i.e. all zones have access to the same secondary storage

-  Provide a tool or a documented proceed to migrate from NFS based secondary storage to S3-based ObjectStore for current customers either during upgrade of software (for example upgrading to ACS 4.1) or at any subsequent time of their choosing

- To simplify, at a first step, use a single ("CloudStack service") account, instead of using the individual user's S3, which can cause single signon-authentication complexity

- Standard template/ISO operations such as register(add), delete, create template from snapshots, etc. must be supported

- out of scope - copying across regions

- No need for more than one type of S3-based secondary storage for a single region? 

- It is necessary to have NFS based secondary storage as well as S3-based storage concurrently available for a zone (region)

- Open for discussion: Requirements are to similar to Swift support in CloudStack today, however, is NFS still necessary (as is the case with Swift)? If NFS is still needed as a staging/caching area, do we need it on a per-zone basis?