背景:跟OA流程打通,自动化创建虚拟机,减少系统工程师重复工作时间,通过vSphere 提供的接口创建虚拟机,笔者通过 vsphere-automation-sdk-python 创建虚拟机,pyvmomi 给VM添加磁盘,打开VM电源,获取虚拟机IP地址
笔者系统环境:windows
python版本:python3.8

完整代码如下:
import urllib3
import requests
import time
import calendar
from com.vmware.vcenter.ovf_client import LibraryItem, DiskProvisioningType, ImportFlag
from com.vmware.vcenter_client import Folder, ResourcePool, Cluster, Network, Datastore
from vmware.vapi.vsphere.client import create_vsphere_client
from com.vmware.content_client import Library, LibraryModel, LocalLibrary, SubscribedLibrary
from com.vmware.content.library_client import Item, ItemModel, StorageBacking, SubscribedItem
from pyVim.connect import SmartConnectNoSSL
from pyVmomi import vim
def create_vm(user, ip, password, network_name, cluster_name,datastore_name, folder_name, content_library_name,
template_name, vm_name, annotation):
""" 通过 vsphere-automation-sdk-python 从模板库复制虚拟机 """
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
client = create_vsphere_client(server=ip, username=user, password=password, session=session)
stub_config = client._stub_config
library_item = LibraryItem(stub_config)
network_id = client.vcenter.Network.list(
Network.FilterSpec(names={
network_name},
types={
Network.Type.DISTRIBUTED_PORTGROUP}))[0].network
cluster_id = client.vcenter.Cluster.list(Cluster.FilterSpec(names={
cluster_name}))[0].cluster
resource_pool_id = client.vcenter.ResourcePool.list(ResourcePool.FilterSpec(clusters={
cluster_id}))[
0].resource_pool
datastore_id = client.vcenter.Datastore.list(Datastore.FilterSpec(names={
datastore_name}))[0].datastore
library_service = Library(stub_config)
library_id = library_service.find(Library.FindSpec(name=content_library_name))[0]
library_item_service = Item(stub_config)
library_item_id = library_item_service.find(Item.FindSpec(name=template_name, library_id=library_id))[0]
ovf_lib_item_service = LibraryItem(stub_config)
folder_id = client.vcenter.Folder.list(Folder.FilterSpec(names={
folder_name}))[0].folder
deployment_target = library_item.DeploymentTarget(resource_pool_id=resource_pool_id, folder_id=folder_id)
storage_group_mapping = ovf_lib_item_service.StorageGroupMapping(
type=ovf_lib_item_service.StorageGroupMapping.Type('DATASTORE'),
datastore_id=datastore_id,
provisioning=DiskProvisioningType('thin')
)
deployment_spec = library_item.ResourcePoolDeploymentSpec(
name=vm_name,
annotation=annotation,
accept_all_eula=True,
network_mappings={