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



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

文件夹输入:父文件夹 1/子文件夹1/子文件夹 2

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)))

我已经使用以下解决方案解决了它:

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!")

相关内容