PyVmomi добавляет сетевую карту с неподключенными DV ('config.distributedVirtualSwitch' не установлен)

Я использую приведенный ниже код, чтобы добавить сетевую карту, настроенную с помощью DistributedVirtualSwitch, к существующей виртуальной машине (через 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), а другие имеют это свойство Unset.

VmwareDistributedVirtualSwitch Set

VmwareDistributedVirtualSwitch отключен

Я пробовал несколько способов обойти это, например:

  • Настройка: switchUuid=None что дало:

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

  • Настройка: dswitch_port_connection = None что дало:

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

Примечание. Когда я использую VMware WebClient для настройки вышеперечисленного, все работает отлично.

Вопрос: как сделать так, чтобы добавление сетевого адаптера работало?


person Vano    schedule 15.02.2016    source источник
comment
Какую версию vSphere вы используете и какую версию pyVmomi вы используете?   -  person Michael Rice    schedule 16.02.2016
comment
@MichaelRice vSphere: 5.5.0 Build 1879799, Pyvmomi: 5.5.0.2014.1.1 Спасибо!   -  person Vano    schedule 16.02.2016


Ответы (2)


В конце концов, после серьезных экспериментов, Настройка:

dswitch_port_connection = '<Unset>'

Проблема решена, в результате чего добавилась сетевая карта с настроенным, но не подключенным DVS.

person Vano    schedule 02.03.2016

Проверьте права пользователя. У вас есть привилегии System.Read для группы портов?

Распределенный виртуальный коммутатор, на котором определена группа портов. Это свойство всегда должно быть установлено, за исключением случаев, когда пользовательский параметр не имеет привилегии System.Read для объекта, на который ссылается это свойство.

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

person Luke Exton    schedule 27.02.2016