如何使用Python操作VMware
操作VMware的Python库是pyvmomi,该库允许Python开发者利用vSphere API与vCenter Server, ESXi 和其它 VMware 产品进行交互。以下是使用Python操作VMware的完整攻略。
步骤一:安装pyvmomi包
在终端中执行以下命令:
pip install pyvmomi
步骤二:建立连接
首先,需要建立一个vSphere对象,以便与vCenter Server或ESXi主机进行交互。在连接之前,需要提供以下信息:
- vCenter服务器或ESXi主机的IP地址或主机名
- vSphere Web服务端口(默认为443)
- vCenter Server或ESXi主机的用户名和密码
以下示例代码在Python中建立一个vSphere对象,以连接vCenter Server或ESXi主机:
from pyVmomi import vim
from pyVim.connect import SmartConnectNoSSL, Disconnect
hostname = "vcenter.example.com"
username = "admin"
password = "password"
port = 443
si = SmartConnectNoSSL(host=hostname,
user=username,
pwd=password,
port=port)
# 连接成功
# 关闭vSphere连接
atexit.register(Disconnect, si)
上述代码示例通过指定vCenter服务器或ESXi主机的IP地址或主机名,端口,用户名和密码来连接vSphere Web服务。一旦成功连接,将返回一个ServiceInstance对象(缩写为si)。如果连接失败,则会引发异常。
步骤三:查看vSphere环境中的资源
可使用以下示例代码查看您的vSphere环境中的资源。该代码示例使用刚刚创建的ServiceInstance对象实例,这将提供有关所有可用对象类型的信息。
# 查看vSphere环境中的资源
# 获取当前站点下所有的Datacenter对象
content = si.RetrieveContent()
datacenters = content.rootFolder.childEntity
for datacenter in datacenters:
datacenter_name = datacenter.name
print("Datacenter: {}".format(datacenter_name))
# 获取Datacenter下所有的Cluster Compute Resources
clusters = datacenter.hostFolder.childEntity
for cluster in clusters:
cluster_name = cluster.name
print("\tCompute Resource: {}".format(cluster_name))
# 获取每个Cluster Compute Resource下所有的Virtual Machines
vms = cluster.vm
for vm in vms:
vm_name = vm.summary.config.name
print("\t\tVirtual Machine: {}".format(vm_name))
如果您的vSphere环境中有多个vCenter服务器或ESXi主机,则还可以使用以下代码示例查看:
# 查看vSphere环境中的vCenter Server
dc_view = content.viewManager.CreateContainerView(content.rootFolder, [vim.Datacenter], True)
dc_list = dc_view.view
for dc in dc_list:
cluster_view = content.viewManager.CreateContainerView(dc, [vim.ClusterComputeResource], True)
cluster_list = cluster_view.view
for cluster in cluster_list:
host_view = content.viewManager.CreateContainerView(cluster, [vim.HostSystem], True)
host_list = host_view.view
for host in host_list:
print("vCenter: {}, ESXi Host: {}".format(dc.name, host.name))
步骤四:控制vSphere环境中的VM
使用以下示例代码可以控制vSphere环境中的虚拟机。在这个例子中,我们使用名为my-vm-001的虚拟机。
# 获取名为my-vm-001的Virtual Machine
vm_name = "my-vm-001"
vm = None
for dc in dc_list:
vm_search = dc.FindByUuid(dc=None, uuid=vm_uuid, vmSearch=True, instanceUuid=False)
if vm_search is not None:
vm = vm_search
break
# 获取虚拟机的状态
vm_status = vm.runtime.powerState
if vm_status == vim.VirtualMachine.PowerState.poweredOn:
print("Current status of the VM is: Powered On.")
else:
print("Current status of the VM is: Powered Off.")
# 关闭虚拟机
vm.ShutdownGuest()
在上述示例代码中,我们首先查找名为my-vm-001的虚拟机。然后我们获取虚拟机的状态并执行关闭虚拟机的操作。
以下示例代码演示如何使用vSphere API在vSphere环境中创建虚拟机:
# 拷贝模板并创建新的虚拟机 例子
template_name = "CentOS-7-Template"
datastore = "datastore1"
cluster_name = "MyCluster"
network = "VM Network"
# 查询集群下面的HostSystem
search_index = si.content.searchIndex
host_system = search_index.FindByInventoryPath("/MyDatacenter/host/MyCluster")
# 获取模板
template = search_index.FindByInventoryPath("/MyDatacenter/vm/" + template_name)
# 获取模板的配置信息
config_spec = vim.vm.ConfigSpec()
config_spec.numCPUs = 1
config_spec.memoryMB = 1024
config_spec.cpuHotAddEnabled = True
config_spec.memoryHotAddEnabled = True
# 克隆模板并创建虚拟机
clone_spec = vim.vm.CloneSpec(powerOn=True, template=False, config=config_spec)
task = template.Clone(name="my-new-vm", folder=host_system.parent.obj, spec=clone_spec)
在上述示例代码中,我们使用pyVmomi库的vim.vm.CloneSpec对象从CentOS-7-Template模板创建一个新的虚拟机。我们还选择启动虚拟机并使用配置对象设置了vCPU和内存。
这些只是一些示例,您可以根据自己的需要来使用pyVmomi库编写自己的代码进行vSphere的管理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用python操作vmware - Python技术站