diff --git a/lib/ansible/modules/cloud/vmware/vmware_guest_find.py b/lib/ansible/modules/cloud/vmware/vmware_guest_find.py index 973aa9f39ec..4e465abf59b 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_guest_find.py +++ b/lib/ansible/modules/cloud/vmware/vmware_guest_find.py @@ -67,6 +67,16 @@ RETURN = """ """ import os +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from ansible.module_utils.vmware import ( + connect_to_api, + gather_vm_facts, + get_all_objs, + compile_folder_path_for_object, + vmware_argument_spec, + find_datacenter_by_name +) HAS_PYVMOMI = False try: @@ -77,11 +87,6 @@ try: except ImportError: pass -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils._text import to_native -from ansible.module_utils.vmware import (connect_to_api, gather_vm_facts, get_all_objs, - compile_folder_path_for_object, vmware_argument_spec) - class PyVmomiHelper(object): def __init__(self, module): @@ -186,37 +191,31 @@ class PyVmomiHelper(object): def getfolders(self): if not self.datacenter: - self.get_datacenter() + self.datacenter = find_datacenter_by_name(self.content, self.params['datacenter']) + + if self.datacenter is None: + self.module.fail_json(msg="Unable to find datacenter %(datacenter)s" % self.params) + self.folders = self._build_folder_tree(self.datacenter.vmFolder) self._build_folder_map(self.folders) - def get_datacenter(self): - self.datacenter = get_obj( - self.content, - [vim.Datacenter], - self.params['datacenter'] - ) - - -def get_obj(content, vimtype, name): - """ - Return an object by name, if name is None the - first found object is returned - """ - obj = None - container = content.viewManager.CreateContainerView( - content.rootFolder, vimtype, True) - for c in container.view: - if name: - if c.name == name: - obj = c - break - else: - obj = c - break - - container.Destroy() - return obj + @staticmethod + def compile_folder_path_for_object(vobj): + """ make a /vm/foo/bar/baz like folder path for an object """ + + paths = [] + if isinstance(vobj, vim.Folder): + paths.append(vobj.name) + + thisobj = vobj + while hasattr(thisobj, 'parent'): + thisobj = thisobj.parent + if isinstance(thisobj, vim.Folder): + paths.append(thisobj.name) + paths.reverse() + if paths[0] == 'Datacenters': + paths.remove('Datacenters') + return '/' + '/'.join(paths) def main():