def getvm_folder_paths(self, name=None, uuid=None): results = [] if not self.folders: self.getfolders() # compare the folder path of each VM against the search path vmList = get_all_objs(self.content, [vim.VirtualMachine]) for item in vmList.items(): vobj = item[0] if not isinstance(vobj.parent, vim.Folder): continue # Match by name or uuid if vobj.config.name == name or vobj.config.uuid == uuid: folderpath = compile_folder_path_for_object(vobj) results.append(folderpath) return results
def getvm_folder_paths(self, name=None, uuid=None): results = [] if not self.folders: self.getfolders() # compare the folder path of each VM against the search path vmList = get_all_objs(self.content, [vim.VirtualMachine]) for item in vmList.items(): vobj = item[0] if not isinstance(vobj.parent, vim.Folder): continue # Match by name or uuid if vobj.config.name == name or vobj.config.uuid == uuid: folderpath = compile_folder_path_for_object(vobj) results.append(folderpath) return results
def fobj_from_folder_path(self, dc, folder): datacenter = find_datacenter_by_name(self.content, dc) if datacenter is None: self.module.fail_json(msg='No datacenter named %s was found' % dc) # Prepend / if it was missing from the folder path, also strip trailing slashes if not folder.startswith('/'): folder = '/%s' % folder folder = folder.rstrip('/') dcpath = compile_folder_path_for_object(datacenter) # Check for full path first in case it was already supplied if folder.startswith(dcpath + dc + '/vm') or folder.startswith(dcpath + '/' + dc + '/vm'): fullpath = folder elif (folder.startswith('/vm/') or folder == '/vm'): fullpath = "%s/%s%s" % (dcpath, dc, folder) elif (folder.startswith('/')): fullpath = "%s/%s/vm%s" % (dcpath, dc, folder) else: fullpath = "%s/%s/vm/%s" % (dcpath, dc, folder) f_obj = self.content.searchIndex.FindByInventoryPath(fullpath) return f_obj
def execute(self): result = dict(changed=False) datacenter = self.find_datacenter_by_name(self.datacenter) if not datacenter: self.module.fail_json( msg="Cannot find the specified Datacenter: %s" % self.datacenter) dcpath = compile_folder_path_for_object(datacenter) if not dcpath.endswith("/"): dcpath += "/" if (self.folder in [None, "", "/"]): self.module.fail_json( msg="Please specify folder path other than blank or '/'") elif (self.folder.startswith("/vm")): fullpath = "%s%s%s" % (dcpath, self.datacenter, self.folder) else: fullpath = "%s%s" % (dcpath, self.folder) folder_obj = self.content.searchIndex.FindByInventoryPath( inventoryPath="%s" % fullpath) if not folder_obj: details = { 'datacenter': datacenter.name, 'datacenter_path': dcpath, 'folder': self.folder, 'full_search_path': fullpath, } self.module.fail_json( msg="No folder %s matched in the search path : %s" % (self.folder, fullpath), details=details) if self.state == "present": if self.get_vm(): self.module.exit_json(**result) if self.esxi_hostname: host_obj = self.find_hostsystem_by_name(self.esxi_hostname) if not host_obj: self.module.fail_json( msg="Cannot find the specified ESXi host: %s" % self.esxi_hostname) else: host_obj = None if self.cluster: cluster_obj = find_cluster_by_name(self.content, self.cluster, datacenter) if not cluster_obj: self.module.fail_json( msg="Cannot find the specified cluster name: %s" % self.cluster) resource_pool_obj = cluster_obj.resourcePool elif self.resource_pool: resource_pool_obj = find_resource_pool_by_name( self.content, self.resource_pool) if not resource_pool_obj: self.module.fail_json( msg="Cannot find the specified resource pool: %s" % self.resource_pool) else: resource_pool_obj = host_obj.parent.resourcePool task = folder_obj.RegisterVM_Task(path=self.path, name=self.name, asTemplate=self.template, pool=resource_pool_obj, host=host_obj) changed = False try: changed, info = wait_for_task(task) except Exception as task_e: self.module.fail_json(msg=to_native(task_e)) result.update(changed=changed) self.module.exit_json(**result) if self.state == "absent": vm_obj = self.get_vm() if vm_obj: try: vm_obj.UnregisterVM() result.update(changed=True) except Exception as exc: self.module.fail_json(msg=to_native(exc)) self.module.exit_json(**result)