Запустите виртуальную машину из выключенного состояния с помощью pyvmomi

Итак, я пытаюсь создать скрипт Python, используя pyvmomi для управления состоянием виртуальной машины, которую я запускаю на своем сервере ESXi. По сути, я пытался использовать connection.content.searchIndex.FindByIp(ip="the ip of the VM", vmSearch=True), чтобы захватить мою виртуальную машину, а затем включить ее, но, конечно, я не могу получить IP-адрес виртуальной машины, когда она выключена. Итак, мне было интересно, есть ли способ получить виртуальную машину, может быть, по имени или ее идентификатору? Я искал вокруг совсем немного, но не мог найти решение. В любом случае, вот мой код:

from pyVim import connect
# Connect to ESXi host
connection = connect.Connect("192.168.182.130", 443, "root", "password")

# Get a searchIndex object
searcher = connection.content.searchIndex

# Find a VM
vm = searcher.FindByIp(ip="192.168.182.134", vmSearch=True)

# Print out vm name
print (vm.config.name)

# Disconnect from cluster or host
connect.Disconnect(connection)

person techtoolbox    schedule 30.09.2018    source источник


Ответы (2)


В searchindex нет методов для поиска по имени, поэтому вам, вероятно, придется прибегнуть к извлечению всех виртуальных машин и фильтрации через них на стороне клиента.

Вот пример возврата всех виртуальных машин: https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/getallvms.py

Другой вариант, если вы используете vCenter 6.5+, — это vSphere Automation SDK для Python, где вы можете взаимодействовать с REST API для фильтрации на стороне сервера. Дополнительная информация: https://github.com/vmware/vsphere-automation-sdk-python

person Kyle Ruddy    schedule 01.10.2018

Этот код может оказаться полезным:

from pyVim.connect import SmartConnect
from pyVmomi import vim
import ssl

s=ssl.SSLContext(ssl.PROTOCOL_TLSv1)
s.verify_mode=ssl.CERT_NONE
si= SmartConnect(host="192.168.100.10", user="admin", pwd="admin123",sslContext=s)
content=si.content

def get_all_objs(content, vimtype):
        obj = {}
        container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True)
        for managed_object_ref in container.view:
                obj.update({managed_object_ref: managed_object_ref.name})
        return obj

vmToScan = [vm for vm in get_all_objs(content,[vim.VirtualMachine]) if "ubuntu-16.04.4" == vm.name]
person Snehal Biche    schedule 06.01.2019
comment
Добро пожаловать в Stack Overflow. Этот ответ выглядит так, как будто он обещает, но вы забыли объяснить общий эффект или цель кода, который вы разместили. Кроме того, пожалуйста, используйте уценку, доступную вам в редакторе, для форматирования ответов и вопросов на сайте. - person chb; 06.01.2019
comment
извините за неформатированный и некомментированный код :( Я новичок в stackoverflow - person Snehal Biche; 16.01.2019