vSphere通 python API接口创建虚拟机及修改配置

背景:跟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)
    # ovf_lib_item_service.filter(library_item_id, deployment_target)

    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={
   
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值