summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorDavid Kang <dkang@isi.edu>2012-10-22 16:56:56 -0400
committerDavid Kang <dkang@isi.edu>2012-10-23 10:44:39 -0400
commitb60646965de26974f8a8b81f6e43b72a6c8d44f5 (patch)
treec2299529c9e4419bd049736033e1ee96c8c4120b /nova/virt
parenta0fcd1248071ad66b610eac4903adf36b314390b (diff)
Fixes bug Snapshotting LXC instance fails
Fixes bug 1058273. The path of the disk for snapshotting LXC instance is debugged. Also, virt_dom.managedSave(0) and self._create_domain(domain=virt_dom) are not called for LXC instance, because they are supported by libvirt. Change-Id: Idf8275a0222b2eb289e16dd245f7721e17fce21d
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/libvirt/driver.py13
-rw-r--r--nova/virt/libvirt/utils.py10
2 files changed, 17 insertions, 6 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 2d3b1d954..8ef469b76 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -830,8 +830,10 @@ class LibvirtDriver(driver.ComputeDriver):
(state, _max_mem, _mem, _cpus, _t) = virt_dom.info()
state = LIBVIRT_POWER_STATE[state]
- if state == power_state.RUNNING:
- virt_dom.managedSave(0)
+ # NOTE(dkang): managedSave does not work for LXC
+ if FLAGS.libvirt_type != 'lxc':
+ if state == power_state.RUNNING:
+ virt_dom.managedSave(0)
# Make the snapshot
snapshot = self.image_backend.snapshot(disk_path, snapshot_name,
@@ -848,8 +850,11 @@ class LibvirtDriver(driver.ComputeDriver):
snapshot.extract(out_path, image_format)
finally:
snapshot.delete()
- if state == power_state.RUNNING:
- self._create_domain(domain=virt_dom)
+ # NOTE(dkang): because previous managedSave is not called
+ # for LXC, _create_domain must not be called.
+ if FLAGS.libvirt_type != 'lxc':
+ if state == power_state.RUNNING:
+ self._create_domain(domain=virt_dom)
# Upload that image to the image service
with libvirt_utils.file_open(out_path) as image_file:
diff --git a/nova/virt/libvirt/utils.py b/nova/virt/libvirt/utils.py
index 17c9efdda..8df923c9f 100644
--- a/nova/virt/libvirt/utils.py
+++ b/nova/virt/libvirt/utils.py
@@ -417,8 +417,14 @@ def find_disk(virt_dom):
May be file or device"""
xml_desc = virt_dom.XMLDesc(0)
domain = etree.fromstring(xml_desc)
- source = domain.find('devices/disk/source')
- disk_path = source.get('file') or source.get('dev')
+ if FLAGS.libvirt_type == 'lxc':
+ source = domain.find('devices/filesystem/source')
+ disk_path = source.get('dir')
+ disk_path = disk_path[0:disk_path.rfind('rootfs')]
+ disk_path = os.path.join(disk_path, 'disk')
+ else:
+ source = domain.find('devices/disk/source')
+ disk_path = source.get('file') or source.get('dev')
if not disk_path:
raise RuntimeError(_("Can't retrieve root device path "