Как найти VM в определенной папке, используя pyvmomi

Привет, я новичок в Python, и я изучаю pyvmomi. Здесь я хочу получить vm info.Как у меня есть один центр обработки данных, то есть "DataCenter1". В этом центре обработки данных есть две папки LinuxServer и WindowsServer, в которых эта папка содержит vms. Поэтому я хочу получить имя vm с соответствующими именами папок

    DataCenter1
    |
    |----LinuxServer
    |    |---RHEL-VM
    |    |---Ubuntu-VM
    |
    |----WindowsServer
    |    |---win2k12r2-VM
    |    |---win2k8r2-VM

Мой код:

    from pyvim.connect import SmartConnect, Disconnect
    import ssl

    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
    context.verify_mode = ssl.CERT_NONE
    connect = SmartConnect(host="172.0.0.0",user="root",pwd="****",port=int("443"),sslContext=context)

    datacenter = connect.content.rootFolder.childEntity[0]
    print (datacenter)
    vms = datacenter.vmFolder.childEntity
    for i in vms:
        print(i.name)
        #Here I want to fetch vm name and their respective folder names
    Disconnect(c)

Здесь я могу получить все имена виртуальных машин, но я хочу получить имя папки соответствующего виртуального компьютера. Есть ли способ? Можете ли вы направить меня.

2 ответа

Решение

Здесь вы получите родительское имя того средства vm, т.е. имя вашей папки, если оно существует.

from pyvim.connect import SmartConnect, Disconnect
import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_NONE
connect = SmartConnect(host="172.0.0.0",user="root",pwd="****",port=int("443"),sslContext=context)

datacenter = connect.content.rootFolder.childEntity[0]
print (datacenter)
vms = datacenter.vmFolder.childEntity
for vm in vms:
    print(vm.parent.name)
Disconnect(c)

Я использую python3.6, полный пример ниже. Он реализует логин vsphere и печатает каждое имя виртуальной машины.

#!/usr/bin/env python3.6
# encoding: utf-8

from pyVim import connect
import ssl


def login():
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    ssl_context.verify_mode = ssl.CERT_NONE
    si = connect.SmartConnect(host='192.168.0.1', user='root', pwd='password',
                              sslContext=ssl_context)
    print(si)
    print('\nHello World!\n')
    print('If you got here, you authenticted into vCenter.')
    data_center = si.content.rootFolder.childEntity[0]
    vms = data_center.vmFolder.childEntity
    for vm in vms:
        print(vm.name)


if __name__ == '__main__':
    login()

результат:

'vim.ServiceInstance:ServiceInstance'

Hello World!

If you got here, you authenticted into vCenter.
sclautoesxd12v03
sclautoesxd12v04
sclautoesxd12v07
sclautoesxd12v09
sclautoesxd12v11
sclautoesxd12v12
sclautoesxd12v13
sclautoesxd12v16
sclautoesxd12v17
sclautoesxd12v01
sclautoesxd12v02
sclautoesxd12v05
sclautoesxd12v06
sclautoesxd12v08
sclautoesxd12v10
sclautoesxd12v14
sclautoesxd12v15
Другие вопросы по тегам