[Kimchi-devel] [PATCH 3/3] snapshot: Allow creating a snapshot of a domain in any state
Aline Manera
alinefm at linux.vnet.ibm.com
Mon Apr 27 15:38:02 UTC 2015
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 20/04/2015 15:58, Crístian Deives wrote:
> Currently, Kimchi only allows snapshots to be taken of shutoff VMs. Now
> that the infrastructure for taking snapshots of running VMs is done, we
> can allow that feature as well.
>
> Do not restrict the snapshot creation based on the VM's state, and allow
> it to be created when the VM is running as well.
>
> Signed-off-by: Crístian Deives <cristiandeives at gmail.com>
> ---
> src/kimchi/i18n.py | 1 -
> src/kimchi/model/vmsnapshots.py | 8 ++------
> tests/test_model.py | 9 +++++++--
> 3 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index 18e84bc..91e543e 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -320,7 +320,6 @@ messages = {
> "KCHREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
> "KCHREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
>
> - "KCHSNAP0001E": _("Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."),
> "KCHSNAP0002E": _("Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
> "KCHSNAP0003E": _("Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."),
> "KCHSNAP0004E": _("Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
> diff --git a/src/kimchi/model/vmsnapshots.py b/src/kimchi/model/vmsnapshots.py
> index 331f532..85ecb24 100644
> --- a/src/kimchi/model/vmsnapshots.py
> +++ b/src/kimchi/model/vmsnapshots.py
> @@ -26,7 +26,7 @@ from lxml.builder import E
>
> from kimchi.exception import InvalidOperation, NotFoundError, OperationFailed
> from kimchi.model.tasks import TaskModel
> -from kimchi.model.vms import DOM_STATE_MAP, VMModel
> +from kimchi.model.vms import VMModel
> from kimchi.model.vmstorages import VMStorageModel, VMStoragesModel
> from kimchi.utils import add_task
>
> @@ -42,7 +42,7 @@ class VMSnapshotsModel(object):
> def create(self, vm_name, params={}):
> """Create a snapshot with the current domain state.
>
> - The VM must be stopped and contain only disks with format 'qcow2';
> + The VM must contain only disks with format 'qcow2';
> otherwise an exception will be raised.
>
> Parameters:
> @@ -54,10 +54,6 @@ class VMSnapshotsModel(object):
> Return:
> A Task running the operation.
> """
> - vir_dom = VMModel.get_vm(vm_name, self.conn)
> - if DOM_STATE_MAP[vir_dom.info()[0]] != u'shutoff':
> - raise InvalidOperation('KCHSNAP0001E', {'vm': vm_name})
> -
> # if the VM has a non-CDROM disk with type 'raw', abort.
> for storage_name in self.vmstorages.get_list(vm_name):
> storage = self.vmstorage.lookup(vm_name, storage_name)
> diff --git a/tests/test_model.py b/tests/test_model.py
> index b53822a..3740143 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -144,8 +144,13 @@ class ModelTests(unittest.TestCase):
> info = inst.vm_lookup('kimchi-vm')
> self.assertEquals('running', info['state'])
>
> - self.assertRaises(InvalidOperation, inst.vmsnapshots_create,
> - u'kimchi-vm')
> + # make sure creating a snapshot of a running VM works
> + task = inst.vmsnapshots_create(u'kimchi-vm')
> + inst.task_wait(task['id'])
> + task = inst.task_lookup(task['id'])
> + self.assertEquals('finished', task['status'])
> + inst.vmsnapshot_delete(u'kimchi-vm',
> + task['target_uri'].split('/')[-1])
>
> inst.vm_poweroff(u'kimchi-vm')
> vm = inst.vm_lookup(u'kimchi-vm')
More information about the Kimchi-devel
mailing list