Merge "libvirt: saving the lxc rootfs device in instance metadata"
This commit is contained in:
commit
e4efb4541b
|
@ -7914,6 +7914,29 @@ Active: 8381604 kB
|
|||
self.assertEqual(0, create.call_args_list[0][1]['launch_flags'])
|
||||
self.assertEqual(0, domain.resume.call_count)
|
||||
|
||||
def test_lxc_create_and_rootfs_saved(self):
|
||||
self.flags(virt_type='lxc', group='libvirt')
|
||||
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
instance = db.instance_create(self.context, self.test_instance)
|
||||
inst_obj = objects.Instance.get_by_uuid(self.context, instance['uuid'])
|
||||
|
||||
with contextlib.nested(
|
||||
mock.patch('nova.virt.disk.api.setup_container',
|
||||
return_value='/dev/nbd1'),
|
||||
mock.patch('nova.virt.disk.api.clean_lxc_namespace'),
|
||||
mock.patch('nova.openstack.common.fileutils.ensure_tree'),
|
||||
mock.patch.object(conn.image_backend, 'image'),
|
||||
mock.patch.object(conn, '_enable_hairpin'),
|
||||
mock.patch.object(conn, 'get_info',
|
||||
return_value={'state': power_state.RUNNING})
|
||||
):
|
||||
conn._conn.defineXML = mock.Mock()
|
||||
conn._create_domain('xml', instance=inst_obj)
|
||||
self.assertEqual('/dev/nbd1',
|
||||
inst_obj.system_metadata.get(
|
||||
'rootfs_device_name'))
|
||||
|
||||
def _test_create_with_network_events(self, neutron_failure=None,
|
||||
power_on=True):
|
||||
self.flags(vif_driver="nova.tests.fake_network.FakeVIFDriver",
|
||||
|
|
|
@ -890,8 +890,8 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
def _teardown_container(self, instance):
|
||||
inst_path = libvirt_utils.get_instance_path(instance)
|
||||
container_dir = os.path.join(inst_path, 'rootfs')
|
||||
container_root_device = instance.get('root_device_name')
|
||||
disk.teardown_container(container_dir, container_root_device)
|
||||
rootfs_dev = instance.system_metadata.get('rootfs_device_name')
|
||||
disk.teardown_container(container_dir, rootfs_dev)
|
||||
|
||||
def _destroy(self, instance):
|
||||
try:
|
||||
|
@ -3636,15 +3636,14 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
fileutils.ensure_tree(container_dir)
|
||||
|
||||
image = self.image_backend.image(instance, 'disk')
|
||||
container_root_device = disk.setup_container(image.path,
|
||||
container_dir=container_dir,
|
||||
use_cow=CONF.use_cow_images)
|
||||
rootfs_dev = disk.setup_container(image.path,
|
||||
container_dir=container_dir,
|
||||
use_cow=CONF.use_cow_images)
|
||||
|
||||
try:
|
||||
# Note(GuanQiang): save container root device name here, used for
|
||||
# detaching the linked image device when deleting
|
||||
# the lxc instance.
|
||||
if container_root_device:
|
||||
instance.root_device_name = container_root_device
|
||||
# Save rootfs device to disconnect it when deleting the instance
|
||||
if rootfs_dev:
|
||||
instance.system_metadata['rootfs_device_name'] = rootfs_dev
|
||||
instance.save()
|
||||
except Exception:
|
||||
with excutils.save_and_reraise_exception():
|
||||
|
|
Loading…
Reference in New Issue