dashboard, vm, storage: add disk snapshoting feature
Showing
| ... | @@ -283,6 +283,88 @@ class CreateDiskOperation(InstanceOperation): | ... | @@ -283,6 +283,88 @@ class CreateDiskOperation(InstanceOperation): |
| size=filesizeformat(kwargs['size']), name=kwargs['name']) | 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 | @register_operation | ||
| class ResizeDiskOperation(RemoteInstanceOperation): | class ResizeDiskOperation(RemoteInstanceOperation): | ||
| ... | ... |