PyVmomi 添加带有未连接 dvs 的 NIC('config.distributedVirtualSwitch' 未设置)

Posted

技术标签:

【中文标题】PyVmomi 添加带有未连接 dvs 的 NIC(\'config.distributedVirtualSwitch\' 未设置)【英文标题】:PyVmomi add NIC with unconnected dvs ('config.distributedVirtualSwitch' is Unset)PyVmomi 添加带有未连接 dvs 的 NIC('config.distributedVirtualSwitch' 未设置) 【发布时间】:2016-05-26 06:55:43 【问题描述】:

我正在使用下面的代码将配置有DistributedVirtualSwitch 的 NIC 添加到现有 VM(通过 pyVmomi):

def __AddNIC(si, vmconf_dict, network_name):
    vm = __get_vm(si, vmconf_dict)
    print " Network label : " + network_name

    devices = []
    nicspec = vim.vm.device.VirtualDeviceSpec()
    nicspec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
    nicspec.device = vim.vm.device.VirtualVmxnet3()
    nicspec.device.wakeOnLanEnabled = True
    nicspec.device.deviceInfo = vim.Description()
    nicspec.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
    nicspec.device.connectable.startConnected = True
    nicspec.device.connectable.allowGuestControl = True

    network_objref = _get_mor_by_property(si, vim.dvs.DistributedVirtualPortgroup, network_name)
    dswitch_port_connection = vim.dvs.PortConnection(
        portgroupKey=network_objref.key,
        switchUuid=network_objref.config.distributedVirtualSwitch.uuid
    )
    nicspec.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
    nicspec.device.backing.port = dswitch_port_connection

    devices.append(nicspec)
    vmconf = vim.vm.ConfigSpec(deviceChange=devices)
    task = vm.ReconfigVM_Task(vmconf)
    tasks.wait_for_tasks(si, [task])

我遇到了以下异常

switchUuid=network_objref.config.distributedVirtualSwitch.uuid AttributeError: 'NoneType' 对象没有属性 'uuid'

在检查 Vcenter Managed Objects(通过 mob)后,似乎 某些 DistributedVirtualPortgroup 对象引用确实具有 (VmwareDistributedVirtualSwitch) 属性,而其他对象引用具有此属性 Unset .

我尝试了多种方法来解决这个问题,例如:

设置: switchUuid=None 产生了:

TypeError: Required field "switchUuid" not provided (not @optional)

设置: dswitch_port_connection = None 产生了:

TypeError: Required field "port" not provided (not @optional)

注意:当我使用VMware WebClient 配置上述内容时,它可以完美运行。

问题:如何才能像这样添加 NIC?

【问题讨论】:

您使用的是什么版本的 vSphere,您使用的是哪个 pyVmomi 版本? @MichaelRice vSphere:5.5.0 Build 1879799,Pyvmomi:5.5.0.2014.1.1 谢谢! 【参考方案1】:

最终经过严格的实验,设置:

dswitch_port_connection = '<Unset>'

解决了这个问题,并导致添加带有已配置但未连接的 DVS 的 NIC。

【讨论】:

【参考方案2】:

检查您的用户权限。您对端口组有 System.Read 权限吗?

定义端口组的分布式虚拟交换机。这 属性应始终设置,除非用户的设置没有 对此属性引用的对象的 System.Read 权限。

https://github.com/vmware/pyvmomi/blob/master/docs/vim/DistributedVirtualSwitch.rst

【讨论】:

以上是关于PyVmomi 添加带有未连接 dvs 的 NIC('config.distributedVirtualSwitch' 未设置)的主要内容,如果未能解决你的问题,请参考以下文章

Target 塔吉特DVS EDI 业务测试指南

PySphere 和 PyVmomi 有啥区别?

无法通过第二个NIC(两个跃点)建立连接

如何知道 SERVER 端的 gRPC 函数处理程序中连接的真实地址(哪个 NIC)?

微软云azure上创建 VM虚拟机后能否向 VM 添加 NIC 网卡

pyvmomi-community-samples (vmware python api)