PyVmomi使用未连接的dv添加NIC('config.distributedVirtualSwitch'未设置)

时间:2016-02-15 11:24:07

标签: python vmware nic vcenter pyvmomi

我正在使用以下代码将配置了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管理对象(通过mob)之后就会出现这种情况 某些 DistributedVirtualPortgroup 对象引用确实具有该属性( VmwareDistributedVirtualSwitch ),而其他对象具有此属性 {{1 }}

VmwareDistributedVirtualSwitch Set

VmwareDistributedVirtualSwitch Unset

我尝试了多种解决方法,例如:

  • 环境: Unset产生了:

      

    switchUuid=None

  • 环境: TypeError: Required field "switchUuid" not provided (not @optional)产生了:

      

    dswitch_port_connection = None

注意:当我使用TypeError: Required field "port" not provided (not @optional)进行上述配置时,效果非常好。

问题:如何添加像这样的网卡?

2 个答案:

答案 0 :(得分:3)

经过严格的实验,设置:

dswitch_port_connection = '<Unset>'

解决了该问题并导致添加了已配置但未连接的DVS的NIC。

答案 1 :(得分:2)

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

  

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

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