如何使用pyvmomi获取vm子文件夹对象以部署虚拟机

时间:2019-10-14 13:29:51

标签: python pyvmomi

下面给出了示例数据中心(“ DC1”)层次结构,在DC1下有两个父文件夹“ Parent1”和“ Parent2”。在它们下面是包含VM的子文件夹。我必须将ovf部署在给定父路径下正确的子文件夹下。例如,我必须将其部署在Parent1的子文件夹2下,而不是Parent2下。

文件夹输入 parent1 / subfolder1 / subfolder2

DC1
|
|----Parent1
|    |---subfolder1
|           |---subfolder2
|
|----Parent2
|    |---subfolder2

当前代码从数据中心文件夹对象的列表中搜索第一个可用的文件夹名称,而无需遵循目录结构。

from pyvim.connect import SmartConnect, Disconnect
import ssl
try:
    #context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
    #context.verify_mode = ssl.CERT_NONE
    context = ssl._create_unverified_context()
    si = SmartConnect(host=args.host,
                      user="root",
                      pwd="****",
                      port=int("443"),
                      sslContext=context)
except:
    raise Exception("Unable to connect")

datacenter = connect.content.rootFolder.childEntity[0]

vmfolder_list = datacenter.vmFolder.childEntity
for vmfolder in vmfolder_list:
    if vmfolder.name == search_folder:
        return vmfolder
raise Exception("Unable to find object by the name of %s in list:\n%s" %
         (search_folder, map(lambda x: x.name, vmfolder_list)))

1 个答案:

答案 0 :(得分:0)

我已经通过使用以下解决方案解决了该问题:

def getFolderObj(parent, search_folder):
    for folder in self.content.viewManager.CreateContainerView(parent, [vim.Folder], True).view:
        if folder.name == search_folder:
            return folder
    return None
vmfolder_obj = datacenter.vmFolder
for search_folder in "Parent1/subfolder1/subfolder2".split(os.path.sep):
    if vmfolder_obj and search_folder:
        vmfolder_obj = getFolderObj(vmfolder_obj, search_folder)
    else:
        break
if vmfolder_obj == None:
    raise Exception("Folder resource not found!")