使用 pyvmomi 从关机状态启动 VM

Start VM from powered off state using pyvmomi

所以,我正在尝试使用 pyvmomi 创建一个 Python 脚本来控制我在 ESXi 服务器上 运行 的虚拟机的状态。基本上,我尝试使用 connection.content.searchIndex.FindByIp(ip="the ip of the VM", vmSearch=True) 来获取我的 VM 然后打开它,但是当它关​​闭时我当然无法获取 VM 的 IP。所以,我想知道是否可以通过名称或 ID 获取虚拟机?我搜索了很多但找不到真正的解决方案。不管怎样,到目前为止,这是我的代码:

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)

searchindex 没有任何执行 'findbyname' 的方法,因此您可能不得不撤回所有 VM 并通过它们在客户端进行过滤。

这是返回所有 VM 的示例:https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/getallvms.py

另一个选项,如果您使用的是 vCenter 6.5+,则有适用于 Python 的 vSphere Automation SDK,您可以在其中与 REST API 交互以执行服务器端筛选。更多信息:https://github.com/vmware/vsphere-automation-sdk-python

这段代码可能会有所帮助:

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]