From 78414e71606b37ff2147ee886ee1fd962ef3a911 Mon Sep 17 00:00:00 2001 From: Claudiu Belu Date: Fri, 18 Sep 2020 18:16:16 +0300 Subject: [PATCH] vmutils: Adds the ability to modify the VM's chassis asset tag The Msvm_VirtualSystemSettingData object associated with a VM has a field named "ChassisAssetTag". The value set in this field is reflected in Linux VMs in /sys/class/dmi/id/chassis-asset-tag. This value is checked by cloud-init in order to figure out if it is currently running inside an OpenStack VM. The verification above has been introduced in cloud-init [1] in order to avoid costly metadata probes that aren't needed in non-OpenStack VMs. Setting the ChassisAssetTag will allow us to pass these checks. Partially-Fixes: #1895976 [1] https://github.com/canonical/cloud-init/commit/1efa8a0a030794cec68197100f31a856d0d264ab Change-Id: I50dd761b3df9f2d243ca295f02d20422f6af965e --- os_win/tests/unit/utils/compute/test_vmutils.py | 11 +++++++++-- os_win/utils/compute/vmutils.py | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/os_win/tests/unit/utils/compute/test_vmutils.py b/os_win/tests/unit/utils/compute/test_vmutils.py index e71be1f5..442b70b1 100644 --- a/os_win/tests/unit/utils/compute/test_vmutils.py +++ b/os_win/tests/unit/utils/compute/test_vmutils.py @@ -329,6 +329,7 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase): {'vnuma_enabled': mock.sentinel.vnuma_enabled}, {'configuration_root_dir': mock.sentinel.configuration_root_dir}, {'host_shutdown_action': mock.sentinel.shutdown_action}, + {'chassis_asset_tag': mock.sentinel.chassis_asset_tag2}, {}) @ddt.unpack @mock.patch.object(vmutils.VMUtils, '_modify_virtual_system') @@ -341,7 +342,8 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase): mock_set_mem, mock_set_vcpus, mock_modify_virtual_system, host_shutdown_action=None, - configuration_root_dir=None, vnuma_enabled=None): + configuration_root_dir=None, vnuma_enabled=None, + chassis_asset_tag=None): mock_vmsettings = mock_lookup_vm_check.return_value self._vmutils.update_vm( mock.sentinel.vm_name, mock.sentinel.memory_mb, @@ -350,7 +352,8 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase): mock.sentinel.dynamic_mem_ratio, configuration_root_dir, host_shutdown_action=host_shutdown_action, vnuma_enabled=vnuma_enabled, - snapshot_type=mock.sentinel.snap_type) + snapshot_type=mock.sentinel.snap_type, + chassis_asset_tag=chassis_asset_tag) mock_lookup_vm_check.assert_called_once_with(mock.sentinel.vm_name, for_update=True) @@ -378,6 +381,10 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase): if vnuma_enabled: self.assertEqual(vnuma_enabled, mock_vmsettings.VirtualNumaEnabled) + if chassis_asset_tag: + self.assertEqual(chassis_asset_tag, + mock_vmsettings.ChassisAssetTag) + mock_set_vm_snap_type.assert_called_once_with( mock_vmsettings, mock.sentinel.snap_type) diff --git a/os_win/utils/compute/vmutils.py b/os_win/utils/compute/vmutils.py index b31d6e43..7c2a99cc 100644 --- a/os_win/utils/compute/vmutils.py +++ b/os_win/utils/compute/vmutils.py @@ -314,7 +314,8 @@ class VMUtils(baseutils.BaseUtilsVirt): configuration_root_dir=None, snapshot_dir=None, host_shutdown_action=None, vnuma_enabled=None, snapshot_type=None, - is_planned_vm=False): + is_planned_vm=False, + chassis_asset_tag=None): vmsetting = self._lookup_vm_check(vm_name, for_update=True) if host_shutdown_action: @@ -338,6 +339,9 @@ class VMUtils(baseutils.BaseUtilsVirt): if snapshot_type: self._set_vm_snapshot_type(vmsetting, snapshot_type) + if chassis_asset_tag: + vmsetting.ChassisAssetTag = chassis_asset_tag + self._modify_virtual_system(vmsetting) def check_admin_permissions(self):