diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java index 93545f3adcf5..c7fde1414101 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapper.java @@ -119,7 +119,7 @@ private Pair getIpAddresses(String output, String macAddress) { continue; } String device = parts[0]; - String mac = parts[1]; + String mac = parts[parts.length - 3]; if (found) { if (!device.equals("-") || !mac.equals("-")) { break; @@ -128,8 +128,8 @@ private Pair getIpAddresses(String output, String macAddress) { continue; } found = true; - String ipFamily = parts[2]; - String ipPart = parts[3].split("/")[0]; + String ipFamily = parts[parts.length - 2]; + String ipPart = parts[parts.length - 1].split("/")[0]; if (ipFamily.equals("ipv4")) { ipv4 = ipPart; } else if (ipFamily.equals("ipv6")) { diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapperTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapperTest.java index 511306854cf2..f104eadd18be 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapperTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmIpAddressCommandWrapperTest.java @@ -52,6 +52,12 @@ public class LibvirtGetVmIpAddressCommandWrapperTest { " net4 2e:9b:60:dc:49:30 N/A N/A\n" + // " lxc5b7327203b6f 92:b2:77:0b:a9:20 N/A N/A\n"; + private static String VIRSH_DOMIF_OUTPUT_WINDOWS = " Name MAC address Protocol Address\n" + // + "-------------------------------------------------------------------------------\n" + // + " Ethernet Instance 0 02:0c:02:f9:00:80 ipv4 192.168.0.10/24\n" + // + " Loopback Pseudo-Interface 1 ipv6 ::1/128\n" + // + " - - ipv4 127.0.0.1/8\n"; + @Before public void setUp() { MockitoAnnotations.openMocks(this); @@ -118,7 +124,34 @@ public void testExecuteWithWindowsVm() { when(getVmIpAddressCommand.getVmNetworkCidr()).thenReturn("192.168.0.0/24"); when(getVmIpAddressCommand.getMacAddress()).thenReturn("02:0c:02:f9:00:80"); when(getVmIpAddressCommand.isWindows()).thenReturn(true); - when(Script.executePipedCommands(anyList(), anyLong())).thenReturn(new Pair<>(0, "192.168.0.10")); + when(Script.executePipedCommands(anyList(), anyLong())).thenReturn(new Pair<>(0, VIRSH_DOMIF_OUTPUT_WINDOWS)); + + Answer answer = commandWrapper.execute(getVmIpAddressCommand, libvirtComputingResource); + + assertTrue(answer.getResult()); + assertEquals("192.168.0.10", answer.getDetails()); + } finally { + if (scriptMock != null) + scriptMock.close(); + } + } + + + @Test + public void testExecuteWithWindowsVm2() { + LibvirtComputingResource libvirtComputingResource = mock(LibvirtComputingResource.class); + GetVmIpAddressCommand getVmIpAddressCommand = mock(GetVmIpAddressCommand.class); + LibvirtGetVmIpAddressCommandWrapper commandWrapper = new LibvirtGetVmIpAddressCommandWrapper(); + MockedStatic