Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)