From 736eec00087976b37fab00ebbbd52d12d6b5aa27 Mon Sep 17 00:00:00 2001 From: Gustavo Carneiro Date: Fri, 28 Feb 2025 11:48:43 -0300 Subject: [PATCH 1/2] feat: support to CPU Affinity Set --- plugins/modules/vmware_guest.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plugins/modules/vmware_guest.py b/plugins/modules/vmware_guest.py index 14decfcd67..8f5ea5115e 100644 --- a/plugins/modules/vmware_guest.py +++ b/plugins/modules/vmware_guest.py @@ -207,6 +207,9 @@ cpu_reservation: type: int description: The amount of CPU resource that is guaranteed available to the virtual machine. + cpu_affinity_set: + type: list + description: A List of CPU cores that the VM should use. version: type: str description: @@ -1104,8 +1107,10 @@ import time import string +HAS_PYVMOMI = False try: from pyVmomi import vim, vmodl + HAS_PYVMOMI = True except ImportError: pass @@ -1273,6 +1278,7 @@ def configure_resource_alloc_info(self, vm_obj): rai_change_detected = False memory_allocation = vim.ResourceAllocationInfo() cpu_allocation = vim.ResourceAllocationInfo() + cpu_affinity = vim.vm.AffinityInfo() memory_shares_info = vim.SharesInfo() cpu_shares_info = vim.SharesInfo() @@ -1286,6 +1292,13 @@ def configure_resource_alloc_info(self, vm_obj): memory_allocation.shares.level != vm_obj.config.memoryAllocation.shares.level: rai_change_detected = True + cpu_affinity_set = self.params['hardware']['cpu_affinity_set'] + if cpu_affinity_set is not None: + cpu_affinity.affinitySet = cpu_affinity_set + if vm_obj is None or \ + cpu_affinity.affinitySet != self.get_vm_cpu_affinity_set(vm_obj): + rai_change_detected = True + cpu_shares_level = self.params['hardware']['cpu_shares_level'] if cpu_shares_level is not None: cpu_shares_info.level = cpu_shares_level @@ -1343,6 +1356,7 @@ def configure_resource_alloc_info(self, vm_obj): if rai_change_detected: self.configspec.memoryAllocation = memory_allocation self.configspec.cpuAllocation = cpu_allocation + self.configspec.cpuAffinity = cpu_affinity self.change_detected = True def configure_cpu_and_memory(self, vm_obj, vm_creation=False): @@ -1716,6 +1730,11 @@ def get_vm_nvdimm_ctl_device(self, vm=None): def get_vm_nvdimm_devices(self, vm=None): return self.get_device_by_type(vm=vm, type=vim.vm.device.VirtualNVDIMM) + def get_vm_cpu_affinity_set(self, vm_obj): + if vm_obj.config.__dict__.get('cpuAffinity') is None: + return [] + return vm_obj.config.cpuAffinity.affinitySet + def configure_nvdimm(self, vm_obj): """ Manage virtual NVDIMM device to the virtual machine @@ -3516,6 +3535,7 @@ def main(): nested_virt=dict(type='bool'), num_cpu_cores_per_socket=dict(type='int'), num_cpus=dict(type='int'), + cpu_affinity_set=dict(type='list',default=[],elements='int',aliases=['cpu_affinity']), scsi=dict(type='str', choices=['buslogic', 'lsilogic', 'lsilogicsas', 'paravirtual']), secure_boot=dict(type='bool'), version=dict(type='str'), From 83002996ab093fa2fd4c64c7eee0fd8069394ada Mon Sep 17 00:00:00 2001 From: Gustavo Carneiro Date: Fri, 28 Feb 2025 12:00:57 -0300 Subject: [PATCH 2/2] fix: lint --- plugins/modules/vmware_guest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/vmware_guest.py b/plugins/modules/vmware_guest.py index 8f5ea5115e..a78d3ad70c 100644 --- a/plugins/modules/vmware_guest.py +++ b/plugins/modules/vmware_guest.py @@ -3535,7 +3535,7 @@ def main(): nested_virt=dict(type='bool'), num_cpu_cores_per_socket=dict(type='int'), num_cpus=dict(type='int'), - cpu_affinity_set=dict(type='list',default=[],elements='int',aliases=['cpu_affinity']), + cpu_affinity_set=dict(type='list', default=[], elements='int', aliases=['cpu_affinity']), scsi=dict(type='str', choices=['buslogic', 'lsilogic', 'lsilogicsas', 'paravirtual']), secure_boot=dict(type='bool'), version=dict(type='str'),