summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)