Merge "libvirt: saving the lxc rootfs device in instance metadata"

This commit is contained in:
Jenkins 2014-08-07 03:27:59 +00:00 committed by Gerrit Code Review
commit e4efb4541b
2 changed files with 32 additions and 10 deletions

View File

@ -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",

View File

@ -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():