summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-09-30 07:45:47 +0000
committerGerrit Code Review <review@openstack.org>2012-09-30 07:45:47 +0000
commitbcffec223be41576e40a3689718fbb87de759a08 (patch)
tree319a3042b4b5e3ec5e8f04429581721e6efb0e34
parent7284dca72a5adb29b3e3e67ffec1c0821f12d7fb (diff)
parent81fa6f717d6e32a4cfc2c734e228e60b204da045 (diff)
downloadnova-bcffec223be41576e40a3689718fbb87de759a08.tar.gz
nova-bcffec223be41576e40a3689718fbb87de759a08.tar.xz
nova-bcffec223be41576e40a3689718fbb87de759a08.zip
Merge "libvirt: allows attach and detach from all domains"
-rw-r--r--nova/tests/fakelibvirt.py9
-rw-r--r--nova/virt/libvirt/driver.py32
2 files changed, 25 insertions, 16 deletions
diff --git a/nova/tests/fakelibvirt.py b/nova/tests/fakelibvirt.py
index e4328a00b..b933b004a 100644
--- a/nova/tests/fakelibvirt.py
+++ b/nova/tests/fakelibvirt.py
@@ -69,8 +69,11 @@ VIR_DOMAIN_SHUTOFF = 5
VIR_DOMAIN_CRASHED = 6
VIR_DOMAIN_XML_SECURE = 1
+
VIR_DOMAIN_UNDEFINE_MANAGED_SAVE = 1
+VIR_DOMAIN_AFFECT_CURRENT = 0
+
VIR_CPU_COMPARE_ERROR = -1
VIR_CPU_COMPARE_INCOMPATIBLE = 0
VIR_CPU_COMPARE_IDENTICAL = 1
@@ -334,11 +337,17 @@ class Domain(object):
self._def['devices']['disks'] += [disk_info]
return True
+ def attachDeviceFlags(self, xml, _flags):
+ self.attachDevice(xml)
+
def detachDevice(self, xml):
disk_info = _parse_disk_info(etree.fromstring(xml))
disk_info['_attached'] = True
return disk_info in self._def['devices']['disks']
+ def detachDeviceFlags(self, xml, _flags):
+ self.detachDevice(xml)
+
def XMLDesc(self, flags):
disks = ''
for disk in self._def['devices']['disks']:
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 7e828163c..75a257a92 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -636,9 +636,16 @@ class LibvirtDriver(driver.ComputeDriver):
if FLAGS.libvirt_type == 'lxc':
self._attach_lxc_volume(conf.to_xml(), virt_dom, instance_name)
+ # TODO(danms) once libvirt has support for LXC hotplug,
+ # replace this re-define with use of the
+ # VIR_DOMAIN_AFFECT_LIVE & VIR_DOMAIN_AFFECT_CONFIG flags with
+ # attachDevice()
+ domxml = virt_dom.XMLDesc(libvirt.VIR_DOMAIN_XML_SECURE)
+ self._conn.defineXML(domxml)
else:
try:
- virt_dom.attachDevice(conf.to_xml())
+ flags = (libvirt.VIR_DOMAIN_AFFECT_CURRENT)
+ virt_dom.attachDeviceFlags(conf.to_xml(), flags)
except Exception, ex:
if isinstance(ex, libvirt.libvirtError):
errcode = ex.get_error_code()
@@ -653,13 +660,6 @@ class LibvirtDriver(driver.ComputeDriver):
connection_info,
mount_device)
- # TODO(danms) once libvirt has support for LXC hotplug,
- # replace this re-define with use of the
- # VIR_DOMAIN_AFFECT_LIVE & VIR_DOMAIN_AFFECT_CONFIG flags with
- # attachDevice()
- domxml = virt_dom.XMLDesc(libvirt.VIR_DOMAIN_XML_SECURE)
- self._conn.defineXML(domxml)
-
@staticmethod
def _get_disk_xml(xml, device):
"""Returns the xml for the disk mounted at device"""
@@ -698,20 +698,20 @@ class LibvirtDriver(driver.ComputeDriver):
raise exception.DiskNotFound(location=mount_device)
if FLAGS.libvirt_type == 'lxc':
self._detach_lxc_volume(xml, virt_dom, instance_name)
+ # TODO(danms) once libvirt has support for LXC hotplug,
+ # replace this re-define with use of the
+ # VIR_DOMAIN_AFFECT_LIVE & VIR_DOMAIN_AFFECT_CONFIG flags with
+ # detachDevice()
+ domxml = virt_dom.XMLDesc(libvirt.VIR_DOMAIN_XML_SECURE)
+ self._conn.defineXML(domxml)
else:
- virt_dom.detachDevice(xml)
+ flags = (libvirt.VIR_DOMAIN_AFFECT_CURRENT)
+ virt_dom.detachDeviceFlags(xml, flags)
finally:
self.volume_driver_method('disconnect_volume',
connection_info,
mount_device)
- # TODO(danms) once libvirt has support for LXC hotplug,
- # replace this re-define with use of the
- # VIR_DOMAIN_AFFECT_LIVE & VIR_DOMAIN_AFFECT_CONFIG flags with
- # detachDevice()
- domxml = virt_dom.XMLDesc(libvirt.VIR_DOMAIN_XML_SECURE)
- self._conn.defineXML(domxml)
-
@exception.wrap_exception()
def _attach_lxc_volume(self, xml, virt_dom, instance_name):
LOG.info(_('attaching LXC block device'))