diff --git a/nova/tests/unit/virt/hyperv/test_vmops.py b/nova/tests/unit/virt/hyperv/test_vmops.py index d8b85e2578..83a3351767 100644 --- a/nova/tests/unit/virt/hyperv/test_vmops.py +++ b/nova/tests/unit/virt/hyperv/test_vmops.py @@ -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, diff --git a/nova/tests/unit/virt/ironic/test_driver.py b/nova/tests/unit/virt/ironic/test_driver.py index 73cf782fff..18cc374ab9 100644 --- a/nova/tests/unit/virt/ironic/test_driver.py +++ b/nova/tests/unit/virt/ironic/test_driver.py @@ -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): diff --git a/nova/tests/unit/virt/vmwareapi/test_configdrive.py b/nova/tests/unit/virt/vmwareapi/test_configdrive.py index 04b6bc6fcc..ad36c77408 100644 --- a/nova/tests/unit/virt/vmwareapi/test_configdrive.py +++ b/nova/tests/unit/virt/vmwareapi/test_configdrive.py @@ -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(), diff --git a/nova/tests/unit/virt/vmwareapi/test_vmops.py b/nova/tests/unit/virt/vmwareapi/test_vmops.py index 5e815a1539..bcaf65a776 100644 --- a/nova/tests/unit/virt/vmwareapi/test_vmops.py +++ b/nova/tests/unit/virt/vmwareapi/test_vmops.py @@ -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) diff --git a/nova/tests/unit/virt/xenapi/test_vm_utils.py b/nova/tests/unit/virt/xenapi/test_vm_utils.py index d07b6ea992..1fab8de844 100644 --- a/nova/tests/unit/virt/xenapi/test_vm_utils.py +++ b/nova/tests/unit/virt/xenapi/test_vm_utils.py @@ -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') diff --git a/nova/tests/unit/virt/xenapi/test_vmops.py b/nova/tests/unit/virt/xenapi/test_vmops.py index 5bf4a36fd0..d2d6b2c718 100644 --- a/nova/tests/unit/virt/xenapi/test_vmops.py +++ b/nova/tests/unit/virt/xenapi/test_vmops.py @@ -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([]) diff --git a/nova/tests/unit/virt/xenapi/test_xenapi.py b/nova/tests/unit/virt/xenapi/test_xenapi.py index 974b5ad292..e7b71d5d50 100644 --- a/nova/tests/unit/virt/xenapi/test_xenapi.py +++ b/nova/tests/unit/virt/xenapi/test_xenapi.py @@ -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): diff --git a/nova/virt/hyperv/vmops.py b/nova/virt/hyperv/vmops.py index 342cb57842..6502738121 100644 --- a/nova/virt/hyperv/vmops.py +++ b/nova/virt/hyperv/vmops.py @@ -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, diff --git a/nova/virt/ironic/driver.py b/nova/virt/ironic/driver.py index 6e1284f678..5ef3394d9e 100644 --- a/nova/virt/ironic/driver.py +++ b/nova/virt/ironic/driver.py @@ -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(): diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py index 82ef9e321d..e67b7dcba6 100644 --- a/nova/virt/vmwareapi/vmops.py +++ b/nova/virt/vmwareapi/vmops.py @@ -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: diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index a4ea28a757..483522e491 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -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') diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index 9b260c57e2..6d6f33b2e9 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -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,