因此,我试图使用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)
答案 0 :(得分:0)
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
答案 1 :(得分:0)
此代码可能会有所帮助:
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]