diff options
| author | Daniel P. Berrange <berrange@redhat.com> | 2012-03-07 08:39:19 -0500 |
|---|---|---|
| committer | Daniel P. Berrange <berrange@redhat.com> | 2012-03-23 19:23:12 +0000 |
| commit | 172ba65bdce30862fc393984d4ed57468b8fb8ab (patch) | |
| tree | 5839102f575e0d9e0719e4c748e4c5f2d28048b4 | |
| parent | 58b2ecced2491441c6dac739a7e50e8ab6be4d66 (diff) | |
Convert libvirt volume classes over to use config API
The classes in the libvirt/volume.py file build up XML
strings using printf style substitutions. Convert this
over to use the LibvirtConfigGuestDisk config class
instead
blueprint libvirt-xml-config-apis
Change-Id: Ied1fad47db6fb23b74edc4405015768c764a4d10
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
| -rw-r--r-- | nova/tests/test_libvirt.py | 20 | ||||
| -rw-r--r-- | nova/virt/libvirt/connection.py | 18 | ||||
| -rw-r--r-- | nova/virt/libvirt/volume.py | 55 |
3 files changed, 49 insertions, 44 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index ce5009368..e749abb28 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -157,8 +157,8 @@ class LibvirtVolumeTestCase(test.TestCase): 'provider_location': '%s,fake %s' % (location, iqn)} connection_info = vol_driver.initialize_connection(vol, self.connr) mount_device = "vde" - xml = libvirt_driver.connect_volume(connection_info, mount_device) - tree = ElementTree.fromstring(xml) + conf = libvirt_driver.connect_volume(connection_info, mount_device) + tree = conf.format_dom() dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-0' % (location, iqn) self.assertEqual(tree.get('type'), 'block') self.assertEqual(tree.find('./source').get('dev'), dev_str) @@ -196,8 +196,8 @@ class LibvirtVolumeTestCase(test.TestCase): 'provider_location': '%s,fake %s' % (location, iqn)} connection_info = vol_driver.initialize_connection(vol, self.connr) mount_device = "vde" - xml = libvirt_driver.connect_volume(connection_info, mount_device) - tree = ElementTree.fromstring(xml) + conf = libvirt_driver.connect_volume(connection_info, mount_device) + tree = conf.format_dom() dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-0' % (location, iqn) self.assertEqual(tree.get('type'), 'block') self.assertEqual(tree.find('./source').get('dev'), dev_str) @@ -219,8 +219,8 @@ class LibvirtVolumeTestCase(test.TestCase): vol = {'id': 1, 'name': name} connection_info = vol_driver.initialize_connection(vol, self.connr) mount_device = "vde" - xml = libvirt_driver.connect_volume(connection_info, mount_device) - tree = ElementTree.fromstring(xml) + conf = libvirt_driver.connect_volume(connection_info, mount_device) + tree = conf.format_dom() self.assertEqual(tree.get('type'), 'network') self.assertEqual(tree.find('./source').get('protocol'), 'sheepdog') self.assertEqual(tree.find('./source').get('name'), name) @@ -234,8 +234,8 @@ class LibvirtVolumeTestCase(test.TestCase): vol = {'id': 1, 'name': name} connection_info = vol_driver.initialize_connection(vol, self.connr) mount_device = "vde" - xml = libvirt_driver.connect_volume(connection_info, mount_device) - tree = ElementTree.fromstring(xml) + conf = libvirt_driver.connect_volume(connection_info, mount_device) + tree = conf.format_dom() self.assertEqual(tree.get('type'), 'network') self.assertEqual(tree.find('./source').get('protocol'), 'rbd') rbd_name = '%s/%s' % (FLAGS.rbd_pool, name) @@ -256,8 +256,8 @@ class LibvirtVolumeTestCase(test.TestCase): 'provider_location': '%s,fake %s' % (location, iqn)} connection_info = vol_driver.initialize_connection(vol, self.connr) mount_device = "vde" - xml = libvirt_driver.connect_volume(connection_info, mount_device) - tree = ElementTree.fromstring(xml) + conf = libvirt_driver.connect_volume(connection_info, mount_device) + tree = conf.format_dom() dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-0' % (location, iqn) self.assertEqual(tree.get('type'), 'block') self.assertEqual(tree.find('./source').get('dev'), dev_str) diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index f1e04d3f9..043904ad6 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -504,15 +504,15 @@ class LibvirtConnection(driver.ComputeDriver): def attach_volume(self, connection_info, instance_name, mountpoint): virt_dom = self._lookup_by_name(instance_name) mount_device = mountpoint.rpartition("/")[2] - xml = self.volume_driver_method('connect_volume', - connection_info, - mount_device) + conf = self.volume_driver_method('connect_volume', + connection_info, + mount_device) if FLAGS.libvirt_type == 'lxc': - self._attach_lxc_volume(xml, virt_dom, instance_name) + self._attach_lxc_volume(conf.to_xml(), virt_dom, instance_name) else: try: - virt_dom.attachDevice(xml) + virt_dom.attachDevice(conf.to_xml()) except Exception, ex: self.volume_driver_method('disconnect_volume', connection_info, @@ -1394,10 +1394,10 @@ class LibvirtConnection(driver.ComputeDriver): for vol in block_device_mapping: connection_info = vol['connection_info'] mountpoint = vol['mount_device'] - xml = self.volume_driver_method('connect_volume', - connection_info, - mountpoint) - volumes.append(xml) + conf = self.volume_driver_method('connect_volume', + connection_info, + mountpoint) + volumes.append(conf.to_xml()) ebs_root = self._volume_in_mapping(self.default_root_device, block_device_info) diff --git a/nova/virt/libvirt/volume.py b/nova/virt/libvirt/volume.py index 784867eaf..38f8c2dd0 100644 --- a/nova/virt/libvirt/volume.py +++ b/nova/virt/libvirt/volume.py @@ -24,6 +24,7 @@ from nova import exception from nova import flags from nova import log as logging from nova import utils +from nova.virt.libvirt import config LOG = logging.getLogger(__name__) FLAGS = flags.FLAGS @@ -41,14 +42,15 @@ class LibvirtVolumeDriver(object): def connect_volume(self, connection_info, mount_device): """Connect the volume. Returns xml for libvirt.""" - driver = self._pick_volume_driver() - device_path = connection_info['data']['device_path'] - xml = """<disk type='block'> - <driver name='%s' type='raw' cache='none'/> - <source dev='%s'/> - <target dev='%s' bus='virtio'/> - </disk>""" % (driver, device_path, mount_device) - return xml + conf = config.LibvirtConfigGuestDisk() + conf.source_type = "block" + conf.driver_name = self._pick_volume_driver() + conf.driver_format = "raw" + conf.driver_cache = "none" + conf.source_path = connection_info['data']['device_path'] + conf.target_dev = mount_device + conf.target_bus = "virtio" + return conf def disconnect_volume(self, connection_info, mount_device): """Disconnect the volume""" @@ -59,29 +61,32 @@ class LibvirtFakeVolumeDriver(LibvirtVolumeDriver): """Driver to attach Network volumes to libvirt.""" def connect_volume(self, connection_info, mount_device): - protocol = 'fake' - name = 'fake' - xml = """<disk type='network'> - <driver name='qemu' type='raw' cache='none'/> - <source protocol='%s' name='%s'/> - <target dev='%s' bus='virtio'/> - </disk>""" % (protocol, name, mount_device) - return xml + conf = config.LibvirtConfigGuestDisk() + conf.source_type = "network" + conf.driver_name = "qemu" + conf.driver_format = "raw" + conf.driver_cache = "none" + conf.source_protocol = "fake" + conf.source_host = "fake" + conf.target_dev = mount_device + conf.target_bus = "virtio" + return conf class LibvirtNetVolumeDriver(LibvirtVolumeDriver): """Driver to attach Network volumes to libvirt.""" def connect_volume(self, connection_info, mount_device): - driver = self._pick_volume_driver() - protocol = connection_info['driver_volume_type'] - name = connection_info['data']['name'] - xml = """<disk type='network'> - <driver name='%s' type='raw' cache='none'/> - <source protocol='%s' name='%s'/> - <target dev='%s' bus='virtio'/> - </disk>""" % (driver, protocol, name, mount_device) - return xml + conf = config.LibvirtConfigGuestDisk() + conf.source_type = "network" + conf.driver_name = self._pick_volume_driver() + conf.driver_format = "raw" + conf.driver_cache = "none" + conf.source_protocol = connection_info['driver_volume_type'] + conf.source_host = connection_info['data']['name'] + conf.target_dev = mount_device + conf.target_bus = "virtio" + return conf class LibvirtISCSIVolumeDriver(LibvirtVolumeDriver): |
