From be49fe7b39592a773db5933212cfcb8dab6ab2a9 Mon Sep 17 00:00:00 2001 From: Tino Vazquez Date: Wed, 20 Apr 2022 17:36:11 +0200 Subject: [PATCH] F #5725: Adjust vCenter import process rollback if the vnet is not created in over 30 seconds. This is an imported virtual network, so no driver action is needed, and should complete under this timeout. (cherry picked from commit 79f11665c316b5081ae8a7c2065e0b46c66c28b5) --- .../remotes/lib/vcenter_driver/vm_template.rb | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb index fe97748499..2b80f396ea 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vm_template.rb @@ -975,23 +975,14 @@ module VCenterDriver host_id = vi_client.instance_variable_get '@host_id' begin - nsx_client = - NSXDriver::NSXClient - .new_from_id( - host_id - ) + nsx_client = NSXDriver::NSXClient.new_from_id(host_id) rescue StandardError nsx_client = nil end if !nsx_client.nil? - nsx_net = - NSXDriver::VirtualWire - .new_from_name( - nsx_client, - nic[:net_name] - ) - + nsx_net = NSXDriver::VirtualWire + .new_from_name(nsx_client, nic[:net_name]) config[:nsx_id] = nsx_net.ls_id config[:nsx_vni] = nsx_net.ls_vni config[:nsx_tz_id] = nsx_net.tz_id @@ -1002,11 +993,8 @@ module VCenterDriver # so all Standard # PortGroups are networks and no uplinks config[:uplink] = false - config[:sw_name] = - VCenterDriver::Network - .virtual_switch( - nic[:network] - ) + config[:sw_name] = VCenterDriver::Network + .virtual_switch(nic[:network]) # NSX-T PortGroups when VCenterDriver::Network::NETWORK_TYPE_NSXT config[:sw_name] = \ @@ -1027,10 +1015,7 @@ module VCenterDriver if !nsx_client.nil? nsx_net = NSXDriver::OpaqueNetwork - .new_from_name( - nsx_client, - nic[:net_name] - ) + .new_from_name(nsx_client, nic[:net_name]) config[:nsx_id] = nsx_net.ls_id config[:nsx_vni] = nsx_net.ls_vni @@ -1104,6 +1089,31 @@ module VCenterDriver VCenterDriver::VIHelper.clean_ref_hash one_vn.info + # Wait until the virtual network is in ready state + t_start = Time.now + error = false + timeout = 30 + + while Time.now - t_start < timeout + begin + if one_vn.short_state_str == 'rdy' + error = false + break + end + rescue StandardError + error = true + end + + sleep 1 + one_vn.info + end + + if error + error_msg = "VNET #{one_vn.id} in state " + error_msg += "#{one_vn.short_state_str}, aborting import" + raise error_msg + end + one_vn end