VolumeSnapshotBackupAPI

Volume Snapshot/Backup API
It is currently possible to create 'snapshots' using the ec2 API, but the semantics of this are poorly defined, and generally differ from the more usual storage definition of the term 'snapshot'.

There is no corresponding facility in the Nova API.

Overview
There has been some discussion of terminology for these facilities [1], so it is probably useful to start by defining the terminology below:

snapshot - a point-in-time copy of a volume. Often done by techniques such as COW or similar, and may not be durable beyond the original volume (provider defined - *should a driver be able to block the deletion of a volume that has snapshots, or should it be able to delete the snapshots, if the volume is required for the snapshot?* )

backup - a copy of a volume or snapshot to long term storage, such as swift, that can be used to reconstruct a volume at some point in the indefinite future, even if the original volume is long gone.

Snapshots
create_from_volume(volume) returns snap_id

delete(snap_id)

create_volume_from_snap(snap_id) return volume

Backup operations
create_from_volume(volume, "swift://user:pass@swiftserver.example.com") returns backup_id

create_from_snapshot(snapshot_id, "swift://user:pass@wiftserver.example.com") returns backup_id

Note: In both cases above, if no credentials are supplied then keystone credentials will be used

check_progress(backup_id) returns one of ["in-progress", "completed", "error"]

create_volume_from_backup("swift://user:pass@wiftserver.example.com/object") returns volume

Note: Deleting backups is not part of this proposal, since it is already covered by e.g. swift native commands