Merge "Add support for vd2 user context to other drivers"
This commit is contained in:
@@ -444,7 +444,7 @@ class VMOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
mock_configdrive_required.assert_called_once_with(mock_instance)
|
||||
if configdrive_required:
|
||||
mock_create_config_drive.assert_called_once_with(
|
||||
mock_instance, [mock.sentinel.FILE],
|
||||
self.context, mock_instance, [mock.sentinel.FILE],
|
||||
mock.sentinel.PASSWORD,
|
||||
mock.sentinel.INFO)
|
||||
mock_attach_config_drive.assert_called_once_with(
|
||||
@@ -687,19 +687,24 @@ class VMOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
if config_drive_format != self.ISO9660:
|
||||
self.assertRaises(exception.ConfigDriveUnsupportedFormat,
|
||||
self._vmops._create_config_drive,
|
||||
mock_instance, [mock.sentinel.FILE],
|
||||
self.context,
|
||||
mock_instance,
|
||||
[mock.sentinel.FILE],
|
||||
mock.sentinel.PASSWORD,
|
||||
mock.sentinel.NET_INFO,
|
||||
rescue)
|
||||
elif side_effect is processutils.ProcessExecutionError:
|
||||
self.assertRaises(processutils.ProcessExecutionError,
|
||||
self._vmops._create_config_drive,
|
||||
mock_instance, [mock.sentinel.FILE],
|
||||
self.context,
|
||||
mock_instance,
|
||||
[mock.sentinel.FILE],
|
||||
mock.sentinel.PASSWORD,
|
||||
mock.sentinel.NET_INFO,
|
||||
rescue)
|
||||
else:
|
||||
path = self._vmops._create_config_drive(mock_instance,
|
||||
path = self._vmops._create_config_drive(self.context,
|
||||
mock_instance,
|
||||
[mock.sentinel.FILE],
|
||||
mock.sentinel.PASSWORD,
|
||||
mock.sentinel.NET_INFO,
|
||||
@@ -707,7 +712,8 @@ class VMOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
mock_InstanceMetadata.assert_called_once_with(
|
||||
mock_instance, content=[mock.sentinel.FILE],
|
||||
extra_md={'admin_pass': mock.sentinel.PASSWORD},
|
||||
network_info=mock.sentinel.NET_INFO)
|
||||
network_info=mock.sentinel.NET_INFO,
|
||||
request_context=self.context)
|
||||
mock_get_configdrive_path.assert_has_calls(
|
||||
expected_get_configdrive_path_calls)
|
||||
mock_ConfigDriveBuilder.assert_called_with(
|
||||
@@ -1330,7 +1336,7 @@ class VMOpsTestCase(test_base.HyperVBaseTestCase):
|
||||
drive_type=constants.DISK)
|
||||
mock_detach_config_drive.assert_called_once_with(mock_instance.name)
|
||||
mock_create_config_drive.assert_called_once_with(
|
||||
mock_instance,
|
||||
self.context, mock_instance,
|
||||
injected_files=None,
|
||||
admin_password=mock.sentinel.rescue_password,
|
||||
network_info=mock.sentinel.network_info,
|
||||
|
||||
@@ -893,7 +893,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
||||
self._test_spawn()
|
||||
# assert configdrive was generated
|
||||
mock_configdrive.assert_called_once_with(mock.ANY, mock.ANY, mock.ANY,
|
||||
extra_md={}, files=[])
|
||||
mock.ANY, extra_md={},
|
||||
files=[])
|
||||
|
||||
@mock.patch.object(configdrive, 'required_by')
|
||||
@mock.patch.object(loopingcall, 'FixedIntervalLoopingCall')
|
||||
@@ -1722,11 +1723,12 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
|
||||
mock_instance_meta.return_value = 'fake-instance'
|
||||
mock_make_drive = mock.MagicMock(make_drive=lambda *_: None)
|
||||
mock_cd_builder.return_value.__enter__.return_value = mock_make_drive
|
||||
self.driver._generate_configdrive(self.instance, self.node,
|
||||
self.network_info)
|
||||
self.driver._generate_configdrive(None, self.instance,
|
||||
self.node, self.network_info)
|
||||
mock_cd_builder.assert_called_once_with(instance_md='fake-instance')
|
||||
mock_instance_meta.assert_called_once_with(self.instance,
|
||||
network_info=self.network_info, extra_md={}, content=None)
|
||||
network_info=self.network_info, extra_md={}, content=None,
|
||||
request_context=None)
|
||||
|
||||
def test_generate_configdrive_fail(self, mock_cd_builder,
|
||||
mock_instance_meta):
|
||||
@@ -1737,12 +1739,13 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
|
||||
mock_cd_builder.return_value.__enter__.return_value = mock_make_drive
|
||||
|
||||
self.assertRaises(exception.ConfigDriveMountFailed,
|
||||
self.driver._generate_configdrive,
|
||||
self.driver._generate_configdrive, None,
|
||||
self.instance, self.node, self.network_info)
|
||||
|
||||
mock_cd_builder.assert_called_once_with(instance_md='fake-instance')
|
||||
mock_instance_meta.assert_called_once_with(self.instance,
|
||||
network_info=self.network_info, extra_md={}, content=None)
|
||||
network_info=self.network_info, extra_md={}, content=None,
|
||||
request_context=None)
|
||||
|
||||
|
||||
class HashRingTestCase(test.NoDBTestCase):
|
||||
|
||||
@@ -97,7 +97,7 @@ class ConfigDriveTestCase(test.NoDBTestCase):
|
||||
|
||||
class FakeInstanceMetadata(object):
|
||||
def __init__(self, instance, content=None, extra_md=None,
|
||||
network_info=None):
|
||||
network_info=None, request_context=None):
|
||||
pass
|
||||
|
||||
def metadata_for_config_drive(self):
|
||||
@@ -141,15 +141,16 @@ class ConfigDriveTestCase(test.NoDBTestCase):
|
||||
self.test_instance.config_drive = 'True'
|
||||
self.mox.StubOutWithMock(vmops.VMwareVMOps, '_create_config_drive')
|
||||
self.mox.StubOutWithMock(vmops.VMwareVMOps, '_attach_cdrom_to_vm')
|
||||
self.conn._vmops._create_config_drive(self.test_instance,
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg()
|
||||
).AndReturn('[ds1] fake.iso')
|
||||
self.conn._vmops._create_config_drive(mox.IgnoreArg(),
|
||||
self.test_instance,
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg()
|
||||
).AndReturn('[ds1] fake.iso')
|
||||
self.conn._vmops._attach_cdrom_to_vm(mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg(),
|
||||
|
||||
@@ -925,15 +925,16 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
|
||||
vm_ref = mock.Mock()
|
||||
mock_create_config_drive.return_value = "fake_iso_path"
|
||||
self._vmops._configure_config_drive(
|
||||
self._instance, vm_ref, self._dc_info, self._ds,
|
||||
self._context, self._instance, vm_ref, self._dc_info, self._ds,
|
||||
injected_files, admin_password, network_info)
|
||||
|
||||
upload_iso_path = self._ds.build_path("fake_iso_path")
|
||||
mock_get_inventory_path.assert_called_once_with(self._session.vim,
|
||||
self._dc_info.ref)
|
||||
mock_create_config_drive.assert_called_once_with(self._instance,
|
||||
injected_files, admin_password, network_info, self._ds.name,
|
||||
'fake_path', self._instance.uuid, "Fake-CookieJar")
|
||||
mock_create_config_drive.assert_called_once_with(
|
||||
self._context, self._instance, injected_files, admin_password,
|
||||
network_info, self._ds.name, 'fake_path', self._instance.uuid,
|
||||
"Fake-CookieJar")
|
||||
mock_attach_cdrom_to_vm.assert_called_once_with(
|
||||
vm_ref, self._instance, self._ds.ref, str(upload_iso_path))
|
||||
|
||||
@@ -1550,8 +1551,9 @@ class VMwareVMOpsTestCase(test.NoDBTestCase):
|
||||
|
||||
if config_drive:
|
||||
mock_configure_config_drive.assert_called_once_with(
|
||||
self._instance, 'fake_vm_ref', self._dc_info,
|
||||
self._ds, 'fake_files', 'password', network_info)
|
||||
self._context, self._instance, 'fake_vm_ref',
|
||||
self._dc_info, self._ds, 'fake_files', 'password',
|
||||
network_info)
|
||||
mock_update_vnic_index.assert_called_once_with(
|
||||
self._context, self._instance, network_info)
|
||||
|
||||
|
||||
@@ -158,8 +158,9 @@ class GenerateConfigDriveTestCase(VMUtilsTestBase):
|
||||
|
||||
with mock.patch.object(six.moves.builtins, 'open') as mock_open:
|
||||
mock_open.return_value.__enter__.return_value = 'open_fd'
|
||||
vm_utils.generate_configdrive('session', 'instance', 'vm_ref',
|
||||
'userdevice', 'network_info')
|
||||
vm_utils.generate_configdrive('session', 'context', 'instance',
|
||||
'vm_ref', 'userdevice',
|
||||
'network_info')
|
||||
|
||||
mock_size.assert_called_with('/mock/configdrive.vhd')
|
||||
mock_open.assert_called_with('/mock/configdrive.vhd')
|
||||
@@ -168,7 +169,7 @@ class GenerateConfigDriveTestCase(VMUtilsTestBase):
|
||||
'/mock/configdrive.vhd')
|
||||
mock_instance_metadata.assert_called_with(
|
||||
'instance', content=None, extra_md={},
|
||||
network_info='network_info')
|
||||
network_info='network_info', request_context='context')
|
||||
mock_stream.assert_called_with('session', 'instance', 'vhd',
|
||||
'open_fd', 100, 'vdi_ref')
|
||||
|
||||
@@ -180,7 +181,7 @@ class GenerateConfigDriveTestCase(VMUtilsTestBase):
|
||||
def test_vdi_cleaned_up(self, mock_instance_metadata, mock_create,
|
||||
mock_find_sr, mock_destroy):
|
||||
self.assertRaises(test.TestingException, vm_utils.generate_configdrive,
|
||||
'session', None, None, None, None)
|
||||
'session', None, None, None, None, None)
|
||||
mock_destroy.assert_called_once_with('session', 'vdi_ref')
|
||||
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ class VMOpsTestCase(VMOpsTestBase):
|
||||
{'properties': {'auto_disk_config': 'false'}})
|
||||
vdis = {'root': {'ref': 'fake-ref'}}
|
||||
self.assertRaises(test.TestingException, self._vmops._attach_disks,
|
||||
instance, image_meta=image_meta, vm_ref=None,
|
||||
ctxt, instance, image_meta=image_meta, vm_ref=None,
|
||||
name_label=None, vdis=vdis, disk_image_type='fake',
|
||||
network_info=[], rescue=True)
|
||||
self.assertFalse(try_auto_config.called)
|
||||
@@ -224,7 +224,7 @@ class VMOpsTestCase(VMOpsTestBase):
|
||||
{'properties': {'auto_disk_config': 'true'}})
|
||||
vdis = {'root': {'ref': 'fake-ref'}}
|
||||
self.assertRaises(test.TestingException, self._vmops._attach_disks,
|
||||
instance, image_meta=image_meta, vm_ref=None,
|
||||
ctxt, instance, image_meta=image_meta, vm_ref=None,
|
||||
name_label=None, vdis=vdis, disk_image_type='fake',
|
||||
network_info=[], rescue=True)
|
||||
try_auto_config.assert_called_once_with(self._vmops._session,
|
||||
@@ -397,8 +397,8 @@ class SpawnTestCase(VMOpsTestBase):
|
||||
step += 1
|
||||
self.vmops._update_instance_progress(context, instance, step, steps)
|
||||
|
||||
self.vmops._attach_disks(instance, image_meta, vm_ref, name_label,
|
||||
vdis, di_type, network_info, rescue,
|
||||
self.vmops._attach_disks(context, instance, image_meta, vm_ref,
|
||||
name_label, vdis, di_type, network_info, rescue,
|
||||
admin_password, injected_files)
|
||||
if attach_pci_dev:
|
||||
fake_dev = {
|
||||
@@ -579,8 +579,9 @@ class SpawnTestCase(VMOpsTestBase):
|
||||
|
||||
if resize_instance:
|
||||
self.vmops._resize_up_vdis(instance, vdis)
|
||||
self.vmops._attach_disks(instance, image_meta, vm_ref, name_label,
|
||||
vdis, di_type, network_info, False, None, None)
|
||||
self.vmops._attach_disks(context, instance, image_meta, vm_ref,
|
||||
name_label, vdis, di_type, network_info, False,
|
||||
None, None)
|
||||
self.vmops._attach_mapped_block_devices(instance, block_device_info)
|
||||
pci_manager.get_instance_pci_devs(instance).AndReturn([])
|
||||
|
||||
|
||||
@@ -2356,8 +2356,9 @@ class XenAPIAutoDiskConfigTestCase(stubs.XenAPITestBase):
|
||||
'properties': {'vm_mode': 'xen'}})
|
||||
|
||||
self.mox.ReplayAll()
|
||||
self.conn._vmops._attach_disks(instance, image_meta, vm_ref,
|
||||
instance['name'], vdis, disk_image_type, "fake_nw_inf")
|
||||
self.conn._vmops._attach_disks(self.context, instance, image_meta,
|
||||
vm_ref, instance['name'], vdis, disk_image_type,
|
||||
"fake_nw_inf")
|
||||
|
||||
self.assertEqual(marker["partition_called"], called)
|
||||
|
||||
@@ -2477,8 +2478,9 @@ class XenAPIGenerateLocal(stubs.XenAPITestBase):
|
||||
{'id': uuids.image_id,
|
||||
'disk_format': 'vhd',
|
||||
'properties': {'vm_mode': 'xen'}})
|
||||
self.conn._vmops._attach_disks(instance, image_meta, vm_ref,
|
||||
instance['name'], vdis, disk_image_type, "fake_nw_inf")
|
||||
self.conn._vmops._attach_disks(self.context, instance, image_meta,
|
||||
vm_ref, instance['name'], vdis, disk_image_type,
|
||||
"fake_nw_inf")
|
||||
self.assertTrue(self.called)
|
||||
|
||||
def test_generate_swap(self):
|
||||
|
||||
@@ -295,7 +295,8 @@ class VMOps(object):
|
||||
self._save_device_metadata(context, instance, block_device_info)
|
||||
|
||||
if configdrive.required_by(instance):
|
||||
configdrive_path = self._create_config_drive(instance,
|
||||
configdrive_path = self._create_config_drive(context,
|
||||
instance,
|
||||
injected_files,
|
||||
admin_password,
|
||||
network_info)
|
||||
@@ -440,8 +441,8 @@ class VMOps(object):
|
||||
raise exception.InstanceUnacceptable(instance_id=instance_id,
|
||||
reason=reason)
|
||||
|
||||
def _create_config_drive(self, instance, injected_files, admin_password,
|
||||
network_info, rescue=False):
|
||||
def _create_config_drive(self, context, instance, injected_files,
|
||||
admin_password, network_info, rescue=False):
|
||||
if CONF.config_drive_format != 'iso9660':
|
||||
raise exception.ConfigDriveUnsupportedFormat(
|
||||
format=CONF.config_drive_format)
|
||||
@@ -452,10 +453,9 @@ class VMOps(object):
|
||||
if admin_password and CONF.hyperv.config_drive_inject_password:
|
||||
extra_md['admin_pass'] = admin_password
|
||||
|
||||
inst_md = instance_metadata.InstanceMetadata(instance,
|
||||
content=injected_files,
|
||||
extra_md=extra_md,
|
||||
network_info=network_info)
|
||||
inst_md = instance_metadata.InstanceMetadata(
|
||||
instance, content=injected_files, extra_md=extra_md,
|
||||
network_info=network_info, request_context=context)
|
||||
|
||||
configdrive_path_iso = self._pathutils.get_configdrive_path(
|
||||
instance.name, constants.DVD_FORMAT, rescue=rescue)
|
||||
@@ -822,6 +822,7 @@ class VMOps(object):
|
||||
if configdrive.required_by(instance):
|
||||
self._detach_config_drive(instance.name)
|
||||
rescue_configdrive_path = self._create_config_drive(
|
||||
context,
|
||||
instance,
|
||||
injected_files=None,
|
||||
admin_password=rescue_password,
|
||||
|
||||
@@ -684,7 +684,7 @@ class IronicDriver(virt_driver.ComputeDriver):
|
||||
ports = self.ironicclient.call("node.list_ports", node.uuid)
|
||||
return set([p.address for p in ports])
|
||||
|
||||
def _generate_configdrive(self, instance, node, network_info,
|
||||
def _generate_configdrive(self, context, instance, node, network_info,
|
||||
extra_md=None, files=None):
|
||||
"""Generate a config drive.
|
||||
|
||||
@@ -701,7 +701,8 @@ class IronicDriver(virt_driver.ComputeDriver):
|
||||
extra_md = {}
|
||||
|
||||
i_meta = instance_metadata.InstanceMetadata(instance,
|
||||
content=files, extra_md=extra_md, network_info=network_info)
|
||||
content=files, extra_md=extra_md, network_info=network_info,
|
||||
request_context=context)
|
||||
|
||||
with tempfile.NamedTemporaryFile() as uncompressed:
|
||||
with configdrive.ConfigDriveBuilder(instance_md=i_meta) as cdb:
|
||||
@@ -788,7 +789,7 @@ class IronicDriver(virt_driver.ComputeDriver):
|
||||
|
||||
try:
|
||||
configdrive_value = self._generate_configdrive(
|
||||
instance, node, network_info, extra_md=extra_md,
|
||||
context, instance, node, network_info, extra_md=extra_md,
|
||||
files=injected_files)
|
||||
except Exception as e:
|
||||
with excutils.save_and_reraise_exception():
|
||||
|
||||
@@ -211,12 +211,14 @@ class VMwareVMOps(object):
|
||||
self._extend_virtual_disk(instance, size_in_kb,
|
||||
root_vmdk_path, dc_info.ref)
|
||||
|
||||
def _configure_config_drive(self, instance, vm_ref, dc_info, datastore,
|
||||
injected_files, admin_password, network_info):
|
||||
def _configure_config_drive(self, context, instance, vm_ref, dc_info,
|
||||
datastore, injected_files, admin_password,
|
||||
network_info):
|
||||
session_vim = self._session.vim
|
||||
cookies = session_vim.client.options.transport.cookiejar
|
||||
dc_path = vutil.get_inventory_path(session_vim, dc_info.ref)
|
||||
uploaded_iso_path = self._create_config_drive(instance,
|
||||
uploaded_iso_path = self._create_config_drive(context,
|
||||
instance,
|
||||
injected_files,
|
||||
admin_password,
|
||||
network_info,
|
||||
@@ -803,7 +805,7 @@ class VMwareVMOps(object):
|
||||
|
||||
if configdrive.required_by(instance):
|
||||
self._configure_config_drive(
|
||||
instance, vm_ref, vi.dc_info, vi.datastore,
|
||||
context, instance, vm_ref, vi.dc_info, vi.datastore,
|
||||
injected_files, admin_password, network_info)
|
||||
|
||||
# Rename the VM. This is done after the spec is created to ensure
|
||||
@@ -827,9 +829,9 @@ class VMwareVMOps(object):
|
||||
raise exception.UnsupportedHardware(model=adapter_type,
|
||||
virt="vmware")
|
||||
|
||||
def _create_config_drive(self, instance, injected_files, admin_password,
|
||||
network_info, data_store_name, dc_name,
|
||||
upload_folder, cookies):
|
||||
def _create_config_drive(self, context, instance, injected_files,
|
||||
admin_password, network_info, data_store_name,
|
||||
dc_name, upload_folder, cookies):
|
||||
if CONF.config_drive_format != 'iso9660':
|
||||
reason = (_('Invalid config_drive_format "%s"') %
|
||||
CONF.config_drive_format)
|
||||
@@ -843,7 +845,8 @@ class VMwareVMOps(object):
|
||||
inst_md = instance_metadata.InstanceMetadata(instance,
|
||||
content=injected_files,
|
||||
extra_md=extra_md,
|
||||
network_info=network_info)
|
||||
network_info=network_info,
|
||||
request_context=context)
|
||||
try:
|
||||
with configdrive.ConfigDriveBuilder(instance_md=inst_md) as cdb:
|
||||
with utils.tempdir() as tmp_path:
|
||||
|
||||
@@ -1107,7 +1107,7 @@ def generate_iso_blank_root_disk(session, instance, vm_ref, userdevice,
|
||||
'user', size_gb * 1024, CONF.default_ephemeral_format)
|
||||
|
||||
|
||||
def generate_configdrive(session, instance, vm_ref, userdevice,
|
||||
def generate_configdrive(session, context, instance, vm_ref, userdevice,
|
||||
network_info, admin_password=None, files=None):
|
||||
sr_ref = safe_find_sr(session)
|
||||
vdi_ref = create_vdi(session, sr_ref, instance, 'config-2',
|
||||
@@ -1118,7 +1118,7 @@ def generate_configdrive(session, instance, vm_ref, userdevice,
|
||||
extra_md['admin_pass'] = admin_password
|
||||
inst_md = instance_metadata.InstanceMetadata(
|
||||
instance, content=files, extra_md=extra_md,
|
||||
network_info=network_info)
|
||||
network_info=network_info, request_context=context)
|
||||
with configdrive.ConfigDriveBuilder(instance_md=inst_md) as cdb:
|
||||
with utils.tempdir() as tmp_path:
|
||||
tmp_file = os.path.join(tmp_path, 'configdrive')
|
||||
|
||||
@@ -455,8 +455,9 @@ class VMOps(object):
|
||||
if resize:
|
||||
self._resize_up_vdis(instance, vdis)
|
||||
|
||||
self._attach_disks(instance, image_meta, vm_ref, name_label, vdis,
|
||||
disk_image_type, network_info, rescue,
|
||||
self._attach_disks(context, instance, image_meta, vm_ref,
|
||||
name_label, vdis, disk_image_type,
|
||||
network_info, rescue,
|
||||
admin_password, injected_files)
|
||||
if not first_boot:
|
||||
self._attach_mapped_block_devices(instance,
|
||||
@@ -717,8 +718,8 @@ class VMOps(object):
|
||||
use_pv_kernel, device_id)
|
||||
return vm_ref
|
||||
|
||||
def _attach_disks(self, instance, image_meta, vm_ref, name_label, vdis,
|
||||
disk_image_type, network_info, rescue=False,
|
||||
def _attach_disks(self, context, instance, image_meta, vm_ref, name_label,
|
||||
vdis, disk_image_type, network_info, rescue=False,
|
||||
admin_password=None, files=None):
|
||||
flavor = instance.get_flavor()
|
||||
|
||||
@@ -800,7 +801,8 @@ class VMOps(object):
|
||||
|
||||
# Attach (optional) configdrive v2 disk
|
||||
if configdrive.required_by(instance):
|
||||
vm_utils.generate_configdrive(self._session, instance, vm_ref,
|
||||
vm_utils.generate_configdrive(self._session, context,
|
||||
instance, vm_ref,
|
||||
DEVICE_CONFIGDRIVE,
|
||||
network_info,
|
||||
admin_password=admin_password,
|
||||
|
||||
Reference in New Issue
Block a user