summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKravchenko Pavel <kpavel@il.ibm.com>2012-12-25 17:50:37 +0200
committerKravchenko Pavel <kpavel@il.ibm.com>2012-12-27 01:06:05 +0200
commita1c90a3b3dca567c0075b24901b85a2d41265305 (patch)
tree68f4fd280f43bf46539a8babd1dfedadbbc69763
parent094d6b294bec70501f9bbdce3df63c8a328e06bf (diff)
Check for image_meta in libvirt.driver.spawn
This adds check that image_meta exists in libvirt driver spawn method. In case it doesn't the image shouldn't be created. part of libvirt driver support for blueprint rebuild-for-ha DocImpact Change-Id: I097c7cbfde96bcb21b4f06af4e5bac00440849c2 Co-authored-by: Oshrit Feder <oshritf@il.ibm.com>
-rw-r--r--nova/tests/test_libvirt.py32
-rw-r--r--nova/virt/libvirt/driver.py4
2 files changed, 35 insertions, 1 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 02578e888..362b53205 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -2451,6 +2451,38 @@ class LibvirtConnTestCase(test.TestCase):
shutil.rmtree(os.path.join(CONF.instances_path,
CONF.base_dir_name))
+ def test_spawn_without_image_meta(self):
+ self.create_image_called = False
+
+ def fake_none(*args, **kwargs):
+ return
+
+ def fake_create_image(*args, **kwargs):
+ self.create_image_called = True
+
+ def fake_get_info(instance):
+ return {'state': power_state.RUNNING}
+
+ instance_ref = self.test_instance
+ instance_ref['image_ref'] = 1
+ instance = db.instance_create(self.context, instance_ref)
+
+ conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
+ self.stubs.Set(conn, 'to_xml', fake_none)
+ self.stubs.Set(conn, '_create_image', fake_create_image)
+ self.stubs.Set(conn, '_create_domain_and_network', fake_none)
+ self.stubs.Set(conn, 'get_info', fake_get_info)
+
+ conn.spawn(self.context, instance, None, [], None)
+ self.assertFalse(self.create_image_called)
+
+ conn.spawn(self.context,
+ instance,
+ {'id': instance['image_ref']},
+ [],
+ None)
+ self.assertTrue(self.create_image_called)
+
def test_get_console_output_file(self):
fake_libvirt_utils.files['console.log'] = '01234567890'
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index bf45aad1d..cc2edfef1 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -1100,7 +1100,9 @@ class LibvirtDriver(driver.ComputeDriver):
admin_password, network_info=None, block_device_info=None):
xml = self.to_xml(instance, network_info, image_meta,
block_device_info=block_device_info)
- self._create_image(context, instance, xml, network_info=network_info,
+ if image_meta:
+ self._create_image(context, instance, xml,
+ network_info=network_info,
block_device_info=block_device_info,
files=injected_files,
admin_pass=admin_password)