如何使用pyvmomi以编程方式更改E1000e网络接口?

2024-04-25 22:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用脚本将虚拟机恢复到vCenter 7.0U1中进行灾难恢复。脚本将网卡更改为基于以前的端口组密钥指向新的端口组密钥。该脚本适用于VMXNET3和E1000 NIC,但当与E1000e NIC一起使用时,脚本会成功运行,vmware会报告:“指定的参数不正确”

我已经将pyvmomi更新为7.0.2,将pyvim更新为3.0.2,以排除版本问题

我正在CentOS 7.9上使用python3.6

以下是分配NIC的代码:

        for device in custvm.config.hardware.device:
        if isinstance(device, vim.vm.device.VirtualEthernetCard):
            print("old")
            print(device)
            devcount = devcount + 1
            syslog.syslog(syslog.LOG_INFO, guest['vmname']+": VirtualEthernetCard found with MAC: "+str(device.macAddress))
            try:
                dstnetname = snapshotNetworkData[devcount]['dstnetname']
            except:
                syslog.syslog(syslog.LOG_ERR, guest['vmname']+": Failed to load snapshotNetworkData--Defaulting to first targetNetwork")
                if len(snapshotNetworkData) == 0:
                    dstnetname = runbook['Runbook'][0]['Networks'][0]['targetVmxNet']
            syslog.syslog(syslog.LOG_INFO, guest['vmname']+": Determined Destination to be: "+dstnetname)
            dstnetwork = get_obj(vcContentDR, [vim.dvs.DistributedVirtualPortgroup], dstnetname)
            syslog.syslog(syslog.LOG_INFO, guest['vmname']+": pulled object "+str(dstnetwork.key))
            nicspec = vim.vm.device.VirtualDeviceSpec()
            nicspec.operation = vim.vm.device.VirtualDeviceSpec.Operation.edit
            if snapshotNetworkData[devcount]['deviceType'] == "com.vmware.vim25.VirtualE1000e":
                nicspec.device = vim.vm.device.VirtualE1000e()
                nicspec.device.key = device.key
                nicspec.device.controllerKey = device.controllerKey
                nicspec.device.unitNumber = device.unitNumber
                nicspec.device.addressType = 'assigned'
                nicspec.device.deviceInfo = device.deviceInfo
            else:
                nicspec.device = device
            nicspec.device.wakeOnLanEnabled = False
            try:
                nicspec.device.macAddress = snapshotNetworkData[devcount]['macAddress']
            except:
                nicspec.device.macAddress = str(device.macAddress)
            dvs_port_connection.append(vim.dvs.PortConnection())
            dvs_port_connection[devcount].portgroupKey = dstnetwork.key
            dvs_port_connection[devcount].switchUuid = dstnetwork.config.distributedVirtualSwitch.uuid
            nicspec.device.backing = vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo()
            nicspec.device.backing.port = dvs_port_connection[devcount]
            nicspec.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
            nicspec.device.connectable.allowGuestControl = True
            nicspec.device.connectable.startConnected = True
            nicspec.device.deviceInfo.summary = dstnetname
            device_change.append(nicspec)
            print("new")
            print(dstnetname)
            print(nicspec)
            syslog.syslog(syslog.LOG_INFO, str(nicspec))
    config_spec = vim.vm.ConfigSpec(deviceChange=device_change)
    task = custvm.ReconfigVM_Task(config_spec)

以下是“nicspec”变量的输出,显示提交给vCenter的内容:

    (vim.vm.device.VirtualDeviceSpec) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   operation = 'edit',
   fileOperation = <unset>,
   device = (vim.vm.device.VirtualE1000e) {
      dynamicType = <unset>,
      dynamicProperty = (vmodl.DynamicProperty) [],
      key = 4000,
      deviceInfo = (vim.Description) {
         dynamicType = <unset>,
         dynamicProperty = (vmodl.DynamicProperty) [],
         label = 'Network adapter 1',
         summary = '221d cust021-10GNNetwork'
      },
      backing = (vim.vm.device.VirtualEthernetCard.DistributedVirtualPortBackingInfo) {
         dynamicType = <unset>,
         dynamicProperty = (vmodl.DynamicProperty) [],
         port = (vim.dvs.PortConnection) {
            dynamicType = <unset>,
            dynamicProperty = (vmodl.DynamicProperty) [],
            switchUuid = '50 1a fc 33 0b aa 6d 19-38 24 a1 8c 9f 4f 11 1f',
            portgroupKey = 'dvportgroup-10330',
            portKey = <unset>,
            connectionCookie = <unset>
         }
      },
      connectable = (vim.vm.device.VirtualDevice.ConnectInfo) {
         dynamicType = <unset>,
         dynamicProperty = (vmodl.DynamicProperty) [],
         migrateConnect = <unset>,
         startConnected = true,
         allowGuestControl = true,
         connected = false,
         status = <unset>
      },
      slotInfo = <unset>,
      controllerKey = 100,
      unitNumber = 7,
      addressType = 'assigned',
      macAddress = '**:**:**:**:**:**',
      wakeOnLanEnabled = false,
      resourceAllocation = <unset>,
      externalId = <unset>,
      uptCompatibilityEnabled = <unset>
   },
   profile = (vim.vm.ProfileSpec) [],
   backing = <unset>
}

如果需要任何其他信息进行故障排除,请告诉我


Tags: portdevicevmvimsyslogmacaddressunsetdvs