dashboard, vm, storage: add disk snapshoting feature
Showing
| ... | ... | @@ -283,6 +283,88 @@ class CreateDiskOperation(InstanceOperation): |
| size=filesizeformat(kwargs['size']), name=kwargs['name']) | ||
| class RemoteSnapshotDiskOperation(InstanceOperation): | ||
| remote_queue = ('storage', 'slow') | ||
| remote_timeout = 30 | ||
| def _operation(self, disk, **kwargs): | ||
| if disk: | ||
| if not disk.is_ready: | ||
| raise disk.DiskIsNotReady(disk) | ||
| disk_desc = disk.get_disk_desc() | ||
| args = [disk_desc] + self._get_remote_args(**kwargs) | ||
| return self.task.apply_async( | ||
| args=args, | ||
| queue=disk.get_remote_queue_name(*self.remote_queue) | ||
| ).get(timeout=self.remote_timeout) | ||
| @register_operation | ||
| class CreateSnapshotDiskOperation(RemoteSnapshotDiskOperation): | ||
| id = 'create_snapshot' | ||
| name = _('create snapshot') | ||
| description = _('Create snapshot from disk.') | ||
| required_perms = ('storage.create_snapshot', ) | ||
| accept_states = ('STOPPED') | ||
Please
register
or
sign in
to reply
|
||
| task = storage_tasks.snapshot | ||
| def _get_remote_args(self, **kwargs): | ||
| snap_name = kwargs.get('snap_name') | ||
| if not snap_name: | ||
| snap_name = 'new snapshot' | ||
| return [snap_name] | ||
| def get_activity_name(self, kwargs): | ||
| return create_readable( | ||
| ugettext_noop('Created snapshot %(snap_name)s' | ||
| ' from disk %(disk_name)s'), | ||
| disk_name=kwargs['disk'].name, | ||
| snap_name=kwargs['snap_name']) | ||
| @register_operation | ||
| class RemoveSnapshotDiskOperation(RemoteSnapshotDiskOperation): | ||
| id = 'remove_snapshot' | ||
| name = _('remove snapshot') | ||
| description = _('Remove snapshot from disk.') | ||
| required_perms = ('storage.remove_snapshot', ) | ||
| task = storage_tasks.remove_snapshot | ||
| def _get_remote_args(self, **kwargs): | ||
| return [kwargs.get('snap_id')] | ||
| def get_activity_name(self, kwargs): | ||
| return create_readable( | ||
| ugettext_noop('Removed snapshot %(snap_name)s' | ||
| ' from disk %(disk_name)s'), | ||
| disk_name=kwargs['disk'].name, | ||
| snap_name=kwargs['snap_name']) | ||
| @register_operation | ||
| class RevertSnapshotDiskOperation(RemoteSnapshotDiskOperation): | ||
| id = 'revert_snapshot' | ||
| name = _('revert snapshot') | ||
| description = _('Revert snapshot on disk.') | ||
| required_perms = ('storage.revert_snapshot', ) | ||
| accept_states = ('STOPPED') | ||
| task = storage_tasks.revert_snapshot | ||
| def _get_remote_args(self, **kwargs): | ||
| return [kwargs.get('snap_id')] | ||
| def get_activity_name(self, kwargs): | ||
| return create_readable( | ||
| ugettext_noop('Revert snapshot %(snap_name)s' | ||
| ' on disk %(disk_name)s'), | ||
| disk_name=kwargs['disk'].name, | ||
| snap_name=kwargs['snap_name']) | ||
| @register_operation | ||
| class ResizeDiskOperation(RemoteInstanceOperation): | ||
| ... | ... | |