diff --git a/share/hooks/vcenter/create_vcenter_net.rb b/share/hooks/vcenter/create_vcenter_net.rb index 0a29ac3875..7d4d92bded 100755 --- a/share/hooks/vcenter/create_vcenter_net.rb +++ b/share/hooks/vcenter/create_vcenter_net.rb @@ -40,29 +40,32 @@ network_id = ARGV[0] #template = OpenNebula::XMLElement.new #template.initialize_xml(Base64.decode64(base64_temp), 'VNET') +# waits for a vlan_id attribute to be generated +# only if automatic_vlan activated +def wait_vlanid(vnet) + retries = 5 + i = 0 + while vnet["VLAN_ID"].nil? + raise "cannot get vlan_id" if i >= retries + sleep 1 + i +=1 + vnet.info + end +end + template = OpenNebula::VirtualNetwork.new_with_id(network_id, OpenNebula::Client.new) rc = template.info if OpenNebula.is_error?(rc) STDERR.puts rc.message exit 1 end - -if template["VLAN_ID_AUTOMATIC"] == '1' - RETRIES = 5 - i = 0 - while template["VLAN_ID"].nil? - raise "cannot get vlan_id" if i >= RETRIES - sleep 1 - i +=1 - template.info - end -end - esx_rollback = [] #Track hosts that require a rollback +managed = template["TEMPLATE/OPENNEBULA_MANAGED"] != "NO" begin - # Step 0. Only execute for vcenter network driver - if template["VN_MAD"] == "vcenter" + # Step 0. Only execute for vcenter network driver && managed by one + if template["VN_MAD"] == "vcenter" && managed + wait_vlanid(template) if template["VLAN_ID_AUTOMATIC"] == '1' # Step 1. Extract vnet settings host_id = template["TEMPLATE/VCENTER_ONE_HOST_ID"] raise "We require the ID of the OpenNebula host representing a vCenter cluster" if !host_id diff --git a/share/hooks/vcenter/delete_vcenter_net.rb b/share/hooks/vcenter/delete_vcenter_net.rb index 526285e40a..536c537fbf 100755 --- a/share/hooks/vcenter/delete_vcenter_net.rb +++ b/share/hooks/vcenter/delete_vcenter_net.rb @@ -37,10 +37,12 @@ require 'base64' base64_temp = ARGV[1] template = OpenNebula::XMLElement.new template.initialize_xml(Base64.decode64(base64_temp), 'VNET') +managed = template["TEMPLATE/OPENNEBULA_MANAGED"] != "NO" +error = template["TEMPLATE/VCENTER_NET_STATE"] == "ERROR" begin # Step 0. Only execute for vcenter network driver - if template["VN_MAD"] == "vcenter" + if template["VN_MAD"] == "vcenter" && managed && !error # Step 1. Extract vnet settings host_id = template["TEMPLATE/VCENTER_ONE_HOST_ID"] raise "We require the ID of the OpenNebula host representing a vCenter cluster" if !host_id diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb index 976a871413..6000900022 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb @@ -125,14 +125,14 @@ class Network template = "NAME=\"#{network_import_name}\"\n"\ "BRIDGE=\"#{network_name}\"\n"\ - "VN_MAD=\"dummy\"\n"\ + "VN_MAD=\"vcenter\"\n"\ "VCENTER_PORTGROUP_TYPE=\"#{network_type}\"\n"\ "VCENTER_NET_REF=\"#{network_ref}\"\n"\ - "VCENTER_INSTANCE_ID=\"#{vcenter_uuid}\"\n" + "VCENTER_INSTANCE_ID=\"#{vcenter_uuid}\"\n"\ + "OPENNEBULA_MANAGED=\"NO\"\n" if unmanaged == "wild" template += "VCENTER_FROM_WILD=\"#{template_id}\"\n" - template += "OPENNEBULA_MANAGED=\"NO\"\n" end template += "VCENTER_CCR_REF=\"#{ccr_ref}\"\n" if !unmanaged