From f2c45ac4fbc2272ce66083e0413dc5759ebc64c5 Mon Sep 17 00:00:00 2001 From: "Carlos J. Herrera" Date: Mon, 22 Mar 2021 05:57:47 -0400 Subject: [PATCH] F #~: compatible vCenter70 networks fast import (#1003) Signed-off-by: Carlos Herrera --- src/sunstone/routes/vcenter.rb | 10 ++++++- .../remotes/lib/vcenter_driver/datacenter.rb | 1 + .../remotes/lib/vcenter_driver/network.rb | 26 ++++++++++++------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index fed8cc4d2d..72484eabba 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -28,6 +28,7 @@ MAX_VCENTER_PASSWORD_LENGTH = 22 #This is the maximum length for a vCenter passw require 'vcenter_driver' $importer = nil +$host_id = nil helpers do def one_client(client=nil, conf={}) @@ -199,6 +200,7 @@ end get '/vcenter/networks' do begin client = one_client + $host_id = params["host"] new_vcenter_importer("networks", client) opts = { :host => params["host"], @@ -216,7 +218,13 @@ end post '/vcenter/networks' do begin - $importer.process_import(params["networks"], params["opts"]) + opts = params["opts"] + opts[:host] = $host_id + + $importer.process_import( + params["networks"], + opts + ) [200, $importer.output.to_json] rescue Exception => e diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb index 467d43fd35..efeaacba93 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb @@ -584,6 +584,7 @@ module VCenterDriver vc_network_name ) network[vc_network_ref][:network_type] = network_type + network[vc_network_ref][:type] = network_type # end # Determine if the network must be excluded diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb index 9fcd1cca3e..1296975d4c 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb @@ -500,17 +500,26 @@ module VCenterDriver one_client = OpenNebula::Client.new one_host = OpenNebula::Host.new_with_id(opts[:host], one_client) + rc = one_host.info + raise rc.message if OpenNebula.is_error? rc + + # Get all networks in vcenter cluster (one_host) + vc_cluster_networks = dc_folder.cluster_networks(one_host) + + vc_cluster_networks_map_ref = {} + + # Iterate over vcenter networks + vc_cluster_networks.each do |vc_cluster_network| + vc_cluster_networks_map_ref[vc_cluster_network._ref] = + vc_cluster_network + end + indexes.each do |index| begin @rollback = [] @info[index] = {} - vc_cluster_network = VCenterDriver::Network.new_from_ref( - index, - @vi_client - ) - - vc_cluster_network = vc_cluster_network.item + vc_cluster_network = vc_cluster_networks_map_ref[index] if hpool.respond_to?(:message) raise 'Could not get OpenNebula HostPool: ' \ @@ -526,7 +535,6 @@ module VCenterDriver params[:_hpool] = hpool params[:one_host] = one_host params[:args] = opts - params[:short] = !opts[:short] selected = dc_folder.process_network(params) @@ -561,8 +569,8 @@ module VCenterDriver false ) if npool.respond_to?(:message) - raise "Could not get \ - OpenNebula VirtualNetworkPool: #{npool.message}" + raise 'Could not get ' \ + "OpenNebula VirtualNetworkPool: #{npool.message}" end # Get OpenNebula's host pool