Cinder volume snapshot protection plugin¶
https://blueprints.launchpad.net/karbor/+spec/cinder-volume-snapshot-plugin
Problem description¶
Now there is a cinder default volume protection plugin implemented using the backup feature of cinder volume in karbor. A new cinder protection plugin will be introduced to karbor, it will use the snapshot feature of cinder to protect the volume.
Use Cases¶
User creates a volume in cinder, and mounts it to the server. Then the volume is used for saving lots of data by user. To avoid the loss of data, the user want to protect the volume by making periodic snapshots of this volume. If the user want to restore the volume, he can create a new volume from this snapshot.
Proposed change¶
Cinder volume snapshot protection plugin:¶
A new snapshot protection plugin about Cinder volume need be implemented.
1. Protect Operation: The ‘create’ method of cinderclient’s SnapshotManager will be called in the main hook of this operation to make a snapshot of the volume. A snapshot of the resource volume will be created.
2. Restore Operation: The ‘create’ method of cinderclient’s VolumeManager will be called in the main hook of this operation to create a new volume from the giving snapshot. A new volume from the snapshot will be created.
3. Delete Operation: The volume snapshot will be deleted. The ‘delete’ method of cinderclient’s SnapshotManager will be called in the main hook of this operation to delete the volume snapshot.
Cinder volume snapshot protection plugin schema:¶
OPTIONS_SCHEMA = {
"title": "Volume Snapshot Protection Options",
"type": "object",
"properties": {
"snapshot_name": {
"type": "string",
"title": "Snapshot Name",
"description": "The name of the volume snapshot."
},
"description": {
"type": "string",
"title": "Description",
"description": "The description of the volume snapshot."
},
"force": {
"type": "boolean",
"title": "Force",
"description": "If force is True, create a snapshot even if the volume is attached to an instance.",
"default": False
}
},
"required": ["snapshot_name", "description", "force"]
}
RESTORE_SCHEMA = {
"title": "Volume Protection Restore",
"type": "object",
"properties": {
"restore_name": {
"type": "string",
"title": "Restore Name",
"description": "The name of the restored volume.",
"default": None
},
"restore_description": {
"type": "string",
"title": "Restore Description",
"description": "The description of the restored volume.",
"default": None
}
}
}
Alternatives¶
None
Data model impact¶
None
REST API impact¶
None
Security impact¶
None
Notifications impact¶
None
Other end user impact¶
None
Performance Impact¶
None
Other deployer impact¶
Add this volume snapshot plugin to the entry_points section of setup.cfg. Add this volume snapshot plugin configuration to provider file.
Developer impact¶
None
Implementation¶
Assignee(s)¶
Work Items¶
Write volume snapshot protection plugin
Write tests
Add a usage example about volume snapshot protection
Dependencies¶
None
Testing¶
Unit tests in Karbor .
Documentation Impact¶
Add a usage example about volume snapshot protection.
References¶
None