PyVmomi如何添加未连接DVS的NIC('config.distributedVirtualSwitch'未设置)

13

我正在使用以下代码向现有虚拟机添加一个已配置为DistributedVirtualSwitch的NIC(通过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' object has no attribute 'uuid'

通过检查Vcenter管理对象 (mob),发现一些DistributedVirtualPortgroup对象引用确实具有 (VmwareDistributedVirtualSwitch) 属性,而另一些则具有此属性的值为 Unset

VmwareDistributedVirtualSwitch Set

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版本? - Michael Rice
@MichaelRice vSphere: 5.5.0 Build 1879799,Pyvmomi: 5.5.0.2014.1.1谢谢! - Vano
2个回答

3

经过大量实验,最终得出设置:

dswitch_port_connection = '<Unset>'

解决了问题,并添加了已配置但未连接的DVS网络接口。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接