The Snapshot class provides the abstraction layer required to perform all operations on an existing snapshot, which means that the snapshot creation operation must be invoked from other class instance, since the new snapshot we want to create doesn’t exist yet and we cannot use the Snapshot class to manage it.
Once we have a Volume instance we are ready to create snapshots from it, and we can do it for attached as well as detached volumes.
Some drivers, like the NFS, require assistance from the Compute service for attached volumes, so they is currently no way of doing this with cinderlib
Creating a snapshot can only be performed by the create_snapshot method from our Volume instance, and once we have have created a snapshot it will be tracked in the Volume instance’s snapshots set.
Here is a simple code to create a snapshot and use the snapshots set to verify that both, the returned value by the call as well as the entry added to the snapshots attribute, reference the same object and that the volume attribute in the Snapshot is referencing the source volume.
vol = lvm.create_volume(size=1) snap = vol.create_snapshot() assert snap is list(vol.snapshots) assert vol is snap.volume
Once we have created a Snapshot we can use its delete method to permanently remove it from the storage backend.
Deleting a snapshot will remove its reference from the source Volume’s snapshots set.
vol = lvm.create_volume(size=1) snap = vol.create_snapshot() assert 1 == len(vol.snapshots) snap.delete() assert 0 == len(vol.snapshots)
All other methods available in the Snapshot class will be explained in their relevant sections:
- load will be explained together with json, jsons, dump, and dumps properties, and the to_dict method in the Serialization section.
- refresh will reload the volume from the metadata storage and reload any lazy loadable property that has already been loaded. Covered in the Serialization and Resource tracking sections.
- create_volume method has been covered in the Volumes section.