Как получить объект подпапки vm с помощью pyvmomi для развертывания виртуальной машины

Пример структуры иерархии центра обработки данных ("DC1") приведен ниже, в DC1 есть две родительские папки "Parent1" и "Parent2". Под ними есть подпапки, содержащие виртуальные машины. Я должен развернуть ovf в правильной подпапке по заданному родительскому пути. Например, мне нужно развернуть его в подпапке 2 папки Parent1, а не в папке 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)))

person Ibrahim Quraish    schedule 14.10.2019    source источник


Ответы (1)


Я решил это, используя следующее решение:

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!")
person Ibrahim Quraish    schedule 16.10.2019