commit 3c0f95065ea708f15bcd58883da9fbac26527cac Author: asarfaty Date: Thu Oct 15 08:18:06 2020 +0200 NSX|P: Wait with segment realization until it is fully done Nova boot may fail if the logical switch is not accessible. This patch wait until the segment consolidated state is successful before returning the LS id to nova. Change-Id: Ib055feda79877fe4ebcc5db193f7d9d081724a94 diff --git a/vmware_nsx/plugins/nsx_p/plugin.py b/vmware_nsx/plugins/nsx_p/plugin.py index 87e76b9..40d938a 100644 --- a/vmware_nsx/plugins/nsx_p/plugin.py +++ b/vmware_nsx/plugins/nsx_p/plugin.py @@ -1629,6 +1629,10 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base): try: nsx_id = self.nsxpolicy.segment.get_realized_logical_switch_id( segment_id) + # Make sure the LS is already active before letting nova use it + if utils.is_nsx_version_3_1_0(self._nsx_version): + self.nsxpolicy.segment.wait_until_state_successful( + segment_id, with_refresh=True) # Add result to caches NET_NEUTRON_2_NSX_ID_CACHE[network_id] = nsx_id NET_NSX_2_NEUTRON_ID_CACHE[nsx_id] = network_id diff --git a/vmware_nsx/tests/unit/nsx_p/test_plugin.py b/vmware_nsx/tests/unit/nsx_p/test_plugin.py index 5ae3746..a64823e 100644 --- a/vmware_nsx/tests/unit/nsx_p/test_plugin.py +++ b/vmware_nsx/tests/unit/nsx_p/test_plugin.py @@ -127,6 +127,9 @@ class NsxPPluginTestCaseMixin( return_value=LOGICAL_SWITCH_ID ).start() mock.patch("vmware_nsxlib.v3.policy.core_resources." + "NsxPolicySegmentApi.wait_until_state_successful" + ).start() + mock.patch("vmware_nsxlib.v3.policy.core_resources." "NsxPolicySegmentApi.get_realized_id", return_value=LOGICAL_SWITCH_ID ).start()