Save connection info in libvirt after volume connect
The libvirt driver will connect volumes for BFV while processing
the guest configuration, but not save the connection_info into
the database. This adds a save there to make sure that any
storage driver details get persisted.
Change-Id: Ia99e04ad80a2823a6852debf0919e72b2f93bd26
Related-bug: #1328245
(cherry picked from commit a1a2d0605b
)
This commit is contained in:
parent
4c6b0f71c2
commit
a365897a32
|
@ -141,6 +141,14 @@ _fake_NodeDevXml = \
|
|||
</device>"""}
|
||||
|
||||
|
||||
def mocked_bdm(id, bdm_info):
|
||||
bdm_mock = mock.MagicMock()
|
||||
bdm_mock.__getitem__ = lambda s, k: bdm_info[k]
|
||||
bdm_mock.get = lambda *k, **kw: bdm_info.get(*k, **kw)
|
||||
bdm_mock.id = id
|
||||
return bdm_mock
|
||||
|
||||
|
||||
def _concurrency(signal, wait, done, target, is_block_dev=False):
|
||||
signal.send()
|
||||
wait.wait()
|
||||
|
@ -1043,8 +1051,11 @@ class LibvirtConnTestCase(test.TestCase):
|
|||
instance_ref = db.instance_create(self.context, self.test_instance)
|
||||
conn_info = {'driver_volume_type': 'fake'}
|
||||
info = {'block_device_mapping': [
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/vdc'},
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/vdd'}]}
|
||||
mocked_bdm(1, {'connection_info': conn_info,
|
||||
'mount_device': '/dev/vdc'}),
|
||||
mocked_bdm(2, {'connection_info': conn_info,
|
||||
'mount_device': '/dev/vdd'}),
|
||||
]}
|
||||
|
||||
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
|
||||
instance_ref, info)
|
||||
|
@ -1056,6 +1067,8 @@ class LibvirtConnTestCase(test.TestCase):
|
|||
self.assertIsInstance(cfg.devices[3],
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertEqual(cfg.devices[3].target_dev, 'vdd')
|
||||
self.assertTrue(info['block_device_mapping'][0].save.called)
|
||||
self.assertTrue(info['block_device_mapping'][1].save.called)
|
||||
|
||||
def test_get_guest_config_with_configdrive(self):
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
|
@ -1096,10 +1109,13 @@ class LibvirtConnTestCase(test.TestCase):
|
|||
instance_ref = db.instance_create(self.context, self.test_instance)
|
||||
conn_info = {'driver_volume_type': 'fake'}
|
||||
bd_info = {'block_device_mapping': [
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/sdc',
|
||||
'disk_bus': 'scsi'},
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/sdd',
|
||||
'disk_bus': 'scsi'}]}
|
||||
mocked_bdm(1, {'connection_info': conn_info,
|
||||
'mount_device': '/dev/sdc',
|
||||
'disk_bus': 'scsi'}),
|
||||
mocked_bdm(2, {'connection_info': conn_info,
|
||||
'mount_device': '/dev/sdd',
|
||||
'disk_bus': 'scsi'}),
|
||||
]}
|
||||
|
||||
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
|
||||
instance_ref, bd_info, image_meta)
|
||||
|
@ -6887,19 +6903,21 @@ class LibvirtConnTestCase(test.TestCase):
|
|||
'_lookup_by_name',
|
||||
fake_lookup_name)
|
||||
block_device_info = {'block_device_mapping': [
|
||||
{'guest_format': None,
|
||||
'boot_index': 0,
|
||||
'mount_device': '/dev/vda',
|
||||
'connection_info':
|
||||
{'driver_volume_type': 'iscsi'},
|
||||
'disk_bus': 'virtio',
|
||||
'device_type': 'disk',
|
||||
'delete_on_termination': False}
|
||||
mocked_bdm(1, {'guest_format': None,
|
||||
'boot_index': 0,
|
||||
'mount_device': '/dev/vda',
|
||||
'connection_info':
|
||||
{'driver_volume_type': 'iscsi'},
|
||||
'disk_bus': 'virtio',
|
||||
'device_type': 'disk',
|
||||
'delete_on_termination': False}),
|
||||
]}
|
||||
conn.post_live_migration_at_destination(self.context, instance,
|
||||
network_info, True,
|
||||
block_device_info=block_device_info)
|
||||
self.assertTrue('fake' in self.resultXML)
|
||||
self.assertTrue(
|
||||
block_device_info['block_device_mapping'][0].save.called)
|
||||
|
||||
def test_create_without_pause(self):
|
||||
self.flags(virt_type='lxc', group='libvirt')
|
||||
|
|
|
@ -30,6 +30,7 @@ from nova import test
|
|||
from nova.tests.image import fake as fake_image
|
||||
from nova.tests import utils as test_utils
|
||||
from nova.tests.virt.libvirt import fake_libvirt_utils
|
||||
from nova.tests.virt.libvirt import test_libvirt
|
||||
from nova.virt import event as virtevent
|
||||
from nova.virt import fake
|
||||
from nova.virt.libvirt import imagebackend
|
||||
|
@ -449,17 +450,19 @@ class _VirtDriverTestCase(_FakeDriverBackendTestCase):
|
|||
'root_device_name': None,
|
||||
'swap': None,
|
||||
'ephemerals': [],
|
||||
'block_device_mapping': [{
|
||||
'instance_uuid': instance_ref['uuid'],
|
||||
'connection_info': {'driver_volume_type': 'fake'},
|
||||
'mount_device': '/dev/sda',
|
||||
'delete_on_termination': False,
|
||||
'virtual_name': None,
|
||||
'snapshot_id': None,
|
||||
'volume_id': 'abcdedf',
|
||||
'volume_size': None,
|
||||
'no_device': None
|
||||
}]
|
||||
'block_device_mapping': [
|
||||
test_libvirt.mocked_bdm(1, {
|
||||
'instance_uuid': instance_ref['uuid'],
|
||||
'connection_info': {'driver_volume_type': 'fake'},
|
||||
'mount_device': '/dev/sda',
|
||||
'delete_on_termination': False,
|
||||
'virtual_name': None,
|
||||
'snapshot_id': None,
|
||||
'volume_id': 'abcdedf',
|
||||
'volume_size': None,
|
||||
'no_device': None
|
||||
}),
|
||||
]
|
||||
}
|
||||
self.connection.power_on(self.ctxt, instance_ref, network_info, bdm)
|
||||
self.connection.detach_volume(connection_info,
|
||||
|
|
|
@ -3034,6 +3034,8 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
connection_info,
|
||||
info)
|
||||
devices.append(cfg)
|
||||
vol['connection_info'] = connection_info
|
||||
vol.save(nova_context.get_admin_context())
|
||||
|
||||
if 'disk.config' in disk_mapping:
|
||||
diskconfig = self.get_guest_disk_config(instance,
|
||||
|
|
Loading…
Reference in New Issue