Подтвердить что ты не робот

PyVmomi добавляет NIC с несвязанными dvs ('config.distributedVirtualSwitch' Unset)

Я использую приведенный ниже код для добавления сетевого адаптера, настроенного с помощью 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 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, как эта работа?

4b9b3361

Ответ 1

В конце концов после тяжелых экспериментов Setting:

dswitch_port_connection = '<Unset>'

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

Ответ 2

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

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

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