diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-08-02 08:00:38 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-08-02 08:00:38 +0000 |
commit | 798984d6bafabb71f390bf253f61847a18d45630 (patch) | |
tree | 4d3e907a31998eac78c223d1bb3070642864aada | |
parent | b18818add1ed2f60d6dee7f6f826c1338e1b8335 (diff) | |
parent | 2af0a078851a39ebad2cd1969ec3d52c49c15159 (diff) | |
download | nova-798984d6bafabb71f390bf253f61847a18d45630.tar.gz |
Merge "Config drive attached as cdrom" into stable/grizzly
-rw-r--r-- | nova/tests/test_libvirt.py | 2 | ||||
-rw-r--r-- | nova/tests/test_libvirt_blockinfo.py | 61 | ||||
-rw-r--r-- | nova/virt/libvirt/blockinfo.py | 25 |
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 |