summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2012-03-07 08:39:19 -0500
committerDaniel P. Berrange <berrange@redhat.com>2012-03-23 19:23:12 +0000
commit172ba65bdce30862fc393984d4ed57468b8fb8ab (patch)
tree5839102f575e0d9e0719e4c748e4c5f2d28048b4
parent58b2ecced2491441c6dac739a7e50e8ab6be4d66 (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.py20
-rw-r--r--nova/virt/libvirt/connection.py18
-rw-r--r--nova/virt/libvirt/volume.py55
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):