1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Update vmware_guest_find module (#26066)

Fix updated following:
* Update Documentation
* Update Examples
* Find VM's folder using VM's UUID
* Make name as optional parameter

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde 2017-06-27 21:28:57 +05:30 committed by jctanner
parent 9f7fcf15be
commit 79b2897462
2 changed files with 56 additions and 17 deletions

View file

@ -39,27 +39,37 @@ requirements:
options: options:
name: name:
description: description:
- Name of the VM to work with - Name of the VM to work with.
required: True - This is required if uuid is not supplied.
uuid: uuid:
description: description:
- UUID of the instance to manage if known, this is VMware's uid. - UUID of the instance to manage if known, this is VMware's BIOS UUID.
- This is required if name is not supplied. - This is required if name is not supplied.
datacenter: datacenter:
description: description:
- Destination datacenter for the deploy operation - Destination datacenter for the deploy operation.
required: True required: True
extends_documentation_fragment: vmware.documentation extends_documentation_fragment: vmware.documentation
''' '''
EXAMPLES = ''' EXAMPLES = '''
- name: Gather VM facts - name: Find Guest's Folder using name
vmware_guest_find: vmware_guest_find:
hostname: 192.168.1.209 hostname: 192.168.1.209
username: administrator@vsphere.local username: administrator@vsphere.local
password: vmware password: vmware
validate_certs: no validate_certs: no
name: testvm name: testvm
register: vm_folder
- name: Find Guest's Folder using UUID
vmware_guest_find:
hostname: 192.168.1.209
username: administrator@vsphere.local
password: vmware
validate_certs: no
uuid: 38c4c89c-b3d7-4ae6-ae4e-43c5118eae49
register: vm_folder
''' '''
RETURN = """ RETURN = """
@ -69,9 +79,8 @@ import os
# import module snippets # import module snippets
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.pycompat24 import get_exception from ansible.module_utils._text import to_native
from ansible.module_utils.vmware import connect_to_api, gather_vm_facts from ansible.module_utils.vmware import connect_to_api, gather_vm_facts, get_all_objs
from ansible.module_utils.vmware import get_all_objs
HAS_PYVMOMI = False HAS_PYVMOMI = False
@ -102,7 +111,7 @@ class PyVmomiHelper(object):
self.params = module.params self.params = module.params
self.content = connect_to_api(self.module) self.content = connect_to_api(self.module)
def getvm_folder_paths(self, name=None, uuid=None, folder=None): def getvm_folder_paths(self, name=None, uuid=None):
results = [] results = []
@ -115,8 +124,8 @@ class PyVmomiHelper(object):
vobj = item[0] vobj = item[0]
if not isinstance(vobj.parent, vim.Folder): if not isinstance(vobj.parent, vim.Folder):
continue continue
# Match by name # Match by name or uuid
if vobj.config.name == name: if vobj.config.name == name or vobj.config.uuid == uuid:
folderpath = self.compile_folder_path_for_object(vobj) folderpath = self.compile_folder_path_for_object(vobj)
results.append(folderpath) results.append(folderpath)
@ -254,7 +263,7 @@ def main():
default=os.environ.get('VMWARE_PASSWORD') default=os.environ.get('VMWARE_PASSWORD')
), ),
validate_certs=dict(required=False, type='bool', default=True), validate_certs=dict(required=False, type='bool', default=True),
name=dict(required=True, type='str'), name=dict(required=False, type='str'),
uuid=dict(required=False, type='str'), uuid=dict(required=False, type='str'),
datacenter=dict(required=True, type='str'), datacenter=dict(required=True, type='str'),
), ),
@ -271,11 +280,15 @@ def main():
if folders: if folders:
try: try:
module.exit_json(folders=folders) module.exit_json(folders=folders)
except Exception: except Exception as exc:
e = get_exception() module.fail_json(msg="Folder enumeration failed with exception %s" % to_native(exc))
module.fail_json(msg="Folder enumeration failed with exception %s" % e)
else: else:
module.fail_json(msg="Unable to find folders for VM %(name)s" % module.params) msg = "Unable to find folders for VM "
if module.params['name']:
msg += "%(name)s" % module.params
elif module.params['uuid']:
msg += "%(uuid)s" % module.params
module.fail_json(msg=msg)
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View file

@ -18,7 +18,7 @@
- name: get a list of VMS from vcsim - name: get a list of VMS from vcsim
uri: uri:
url: "{{ 'http://' + vcsim + ':5000/govc_find?filter=_VM' }}" url: "{{ 'http://' + vcsim + ':5000/govc_find?filter=VM' }}"
register: vmlist register: vmlist
- debug: var=vcsim_instance - debug: var=vcsim_instance
@ -54,3 +54,29 @@
- "{{ 'folders' in item }}" - "{{ 'folders' in item }}"
- "{{ item['folders']|length == 1 }}" - "{{ item['folders']|length == 1 }}"
with_items: "{{ folders.results }}" with_items: "{{ folders.results }}"
# Testcase 2: Find VMS using UUID
- name: get details about VMS from vcsim
uri:
url: "{{ 'http://' + vcsim + ':5000/govc_vm_info' }}"
register: vms_detail_list
- name: find folders for each vm using UUID
vmware_guest_find:
validate_certs: False
hostname: "{{ vcsim }}"
username: "{{ vcsim_instance['json']['username'] }}"
password: "{{ vcsim_instance['json']['password'] }}"
uuid: "{{ vms_detail_list['json'][item|basename]['UUID'] }}"
datacenter: "{{ (item|basename).split('_')[0] }}"
with_items: "{{ vmlist['json'] }}"
register: folders_uuid
- debug: var=item
with_items: "{{ folders_uuid.results }}"
- assert:
that:
- "{{ 'folders' in item }}"
- "{{ item['folders']|length == 1 }}"
with_items: "{{ folders_uuid.results }}"