From 6de502458bf85a847512aaa32669092d7d53d1e3 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Thu, 5 Mar 2020 11:52:47 +0530 Subject: [PATCH] vmware_guest_info: Handle list in guest facts Handle list items in vSphere schema while handling facts in vmware_guest_info Fixes: https://github.com/ansible-collections/vmware/issues/33 Signed-off-by: Abhijeet Kasurde --- .../33-vmware_guest_info_list_fix.yml | 2 ++ plugins/module_utils/vmware.py | 8 ++++++- .../targets/vmware_guest_info/tasks/main.yml | 21 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/33-vmware_guest_info_list_fix.yml diff --git a/changelogs/fragments/33-vmware_guest_info_list_fix.yml b/changelogs/fragments/33-vmware_guest_info_list_fix.yml new file mode 100644 index 0000000000..d13b841b1e --- /dev/null +++ b/changelogs/fragments/33-vmware_guest_info_list_fix.yml @@ -0,0 +1,2 @@ +bugfixes: +- Handle list items in vSphere schema while handling facts using to_json API (https://github.com/ansible-collections/vmware/issues/33). diff --git a/plugins/module_utils/vmware.py b/plugins/module_utils/vmware.py index 765e8c18f2..c9a3f11f2d 100644 --- a/plugins/module_utils/vmware.py +++ b/plugins/module_utils/vmware.py @@ -1557,7 +1557,13 @@ def _extract(self, data, remainder): result[remainder] = data[remainder] return result key, remainder = remainder.split('.', 1) - result[key] = self._extract(data[key], remainder) + if isinstance(data, list): + temp_ds = [] + for i in range(len(data)): + temp_ds.append(self._extract(data[i][key], remainder)) + result[key] = temp_ds + else: + result[key] = self._extract(data[key], remainder) return result def _jsonify(self, obj): diff --git a/tests/integration/targets/vmware_guest_info/tasks/main.yml b/tests/integration/targets/vmware_guest_info/tasks/main.yml index cebfed0ad3..4490f0146c 100644 --- a/tests/integration/targets/vmware_guest_info/tasks/main.yml +++ b/tests/integration/targets/vmware_guest_info/tasks/main.yml @@ -99,6 +99,27 @@ - "guest_info_0001['instance']['vimref'] is defined" - "guest_info_0002b['instance']['overallStatus'] is not defined" +# https://github.com/ansible-collections/vmware/issues/33 +- name: Get specific details about VM using the vsphere output schema + vmware_guest_info: + validate_certs: False + hostname: "{{ vcenter_hostname }}" + username: "{{ vcenter_username }}" + password: "{{ vcenter_password }}" + datacenter: "{{ dc1 }}" + uuid: "{{ vm1_uuid }}" + schema: vsphere + properties: + - config.hardware.device.deviceInfo.summary + register: guest_info_with_list + +- debug: + var: guest_info_with_list + +- assert: + that: + - "guest_info_with_list['instance']['config']['hardware']['device'] is defined" + # Testcase 0003: Get details about virtual machines without snapshots using UUID - name: get empty list of snapshots from virtual machine using UUID vmware_guest_info: