From c3d10c9953e47393cd29789960514ea244e84052 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 14 Feb 2022 15:33:12 +0530 Subject: [PATCH 1/5] [VMware] Support for removal of NIC on IP disassociation on the VR --- .../vmware/resource/VmwareResource.java | 129 +++++++++++------- 1 file changed, 81 insertions(+), 48 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 80b4ba2eeceb..690a02bcb297 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1101,6 +1101,9 @@ public ExecutionResult prepareCommand(NetworkElementCommand cmd) { @Override public ExecutionResult cleanupCommand(NetworkElementCommand cmd) { + if (cmd instanceof IpAssocCommand && !(cmd instanceof IpAssocVpcCommand)) { + return cleanupNetworkElementCommand((IpAssocCommand)cmd); + } return new ExecutionResult(true, null); } @@ -1326,15 +1329,7 @@ private void plugNicCommandInternal(String vmName, VirtualEthernetCardType nicDe nicTo.getMac(), deviceNumber + 1, true, true); } - VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); - deviceConfigSpec.setDevice(nic); - deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD); - - vmConfigSpec.getDeviceChange().add(deviceConfigSpec); - if (!vmMo.configureVm(vmConfigSpec)) { - throw new Exception("Failed to configure devices when running PlugNicCommand"); - } + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.ADD); } private ReplugNicAnswer execute(ReplugNicCommand cmd) { @@ -1395,16 +1390,7 @@ private ReplugNicAnswer execute(ReplugNicCommand cmd) { VmwareHelper.updateNicDevice(nic, networkInfo.first(), networkInfo.second()); } - VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); - deviceConfigSpec.setDevice(nic); - deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); - - vmConfigSpec.getDeviceChange().add(deviceConfigSpec); - if (!vmMo.configureVm(vmConfigSpec)) { - throw new Exception("Failed to configure devices when running ReplugNicCommand"); - } + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.EDIT); return new ReplugNicAnswer(cmd, true, "success"); } catch (Exception e) { @@ -1445,16 +1431,7 @@ private UnPlugNicAnswer execute(UnPlugNicCommand cmd) { if (nic == null) { return new UnPlugNicAnswer(cmd, true, "success"); } - VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); - deviceConfigSpec.setDevice(nic); - deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.REMOVE); - - vmConfigSpec.getDeviceChange().add(deviceConfigSpec); - if (!vmMo.configureVm(vmConfigSpec)) { - throw new Exception("Failed to configure devices when running unplugNicCommand"); - } + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE); return new UnPlugNicAnswer(cmd, true, "success"); } catch (Exception e) { @@ -1501,17 +1478,7 @@ private void plugPublicNic(VirtualMachineMO vmMo, final String vlanId, final IpA device.setBacking(dataCenterMo.getDvPortBackingInfo(networkInfo)); } - VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - - //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); - deviceConfigSpec.setDevice(device); - deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); - - vmConfigSpec.getDeviceChange().add(deviceConfigSpec); - if (!vmMo.configureVm(vmConfigSpec)) { - throw new Exception("Failed to configure devices when plugPublicNic"); - } + configureNicDevice(vmMo, device, VirtualDeviceConfigSpecOperation.EDIT); } catch (Exception e) { // restore allocation mask in case of exceptions @@ -1579,15 +1546,15 @@ private ExecutionResult prepareNetworkElementCommand(IpAssocCommand cmd) { } String vlanId = BroadcastDomainType.getValue(broadcastUri); - String publicNeworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); - Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNeworkName); + String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); + Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); if (s_logger.isDebugEnabled()) { - s_logger.debug("Find public NIC index, public network name: " + publicNeworkName + ", index: " + publicNicInfo.first()); + s_logger.debug("Find public NIC index, public network name: " + publicNetworkName + ", index: " + publicNicInfo.first()); } boolean addVif = false; - if (ip.isAdd() && publicNicInfo.first().intValue() == -1) { + if (ip.isAdd() && publicNicInfo.first() == -1) { if (s_logger.isDebugEnabled()) { s_logger.debug("Plug new NIC to associate" + controlIp + " to " + ip.getPublicIp()); } @@ -1601,18 +1568,18 @@ private ExecutionResult prepareNetworkElementCommand(IpAssocCommand cmd) { nicDeviceType = VirtualEthernetCardType.valueOf(ip.getDetails().get("nicAdapter")); } plugNicCommandInternal(routerName, nicDeviceType, nicTO, VirtualMachine.Type.DomainRouter); - publicNicInfo = vmMo.getNicDeviceIndex(publicNeworkName); - if (publicNicInfo.first().intValue() >= 0) { + publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); + if (publicNicInfo.first() >= 0) { networkUsage(controlIp, "addVif", "eth" + publicNicInfo.first()); } } - if (publicNicInfo.first().intValue() < 0) { + if (publicNicInfo.first() < 0) { String msg = "Failed to find DomR VIF to associate/disassociate IP with."; s_logger.error(msg); throw new InternalErrorException(msg); } - ip.setNicDevId(publicNicInfo.first().intValue()); + ip.setNicDevId(publicNicInfo.first()); ip.setNewNic(addVif); } } catch (Throwable e) { @@ -1622,6 +1589,72 @@ private ExecutionResult prepareNetworkElementCommand(IpAssocCommand cmd) { return new ExecutionResult(true, null); } + private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { + VmwareContext context = getServiceContext(); + try { + VmwareHypervisorHost hyperHost = getHyperHost(context); + IpAddressTO[] ips = cmd.getIpAddresses(); + String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME); + + VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(routerName); + // command may sometimes be redirect to a wrong host, we relax + // the check and will try to find it within cluster + if (vmMo == null) { + if (hyperHost instanceof HostMO) { + final DatacenterMO dcMo = new DatacenterMO(context, hyperHost.getHyperHostDatacenter()); + vmMo = dcMo.findVm(routerName); + } + } + + if (vmMo == null) { + String msg = String.format("Router %s no longer exists to execute IPAssoc command ", routerName); + s_logger.error(msg); + throw new Exception(msg); + } + + if (ips.length == 1 && !ips[0].isAdd()) { + IpAddressTO ip = ips[0]; + NicTO nicTO = ip.getNicTO(); + URI broadcastUri = BroadcastDomainType.fromString(ip.getBroadcastUri()); + if (BroadcastDomainType.getSchemeValue(broadcastUri) != BroadcastDomainType.Vlan) { + throw new InternalErrorException(String.format("Unable to assign a public IP to a VIF on network %s", ip.getBroadcastUri())); + } + String vlanId = BroadcastDomainType.getValue(broadcastUri); + + String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); + Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); + + if (s_logger.isDebugEnabled()) { + s_logger.debug(String.format("Find public NIC index, public network name: %s , index: %s", publicNetworkName, publicNicInfo.first())); + } + + VirtualDevice nic = findVirtualNicDevice(vmMo, nicTO.getMac()); + + if (nic == null) { + return new ExecutionResult(false, "Couldn't find NIC"); + } + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE); + } + } catch (Throwable e) { + s_logger.error("Unexpected exception: " + e.toString() + " will shortcut rest of IPAssoc commands", e); + return new ExecutionResult(false, e.toString()); + } + return new ExecutionResult(true, null); + } + + private void configureNicDevice(VirtualMachineMO vmMo, VirtualDevice nic, VirtualDeviceConfigSpecOperation operation) throws Exception { + VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); + VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); + deviceConfigSpec.setDevice(nic); + deviceConfigSpec.setOperation(operation); + + + vmConfigSpec.getDeviceChange().add(deviceConfigSpec); + if (!vmMo.configureVm(vmConfigSpec)) { + throw new Exception("Failed to configure devices when running unplugNicCommand"); + } + } + @Override public ExecutionResult executeInVR(String routerIP, String script, String args) { return executeInVR(routerIP, script, args, VRScripts.VR_SCRIPT_EXEC_TIMEOUT); From 39a749955902c7d0a2179424060919cedb82a6b4 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 14 Feb 2022 19:32:11 +0530 Subject: [PATCH 2/5] address comments - extract code + add appropriate operation name in logs --- .../vmware/resource/VmwareResource.java | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 690a02bcb297..e63ea7067eef 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1329,7 +1329,7 @@ private void plugNicCommandInternal(String vmName, VirtualEthernetCardType nicDe nicTo.getMac(), deviceNumber + 1, true, true); } - configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.ADD); + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.ADD, "PlugNicCommand"); } private ReplugNicAnswer execute(ReplugNicCommand cmd) { @@ -1390,7 +1390,7 @@ private ReplugNicAnswer execute(ReplugNicCommand cmd) { VmwareHelper.updateNicDevice(nic, networkInfo.first(), networkInfo.second()); } - configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.EDIT); + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.EDIT, "ReplugNicCommand"); return new ReplugNicAnswer(cmd, true, "success"); } catch (Exception e) { @@ -1431,7 +1431,7 @@ private UnPlugNicAnswer execute(UnPlugNicCommand cmd) { if (nic == null) { return new UnPlugNicAnswer(cmd, true, "success"); } - configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE); + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE, "unplugNicCommand"); return new UnPlugNicAnswer(cmd, true, "success"); } catch (Exception e) { @@ -1478,7 +1478,7 @@ private void plugPublicNic(VirtualMachineMO vmMo, final String vlanId, final IpA device.setBacking(dataCenterMo.getDvPortBackingInfo(networkInfo)); } - configureNicDevice(vmMo, device, VirtualDeviceConfigSpecOperation.EDIT); + configureNicDevice(vmMo, device, VirtualDeviceConfigSpecOperation.EDIT, "plugPublicNic"); } catch (Exception e) { // restore allocation mask in case of exceptions @@ -1598,7 +1598,7 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(routerName); // command may sometimes be redirect to a wrong host, we relax - // the check and will try to find it within cluster + // the check and will try to find it within datacenter if (vmMo == null) { if (hyperHost instanceof HostMO) { final DatacenterMO dcMo = new DatacenterMO(context, hyperHost.getHyperHostDatacenter()); @@ -1613,27 +1613,12 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { } if (ips.length == 1 && !ips[0].isAdd()) { - IpAddressTO ip = ips[0]; - NicTO nicTO = ip.getNicTO(); - URI broadcastUri = BroadcastDomainType.fromString(ip.getBroadcastUri()); - if (BroadcastDomainType.getSchemeValue(broadcastUri) != BroadcastDomainType.Vlan) { - throw new InternalErrorException(String.format("Unable to assign a public IP to a VIF on network %s", ip.getBroadcastUri())); - } - String vlanId = BroadcastDomainType.getValue(broadcastUri); - - String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); - Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); - - if (s_logger.isDebugEnabled()) { - s_logger.debug(String.format("Find public NIC index, public network name: %s , index: %s", publicNetworkName, publicNicInfo.first())); - } - - VirtualDevice nic = findVirtualNicDevice(vmMo, nicTO.getMac()); + VirtualDevice nic = getVirtualDevice(vmMo, ips[0]); if (nic == null) { return new ExecutionResult(false, "Couldn't find NIC"); } - configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE); + configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE, "unplugNicCommand"); } } catch (Throwable e) { s_logger.error("Unexpected exception: " + e.toString() + " will shortcut rest of IPAssoc commands", e); @@ -1642,7 +1627,25 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { return new ExecutionResult(true, null); } - private void configureNicDevice(VirtualMachineMO vmMo, VirtualDevice nic, VirtualDeviceConfigSpecOperation operation) throws Exception { + private VirtualDevice getVirtualDevice(VirtualMachineMO vmMo, IpAddressTO ip) throws Exception { + NicTO nicTO = ip.getNicTO(); + URI broadcastUri = BroadcastDomainType.fromString(ip.getBroadcastUri()); + if (BroadcastDomainType.getSchemeValue(broadcastUri) != BroadcastDomainType.Vlan) { + throw new InternalErrorException(String.format("Unable to assign a public IP to a VIF on network %s", ip.getBroadcastUri())); + } + String vlanId = BroadcastDomainType.getValue(broadcastUri); + + String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); + Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); + + if (s_logger.isDebugEnabled()) { + s_logger.debug(String.format("Find public NIC index, public network name: %s , index: %s", publicNetworkName, publicNicInfo.first())); + } + + return findVirtualNicDevice(vmMo, nicTO.getMac()); + } + + private void configureNicDevice(VirtualMachineMO vmMo, VirtualDevice nic, VirtualDeviceConfigSpecOperation operation, String commandName) throws Exception { VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); deviceConfigSpec.setDevice(nic); @@ -1651,7 +1654,7 @@ private void configureNicDevice(VirtualMachineMO vmMo, VirtualDevice nic, Virtua vmConfigSpec.getDeviceChange().add(deviceConfigSpec); if (!vmMo.configureVm(vmConfigSpec)) { - throw new Exception("Failed to configure devices when running unplugNicCommand"); + throw new Exception(String.format("Failed to configure devices when running %s", commandName)); } } From 593f1b698836749856f38f706b30b23a660d26a3 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Wed, 16 Feb 2022 12:12:01 +0530 Subject: [PATCH 3/5] Do not remove/unplug nic on removal of static nat on last IP (Public NIC) --- .../vmware/resource/VmwareResource.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index e63ea7067eef..db056d329ee2 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1597,7 +1597,7 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME); VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(routerName); - // command may sometimes be redirect to a wrong host, we relax + // command may sometimes be redirected to a wrong host, we relax // the check and will try to find it within datacenter if (vmMo == null) { if (hyperHost instanceof HostMO) { @@ -1611,14 +1611,17 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { s_logger.error(msg); throw new Exception(msg); } - + final String lastIp = cmd.getAccessDetail(NetworkElementCommand.NETWORK_PUB_LAST_IP); if (ips.length == 1 && !ips[0].isAdd()) { - VirtualDevice nic = getVirtualDevice(vmMo, ips[0]); + Pair nicInfo = getVirtualDevice(vmMo, ips[0]); - if (nic == null) { + if (nicInfo.first() == null && lastIp.equalsIgnoreCase("true")) { + if (nicInfo.second() == 2) { + return new ExecutionResult(false, "Unable to remove eth2 in network VR because it is the public NIC of source NAT"); + } return new ExecutionResult(false, "Couldn't find NIC"); } - configureNicDevice(vmMo, nic, VirtualDeviceConfigSpecOperation.REMOVE, "unplugNicCommand"); + configureNicDevice(vmMo, nicInfo.first(), VirtualDeviceConfigSpecOperation.REMOVE, "unplugNicCommand"); } } catch (Throwable e) { s_logger.error("Unexpected exception: " + e.toString() + " will shortcut rest of IPAssoc commands", e); @@ -1627,7 +1630,7 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { return new ExecutionResult(true, null); } - private VirtualDevice getVirtualDevice(VirtualMachineMO vmMo, IpAddressTO ip) throws Exception { + private Pair getVirtualDevice(VirtualMachineMO vmMo, IpAddressTO ip) throws Exception { NicTO nicTO = ip.getNicTO(); URI broadcastUri = BroadcastDomainType.fromString(ip.getBroadcastUri()); if (BroadcastDomainType.getSchemeValue(broadcastUri) != BroadcastDomainType.Vlan) { @@ -1638,11 +1641,16 @@ private VirtualDevice getVirtualDevice(VirtualMachineMO vmMo, IpAddressTO ip) th String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); + if (publicNicInfo.first() == 2) { + s_logger.debug("Do not remove eth2 in network VR because it is the public NIC of source NAT."); + return new Pair<>(null, publicNicInfo.first()); + } + if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Find public NIC index, public network name: %s , index: %s", publicNetworkName, publicNicInfo.first())); } - return findVirtualNicDevice(vmMo, nicTO.getMac()); + return new Pair<>(findVirtualNicDevice(vmMo, nicTO.getMac()), publicNicInfo.first()); } private void configureNicDevice(VirtualMachineMO vmMo, VirtualDevice nic, VirtualDeviceConfigSpecOperation operation, String commandName) throws Exception { From 51a64294f485726a5abfed116cdb7576f7c78fa2 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Wed, 16 Feb 2022 20:01:59 +0530 Subject: [PATCH 4/5] address comments --- .../vmware/resource/VmwareResource.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index db056d329ee2..5059e50abf03 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1612,13 +1612,16 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { throw new Exception(msg); } final String lastIp = cmd.getAccessDetail(NetworkElementCommand.NETWORK_PUB_LAST_IP); - if (ips.length == 1 && !ips[0].isAdd()) { + for (IpAddressTO ip : ips) { + if (ip.isAdd() || lastIp.equalsIgnoreCase("false")) { + continue; + } Pair nicInfo = getVirtualDevice(vmMo, ips[0]); - if (nicInfo.first() == null && lastIp.equalsIgnoreCase("true")) { - if (nicInfo.second() == 2) { - return new ExecutionResult(false, "Unable to remove eth2 in network VR because it is the public NIC of source NAT"); - } + if (nicInfo.second() == 2) { + return new ExecutionResult(true, "Not removing eth2 in network VR because it is the public NIC of source NAT"); + } + if (nicInfo.first() == null) { return new ExecutionResult(false, "Couldn't find NIC"); } configureNicDevice(vmMo, nicInfo.first(), VirtualDeviceConfigSpecOperation.REMOVE, "unplugNicCommand"); @@ -1641,11 +1644,6 @@ private Pair getVirtualDevice(VirtualMachineMO vmMo, IpA String publicNetworkName = HypervisorHostHelper.getPublicNetworkNamePrefix(vlanId); Pair publicNicInfo = vmMo.getNicDeviceIndex(publicNetworkName); - if (publicNicInfo.first() == 2) { - s_logger.debug("Do not remove eth2 in network VR because it is the public NIC of source NAT."); - return new Pair<>(null, publicNicInfo.first()); - } - if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Find public NIC index, public network name: %s , index: %s", publicNetworkName, publicNicInfo.first())); } From 3994ea6fa8f0e7de964f2fb133c1188f489bc736 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Thu, 17 Feb 2022 16:54:13 +0530 Subject: [PATCH 5/5] address comment --- .../com/cloud/hypervisor/vmware/resource/VmwareResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 5059e50abf03..50c7c4dd89b2 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1616,7 +1616,7 @@ private ExecutionResult cleanupNetworkElementCommand(IpAssocCommand cmd) { if (ip.isAdd() || lastIp.equalsIgnoreCase("false")) { continue; } - Pair nicInfo = getVirtualDevice(vmMo, ips[0]); + Pair nicInfo = getVirtualDevice(vmMo, ip); if (nicInfo.second() == 2) { return new ExecutionResult(true, "Not removing eth2 in network VR because it is the public NIC of source NAT");