summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-08-02 08:00:38 +0000
committerGerrit Code Review <review@openstack.org>2013-08-02 08:00:38 +0000
commit798984d6bafabb71f390bf253f61847a18d45630 (patch)
tree4d3e907a31998eac78c223d1bb3070642864aada
parentb18818add1ed2f60d6dee7f6f826c1338e1b8335 (diff)
parent2af0a078851a39ebad2cd1969ec3d52c49c15159 (diff)
downloadnova-798984d6bafabb71f390bf253f61847a18d45630.tar.gz
Merge "Config drive attached as cdrom" into stable/grizzly
-rw-r--r--nova/tests/test_libvirt.py2
-rw-r--r--nova/tests/test_libvirt_blockinfo.py61
-rw-r--r--nova/virt/libvirt/blockinfo.py25
3 files changed, 86 insertions, 2 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index db3b907a11..ed69f2a274 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -542,7 +542,7 @@ class LibvirtConnTestCase(test.TestCase):
self.assertEquals(type(cfg.devices[2]),
vconfig.LibvirtConfigGuestDisk)
- self.assertEquals(cfg.devices[2].target_dev, 'vdz')
+ self.assertEquals(cfg.devices[2].target_dev, 'hdd')
def test_get_guest_config_with_vnc(self):
self.flags(libvirt_type='kvm',
diff --git a/nova/tests/test_libvirt_blockinfo.py b/nova/tests/test_libvirt_blockinfo.py
index eef2deb506..05eb0ee8cb 100644
--- a/nova/tests/test_libvirt_blockinfo.py
+++ b/nova/tests/test_libvirt_blockinfo.py
@@ -248,11 +248,51 @@ class LibvirtBlockInfoTest(test.TestCase):
expect = {
'disk': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'},
'disk.local': {'bus': 'virtio', 'dev': 'vdb', 'type': 'disk'},
- 'disk.config': {'bus': 'virtio', 'dev': 'vdz', 'type': 'disk'},
+ 'disk.config': {'bus': 'ide', 'dev': 'hdd', 'type': 'cdrom'},
'root': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'}
}
self.assertEqual(mapping, expect)
+ def test_get_disk_mapping_cdrom_configdrive(self):
+ # A simple disk mapping setup, with configdrive added as cdrom
+
+ self.flags(force_config_drive=True)
+ self.flags(config_drive_format='iso9660')
+
+ user_context = context.RequestContext(self.user_id, self.project_id)
+ instance_ref = db.instance_create(user_context, self.test_instance)
+
+ mapping = blockinfo.get_disk_mapping("kvm", instance_ref,
+ "virtio", "ide")
+
+ expect = {
+ 'disk': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'},
+ 'disk.local': {'bus': 'virtio', 'dev': 'vdb', 'type': 'disk'},
+ 'disk.config': {'bus': 'ide', 'dev': 'hdd', 'type': 'cdrom'},
+ 'root': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'}
+ }
+ self.assertEqual(expect, mapping)
+
+ def test_get_disk_mapping_disk_configdrive(self):
+ # A simple disk mapping setup, with configdrive added as disk
+
+ self.flags(force_config_drive=True)
+ self.flags(config_drive_format='vfat')
+
+ user_context = context.RequestContext(self.user_id, self.project_id)
+ instance_ref = db.instance_create(user_context, self.test_instance)
+
+ mapping = blockinfo.get_disk_mapping("kvm", instance_ref,
+ "virtio", "ide")
+
+ expect = {
+ 'disk': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'},
+ 'disk.local': {'bus': 'virtio', 'dev': 'vdb', 'type': 'disk'},
+ 'disk.config': {'bus': 'virtio', 'dev': 'vdz', 'type': 'disk'},
+ 'root': {'bus': 'virtio', 'dev': 'vda', 'type': 'disk'}
+ }
+ self.assertEqual(expect, mapping)
+
def test_get_disk_mapping_ephemeral(self):
# A disk mapping with ephemeral devices
user_context = context.RequestContext(self.user_id, self.project_id)
@@ -444,3 +484,22 @@ class LibvirtBlockInfoTest(test.TestCase):
blockinfo.get_disk_bus_for_device_type,
'kvm',
image_meta)
+
+ def test_get_config_drive_type_default(self):
+ config_drive_type = blockinfo.get_config_drive_type()
+ self.assertEqual('cdrom', config_drive_type)
+
+ def test_get_config_drive_type_cdrom(self):
+ self.flags(config_drive_format='iso9660')
+ config_drive_type = blockinfo.get_config_drive_type()
+ self.assertEqual('cdrom', config_drive_type)
+
+ def test_get_config_drive_type_disk(self):
+ self.flags(config_drive_format='vfat')
+ config_drive_type = blockinfo.get_config_drive_type()
+ self.assertEqual('disk', config_drive_type)
+
+ def test_get_config_drive_type_improper_value(self):
+ self.flags(config_drive_format='test')
+ self.assertRaises(exception.ConfigDriveUnknownFormat,
+ blockinfo.get_config_drive_type)
diff --git a/nova/virt/libvirt/blockinfo.py b/nova/virt/libvirt/blockinfo.py
index fc39fc99d4..09da5ac33a 100644
--- a/nova/virt/libvirt/blockinfo.py
+++ b/nova/virt/libvirt/blockinfo.py
@@ -291,6 +291,26 @@ def get_eph_disk(ephemeral):
return 'disk.eph' + str(ephemeral['num'])
+def get_config_drive_type():
+ """Determine the type of config drive.
+
+ If config_drive_format is set to iso9660 then the config drive will
+ be 'cdrom', otherwise 'disk'.
+
+ Returns a string indicating the config drive type.
+ """
+
+ if CONF.config_drive_format == 'iso9660':
+ config_drive_type = 'cdrom'
+ elif CONF.config_drive_format == 'vfat':
+ config_drive_type = 'disk'
+ else:
+ raise exception.ConfigDriveUnknownFormat(
+ format=CONF.config_drive_format)
+
+ return config_drive_type
+
+
def get_disk_mapping(virt_type, instance,
disk_bus, cdrom_bus,
block_device_info=None,
@@ -408,8 +428,13 @@ def get_disk_mapping(virt_type, instance,
'type': 'disk'}
if configdrive.enabled_for(instance):
+ device_type = get_config_drive_type()
+ disk_bus = get_disk_bus_for_device_type(virt_type,
+ image_meta,
+ device_type)
config_info = get_next_disk_info(mapping,
disk_bus,
+ device_type,
last_device=True)
mapping['disk.config'] = config_info