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(a)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')
--
2.1.0