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] 1efa8a0a03

Change-Id: I50dd761b3df9f2d243ca295f02d20422f6af965e
This commit is contained in:
Claudiu Belu 2020-09-18 18:16:16 +03:00
parent 0d81aded4d
commit 78414e7160
2 changed files with 14 additions and 3 deletions

View File

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

View File

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