From 9ddcf16b4b3e5ee4a0ed608aad92df6daf47029a Mon Sep 17 00:00:00 2001 From: Dag Wieers Date: Thu, 5 Jan 2017 18:16:21 +0100 Subject: [PATCH] vmware_guest: add support for more virtual NICs (#19932) This patch adds support for all other virtual NICs, including: - pcnet32 - vmxnet2 - e1000e - sriov Without this change, VMs with one of these NICs will fail with a fault.NicSettingMismatch.summary error as it will only add interfaces, not edit these. This fixes #19860 --- .../modules/cloud/vmware/vmware_guest.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/ansible/modules/cloud/vmware/vmware_guest.py b/lib/ansible/modules/cloud/vmware/vmware_guest.py index 069da79181..2e4772fbc6 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_guest.py +++ b/lib/ansible/modules/cloud/vmware/vmware_guest.py @@ -420,12 +420,20 @@ class PyVmomiDeviceHelper(object): def create_nic(self, device_type, device_label, device_infos): nic = vim.vm.device.VirtualDeviceSpec() - if device_type == 'vmxnet3': + if device_type == 'pcnet32': + nic.device = vim.vm.device.VirtualPCNet32() + if device_type == 'vmxnet2': + nic.device = vim.vm.device.VirtualVmxnet2() + elif device_type == 'vmxnet3': nic.device = vim.vm.device.VirtualVmxnet3() elif device_type == 'e1000': nic.device = vim.vm.device.VirtualE1000() + elif device_type == 'e1000e': + nic.device = vim.vm.device.VirtualE1000e() + elif device_type == 'sriov': + nic.device = vim.vm.device.VirtualSriovEthernetCard() else: - self.module.fail_json(msg="invalid device_type '%s' for network %s" % + self.module.fail_json(msg="Invalid device_type '%s' for network %s" % (device_type, device_infos['network'])) nic.device.wakeOnLanEnabled = True @@ -828,7 +836,12 @@ class PyVmomiHelper(object): device_list = [] for device in vm.config.hardware.device: - if isinstance(device, vim.vm.device.VirtualVmxnet3) or isinstance(device, vim.vm.device.VirtualE1000): + if isinstance(device, vim.vm.device.VirtualPCNet32) or \ + isinstance(device, vim.vm.device.VirtualVmxnet2) or \ + isinstance(device, vim.vm.device.VirtualVmxnet3) or \ + isinstance(device, vim.vm.device.VirtualE1000) or \ + isinstance(device, vim.vm.device.VirtualE1000e) or \ + isinstance(device, vim.vm.device.VirtualSriovEthernetCard): device_list.append(device) return device_list