From 851d0644e14a1e20c309392fcbf50c3c94c75939 Mon Sep 17 00:00:00 2001 From: dianew Date: Wed, 26 Jan 2022 07:50:12 +0000 Subject: [PATCH 1/5] add support disk controller properties Signed-off-by: dianew --- plugins/modules/vmware_vm_config_option.py | 82 +++++++++++-------- .../vmware_vm_config_option/tasks/main.yml | 44 +++++++++- 2 files changed, 92 insertions(+), 34 deletions(-) diff --git a/plugins/modules/vmware_vm_config_option.py b/plugins/modules/vmware_vm_config_option.py index 71828f30e..eaff8391c 100644 --- a/plugins/modules/vmware_vm_config_option.py +++ b/plugins/modules/vmware_vm_config_option.py @@ -165,34 +165,52 @@ def get_config_option_by_spec(self, env_browser, guest_id=None, key=''): return vm_config_option - def get_config_option_recommended(self, guest_os_desc, hwv_version=''): + def get_config_option_recommended(self, guest_os_desc): guest_os_option_dict = {} + support_usb_controller = [] + support_disk_controller = [] + support_ethernet_card = [] if guest_os_desc and len(guest_os_desc) != 0: default_disk_ctl = default_ethernet = default_cdrom_ctl = default_usb_ctl = '' - for name, type in self.ctl_device_type.items(): - if type == guest_os_desc[0].recommendedDiskController: - default_disk_ctl = name - if type == guest_os_desc[0].recommendedEthernetCard: - default_ethernet = name - if type == guest_os_desc[0].recommendedCdromController: - default_cdrom_ctl = name - if type == guest_os_desc[0].recommendedUSBController: - default_usb_ctl = name + for name, dev_type in self.ctl_device_type.items(): + for supported_type in guest_os_desc[0].supportedUSBControllerList: + if supported_type == dev_type: + support_usb_controller = support_usb_controller + [name] + if dev_type == guest_os_desc[0].recommendedUSBController: + default_usb_ctl = name + for supported_type in guest_os_desc[0].supportedEthernetCard: + if supported_type == dev_type: + support_ethernet_card = support_ethernet_card + [name] + if dev_type == guest_os_desc[0].recommendedEthernetCard: + default_ethernet = name + for supported_type in guest_os_desc[0].supportedDiskControllerList: + if supported_type == dev_type: + support_disk_controller = support_disk_controller + [name] + if dev_type == guest_os_desc[0].recommendedDiskController: + default_disk_ctl = name + if dev_type == guest_os_desc[0].recommendedCdromController: + default_cdrom_ctl = name guest_os_option_dict = { - 'Hardware version': hwv_version, - 'Guest ID': guest_os_desc[0].id, - 'Guest fullname': guest_os_desc[0].fullName, - 'Default CPU cores per socket': guest_os_desc[0].numRecommendedCoresPerSocket, - 'Default CPU socket': guest_os_desc[0].numRecommendedPhysicalSockets, - 'Default memory in MB': guest_os_desc[0].recommendedMemMB, - 'Default firmware': guest_os_desc[0].recommendedFirmware, - 'Default secure boot': guest_os_desc[0].defaultSecureBoot, - 'Support secure boot': guest_os_desc[0].supportsSecureBoot, - 'Default disk controller': default_disk_ctl, - 'Default disk size in MB': guest_os_desc[0].recommendedDiskSizeMB, - 'Default network adapter': default_ethernet, - 'Default CDROM controller': default_cdrom_ctl, - 'Default USB controller': default_usb_ctl + 'guest_fullname': guest_os_desc[0].fullName, + 'rec_cpu_cores_per_socket': guest_os_desc[0].numRecommendedCoresPerSocket, + 'rec_cpu_socket': guest_os_desc[0].numRecommendedPhysicalSockets, + 'rec_memory_mb': guest_os_desc[0].recommendedMemMB, + 'default_firmware': guest_os_desc[0].recommendedFirmware, + 'default_secure_boot': guest_os_desc[0].defaultSecureBoot, + 'support_secure_boot': guest_os_desc[0].supportsSecureBoot, + 'default_disk_controller': default_disk_ctl, + 'rec_disk_mb': guest_os_desc[0].recommendedDiskSizeMB, + 'default_ethernet': default_ethernet, + 'default_cdrom_controller': default_cdrom_ctl, + 'default_usb_controller': default_usb_ctl, + 'support_tpm_20': guest_os_desc[0].supportsTPM20, + 'support_persistent_memory': guest_os_desc[0].persistentMemorySupported, + 'rec_persistent_memory': guest_os_desc[0].recommendedPersistentMemoryMB, + 'support_min_persistent_mem_mb': guest_os_desc[0].supportedMinPersistentMemoryMB, + 'rec_vram_kb': guest_os_desc[0].vRAMSizeInKB.defaultValue, + 'support_usb_controller': support_usb_controller, + 'support_disk_controller': support_disk_controller, + 'support_ethernet_card': support_ethernet_card } return guest_os_option_dict @@ -208,7 +226,6 @@ def get_guest_id_list(self, guest_os_desc): def get_config_option_for_guest(self): results = {} guest_id = [] - host = None datacenter_name = self.params.get('datacenter') cluster_name = self.params.get('cluster_name') esxi_host_name = self.params.get('esxi_hostname') @@ -247,8 +264,8 @@ def get_config_option_for_guest(self): # Get supported hardware versions list support_create_list, default_config = self.get_hardware_versions(env_browser=env_browser) if self.params.get('get_hardware_versions'): - results.update({'Supported hardware versions': support_create_list, - 'Default hardware version': default_config}) + results.update({'supported_hardware_versions': support_create_list, + 'default_hardware_version': default_config}) if self.params.get('get_guest_os_ids') or self.params.get('get_config_options'): # Get supported guest ID list @@ -259,8 +276,8 @@ def get_config_option_for_guest(self): vm_config_option_all = self.get_config_option_by_spec(env_browser=env_browser, key=hardware_version) supported_gos_list = self.get_guest_id_list(guest_os_desc=vm_config_option_all) if self.params.get('get_guest_os_ids'): - info_key = 'Supported guest IDs for %s' % vm_config_option_all.version - results.update({info_key: supported_gos_list}) + # info_key = 'Supported guest IDs for %s' % vm_config_option_all.version + results.update({vm_config_option_all.version: supported_gos_list}) if self.params.get('get_config_options') and len(guest_id) != 0: if supported_gos_list and guest_id[0] not in supported_gos_list: @@ -269,9 +286,10 @@ def get_config_option_for_guest(self): vm_config_option_guest = self.get_config_option_by_spec(env_browser=env_browser, guest_id=guest_id, key=hardware_version) guest_os_options = vm_config_option_guest.guestOSDescriptor - guest_os_option_dict = self.get_config_option_recommended(guest_os_desc=guest_os_options, - hwv_version=vm_config_option_guest.version) - results.update({'Recommended config options': guest_os_option_dict}) + guest_os_option_dict = self.get_config_option_recommended(guest_os_desc=guest_os_options) + results.update({'guest_id': guest_id[0]}) + results.update({'hardware_version': vm_config_option_guest.version}) + results.update({'recommended_config_options': guest_os_option_dict}) self.module.exit_json(changed=False, failed=False, instance=results) diff --git a/tests/integration/targets/vmware_vm_config_option/tasks/main.yml b/tests/integration/targets/vmware_vm_config_option/tasks/main.yml index ef0436098..dfd8f6daf 100644 --- a/tests/integration/targets/vmware_vm_config_option/tasks/main.yml +++ b/tests/integration/targets/vmware_vm_config_option/tasks/main.yml @@ -58,6 +58,7 @@ assert: that: - "'instance' in guest_ids_1" + - guest_ids_1.instance | length != 0 when: - "'failed' in guest_ids_1" - not guest_ids_1.failed @@ -74,7 +75,7 @@ datacenter: "{{ dc1 }}" esxi_hostname: "{{ esxi_hosts[0] }}" get_guest_os_ids: true - hardware_version: "{{ config_option_keys_1['instance']['Supported hardware versions'][0] }}" + hardware_version: "{{ config_option_keys_1.instance.supported_hardware_versions[0] }}" register: guest_ids_2 ignore_errors: true @@ -84,12 +85,14 @@ assert: that: - "'instance' in guest_ids_2" + - guest_ids_2.instance | length != 0 when: - "'failed' in guest_ids_2" - not guest_ids_2.failed when: - "'instance' in config_option_keys_1" - - "'Supported hardware versions' in config_option_keys_1['instance']" + - "'supported_hardware_versions' in config_option_keys_1.instance" + - config_option_keys_1.instance.supported_hardware_versions | length != 0 # Ignore errors due to there is known issue on vSphere 7.0.x # https://github.com/vmware/pyvmomi/issues/915 @@ -112,6 +115,43 @@ assert: that: - "'instance' in recommended_configs" + - recommended_configs.instance | length != 0 when: - "'failed' in recommended_configs" - not recommended_configs.failed + + - name: get list of config option keys by connecting to ESXi host + community.vmware.vmware_vm_config_option: + validate_certs: false + hostname: "{{ esxi_hosts[0] }}" + username: "{{ esxi_user }}" + password: "{{ esxi_password }}" + esxi_hostname: "{{ esxi_hosts[0] }}" + get_hardware_versions: true + register: config_option_keys_3 + + - debug: + var: config_option_keys_3 + + - name: get list of supported guest IDs by connecting to ESXi host with config option key + community.vmware.vmware_vm_config_option: + validate_certs: false + hostname: "{{ esxi_hosts[0] }}" + username: "{{ esxi_user }}" + password: "{{ esxi_password }}" + esxi_hostname: "{{ esxi_hosts[0] }}" + get_guest_os_ids: true + hardware_version: "{{ config_option_keys_3.instance.supported_hardware_versions[2] }}" + register: guest_ids_3 + ignore_errors: true + + - debug: + var: guest_ids_3 + - name: check guest ID list returned when task not failed + assert: + that: + - "'instance' in guest_ids_3" + - guest_ids_3.instance | length != 0 + when: + - "'failed' in guest_ids_3" + - not guest_ids_3.failed \ No newline at end of file From e3a1ab21b5c73c5de212489825e402cda5f789b4 Mon Sep 17 00:00:00 2001 From: dianew Date: Wed, 26 Jan 2022 08:29:52 +0000 Subject: [PATCH 2/5] add change log Signed-off-by: dianew --- changelogs/fragments/vmware_vm_config_option.yml | 2 ++ plugins/modules/vmware_vm_config_option.py | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/vmware_vm_config_option.yml diff --git a/changelogs/fragments/vmware_vm_config_option.yml b/changelogs/fragments/vmware_vm_config_option.yml new file mode 100644 index 000000000..88f93e287 --- /dev/null +++ b/changelogs/fragments/vmware_vm_config_option.yml @@ -0,0 +1,2 @@ +minor_changes: + - vmware_vm_config_option - Add support_usb_controller, support_ethernet_card, support_disk_controller properties in output of getting VM default configs (https://github.com/ansible-collections/community.vmware/pull/1202). diff --git a/plugins/modules/vmware_vm_config_option.py b/plugins/modules/vmware_vm_config_option.py index eaff8391c..b260a7bb9 100644 --- a/plugins/modules/vmware_vm_config_option.py +++ b/plugins/modules/vmware_vm_config_option.py @@ -276,7 +276,6 @@ def get_config_option_for_guest(self): vm_config_option_all = self.get_config_option_by_spec(env_browser=env_browser, key=hardware_version) supported_gos_list = self.get_guest_id_list(guest_os_desc=vm_config_option_all) if self.params.get('get_guest_os_ids'): - # info_key = 'Supported guest IDs for %s' % vm_config_option_all.version results.update({vm_config_option_all.version: supported_gos_list}) if self.params.get('get_config_options') and len(guest_id) != 0: From ee9cdbfc89cc2013f15a36ffe8f00491ddb96f31 Mon Sep 17 00:00:00 2001 From: dianew Date: Tue, 15 Mar 2022 08:18:08 +0000 Subject: [PATCH 3/5] change the output names Signed-off-by: dianew --- plugins/modules/vmware_vm_config_option.py | 37 ++++++++++--------- .../vmware_vm_config_option/tasks/main.yml | 7 ++-- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/plugins/modules/vmware_vm_config_option.py b/plugins/modules/vmware_vm_config_option.py index b260a7bb9..355cb2953 100644 --- a/plugins/modules/vmware_vm_config_option.py +++ b/plugins/modules/vmware_vm_config_option.py @@ -191,18 +191,18 @@ def get_config_option_recommended(self, guest_os_desc): if dev_type == guest_os_desc[0].recommendedCdromController: default_cdrom_ctl = name guest_os_option_dict = { - 'guest_fullname': guest_os_desc[0].fullName, - 'rec_cpu_cores_per_socket': guest_os_desc[0].numRecommendedCoresPerSocket, - 'rec_cpu_socket': guest_os_desc[0].numRecommendedPhysicalSockets, - 'rec_memory_mb': guest_os_desc[0].recommendedMemMB, - 'default_firmware': guest_os_desc[0].recommendedFirmware, - 'default_secure_boot': guest_os_desc[0].defaultSecureBoot, - 'support_secure_boot': guest_os_desc[0].supportsSecureBoot, - 'default_disk_controller': default_disk_ctl, - 'rec_disk_mb': guest_os_desc[0].recommendedDiskSizeMB, - 'default_ethernet': default_ethernet, - 'default_cdrom_controller': default_cdrom_ctl, - 'default_usb_controller': default_usb_ctl, + 'Guest fullname': guest_os_desc[0].fullName, + 'Default CPU cores per socket': guest_os_desc[0].numRecommendedCoresPerSocket, + 'Default CPU socket': guest_os_desc[0].numRecommendedPhysicalSockets, + 'Default memory in MB': guest_os_desc[0].recommendedMemMB, + 'Default firmware': guest_os_desc[0].recommendedFirmware, + 'Default secure boot': guest_os_desc[0].defaultSecureBoot, + 'Support secure boot': guest_os_desc[0].supportsSecureBoot, + 'Default disk controller': default_disk_ctl, + 'Default disk size in MB': guest_os_desc[0].recommendedDiskSizeMB, + 'Default network adapter': default_ethernet, + 'Default CDROM controller': default_cdrom_ctl, + 'Default USB controller': default_usb_ctl, 'support_tpm_20': guest_os_desc[0].supportsTPM20, 'support_persistent_memory': guest_os_desc[0].persistentMemorySupported, 'rec_persistent_memory': guest_os_desc[0].recommendedPersistentMemoryMB, @@ -264,8 +264,8 @@ def get_config_option_for_guest(self): # Get supported hardware versions list support_create_list, default_config = self.get_hardware_versions(env_browser=env_browser) if self.params.get('get_hardware_versions'): - results.update({'supported_hardware_versions': support_create_list, - 'default_hardware_version': default_config}) + results.update({'Supported hardware versions': support_create_list, + 'Default hardware version': default_config}) if self.params.get('get_guest_os_ids') or self.params.get('get_config_options'): # Get supported guest ID list @@ -286,9 +286,9 @@ def get_config_option_for_guest(self): key=hardware_version) guest_os_options = vm_config_option_guest.guestOSDescriptor guest_os_option_dict = self.get_config_option_recommended(guest_os_desc=guest_os_options) - results.update({'guest_id': guest_id[0]}) - results.update({'hardware_version': vm_config_option_guest.version}) - results.update({'recommended_config_options': guest_os_option_dict}) + results.update({'Guest ID': guest_id[0]}) + results.update({'Hardware version': vm_config_option_guest.version}) + results.update({'Recommended config options': guest_os_option_dict}) self.module.exit_json(changed=False, failed=False, instance=results) @@ -312,6 +312,9 @@ def main(): ['cluster_name', 'esxi_hostname'], ] ) + module.deprecate(msg="Names of items in results dict will be changed from strings with spaces to strings" + " joined with underlines, e.g., 'Guest fullname' will be changed to 'guest_fullname'.", + version='3.0.0', collection_name="community.vmware") vm_config_option_guest = VmConfigOption(module) vm_config_option_guest.get_config_option_for_guest() diff --git a/tests/integration/targets/vmware_vm_config_option/tasks/main.yml b/tests/integration/targets/vmware_vm_config_option/tasks/main.yml index dfd8f6daf..c649c4a54 100644 --- a/tests/integration/targets/vmware_vm_config_option/tasks/main.yml +++ b/tests/integration/targets/vmware_vm_config_option/tasks/main.yml @@ -75,7 +75,7 @@ datacenter: "{{ dc1 }}" esxi_hostname: "{{ esxi_hosts[0] }}" get_guest_os_ids: true - hardware_version: "{{ config_option_keys_1.instance.supported_hardware_versions[0] }}" + hardware_version: "{{ config_option_keys_1['instance']['Supported hardware versions'][0] }}" register: guest_ids_2 ignore_errors: true @@ -91,8 +91,7 @@ - not guest_ids_2.failed when: - "'instance' in config_option_keys_1" - - "'supported_hardware_versions' in config_option_keys_1.instance" - - config_option_keys_1.instance.supported_hardware_versions | length != 0 + - "'Supported hardware versions' in config_option_keys_1['instance']" # Ignore errors due to there is known issue on vSphere 7.0.x # https://github.com/vmware/pyvmomi/issues/915 @@ -141,7 +140,7 @@ password: "{{ esxi_password }}" esxi_hostname: "{{ esxi_hosts[0] }}" get_guest_os_ids: true - hardware_version: "{{ config_option_keys_3.instance.supported_hardware_versions[2] }}" + hardware_version: "{{ config_option_keys_3['instance']['Supported hardware versions'][2] }}" register: guest_ids_3 ignore_errors: true From db656a39915ec39a0ba13ff7b7308c2f01229405 Mon Sep 17 00:00:00 2001 From: dianew Date: Tue, 15 Mar 2022 08:47:24 +0000 Subject: [PATCH 4/5] change hardware version display Signed-off-by: dianew --- plugins/modules/vmware_vm_config_option.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/modules/vmware_vm_config_option.py b/plugins/modules/vmware_vm_config_option.py index 355cb2953..01eacf4a8 100644 --- a/plugins/modules/vmware_vm_config_option.py +++ b/plugins/modules/vmware_vm_config_option.py @@ -165,7 +165,7 @@ def get_config_option_by_spec(self, env_browser, guest_id=None, key=''): return vm_config_option - def get_config_option_recommended(self, guest_os_desc): + def get_config_option_recommended(self, guest_os_desc, hwv_version=''): guest_os_option_dict = {} support_usb_controller = [] support_disk_controller = [] @@ -191,6 +191,8 @@ def get_config_option_recommended(self, guest_os_desc): if dev_type == guest_os_desc[0].recommendedCdromController: default_cdrom_ctl = name guest_os_option_dict = { + 'Hardware version': hwv_version, + 'Guest ID': guest_os_desc[0].id, 'Guest fullname': guest_os_desc[0].fullName, 'Default CPU cores per socket': guest_os_desc[0].numRecommendedCoresPerSocket, 'Default CPU socket': guest_os_desc[0].numRecommendedPhysicalSockets, @@ -285,9 +287,8 @@ def get_config_option_for_guest(self): vm_config_option_guest = self.get_config_option_by_spec(env_browser=env_browser, guest_id=guest_id, key=hardware_version) guest_os_options = vm_config_option_guest.guestOSDescriptor - guest_os_option_dict = self.get_config_option_recommended(guest_os_desc=guest_os_options) - results.update({'Guest ID': guest_id[0]}) - results.update({'Hardware version': vm_config_option_guest.version}) + guest_os_option_dict = self.get_config_option_recommended(guest_os_desc=guest_os_options, + hwv_version=vm_config_option_guest.version) results.update({'Recommended config options': guest_os_option_dict}) self.module.exit_json(changed=False, failed=False, instance=results) @@ -312,8 +313,8 @@ def main(): ['cluster_name', 'esxi_hostname'], ] ) - module.deprecate(msg="Names of items in results dict will be changed from strings with spaces to strings" - " joined with underlines, e.g., 'Guest fullname' will be changed to 'guest_fullname'.", + module.deprecate(msg="Dict item names in 'instance' result will be changed from strings joined with spaces to" + " strings joined with underlines, e.g., 'Guest fullname' will be changed to 'guest_fullname'.", version='3.0.0', collection_name="community.vmware") vm_config_option_guest = VmConfigOption(module) vm_config_option_guest.get_config_option_for_guest() From c5c84cfe4dc31993b84bed38f7ffe85e46b454b7 Mon Sep 17 00:00:00 2001 From: Diane Wang <41371902+Tomorrow9@users.noreply.github.com> Date: Thu, 17 Mar 2022 07:37:16 +0800 Subject: [PATCH 5/5] Update changelogs/fragments/vmware_vm_config_option.yml Co-authored-by: Mario Lenz --- changelogs/fragments/vmware_vm_config_option.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelogs/fragments/vmware_vm_config_option.yml b/changelogs/fragments/vmware_vm_config_option.yml index 88f93e287..21ad4b0e0 100644 --- a/changelogs/fragments/vmware_vm_config_option.yml +++ b/changelogs/fragments/vmware_vm_config_option.yml @@ -1,2 +1,4 @@ minor_changes: - vmware_vm_config_option - Add support_usb_controller, support_ethernet_card, support_disk_controller properties in output of getting VM default configs (https://github.com/ansible-collections/community.vmware/pull/1202). +deprecated_features: + - vmware_vm_config_option - Dict item names in result will be changed from strings joined with spaces to strings joined with underlines, e.g. `Guest fullname` will be changed to `guest_fullname` in version 3.