diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index 6c941f8012a6..beab721f0ef8 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -649,7 +649,8 @@ public static Pair prepareNetwork(String physica bWaitPortGroupReady = false; } else if (BroadcastDomainType.NSX == broadcastDomainType && Objects.nonNull(netName)){ networkName = netName; - bWaitPortGroupReady = false; + // NSX creates the segment outside vCenter, where its backing DV port group may not be immediately visible. + bWaitPortGroupReady = true; } else { boolean dvSwitchSupportNewPolicies = (isFeatureSupportedInVcenterApiVersion(vcApiVersion, MINIMUM_VCENTER_API_VERSION_WITH_DVS_NEW_POLICIES_SUPPORT) && isVersionEqualOrHigher(dvSwitchVersion, MINIMUM_DVS_VERSION_WITH_NEW_POLICIES_SUPPORT)); diff --git a/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java index ae4a05380c14..88c1e87f3d45 100644 --- a/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java +++ b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java @@ -24,6 +24,7 @@ import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @@ -1041,4 +1042,25 @@ public void testPrepareNetwork() throws Exception { null, networkName); assertEquals(morNet.second(), networkName); } + + @Test + public void testPrepareNetworkWaitsForNsxDvPortGroup() throws Exception { + String networkName = "D1-A2-Z2-V8-S4"; + DynamicProperty property = new DynamicProperty(); + property.setVal(networkName); + + when(hostMO.getHyperHostDatacenter()).thenReturn(mor); + when(datacenterMO.getDvSwitchMor(any(String.class))).thenReturn(mor); + when(vmwareClient.getDecendentMoRef(nullable(ManagedObjectReference.class), any(String.class), any(String.class))).thenReturn(mor); + when(vimService.retrieveProperties(any(), anyList())).thenReturn(List.of(), List.of(ocs)); + when(ocs.getPropSet()).thenReturn(List.of(property)); + when(ocs.getObj()).thenReturn(mor); + + Pair morNet = HypervisorHostHelper.prepareNetwork("NSX-VDS", "cloud.guest", hostMO, null, null, + 200, null, 900000, VirtualSwitchType.VMwareDistributedVirtualSwitch, 1, null, + false, Networks.BroadcastDomainType.NSX, null, + null, networkName); + assertEquals(networkName, morNet.second()); + verify(vimService, times(2)).retrieveProperties(any(), anyList()); + } }