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

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

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

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

我在 CentOS 7.9 上使用 python3.6

这是分配网卡的代码

        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>,key = 4000,deviceInfo = (vim.Description) {
         dynamicType = <unset>,label = 'Network adapter 1',summary = '221d cust021-10GNNetwork'
      },backing = (vim.vm.device.VirtualEthernetCard.distributedVirtualPortbackingInfo) {
         dynamicType = <unset>,port = (vim.dvs.PortConnection) {
            dynamicType = <unset>,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>,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>
}

如果有任何其他故障排除所需的信息,请告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?