1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F #~: improve import network time (#1024)

Signed-off-by: Carlos Herrera <cherrera@opennebula.io>
This commit is contained in:
Carlos J. Herrera 2021-03-24 18:03:36 -04:00 committed by GitHub
parent 3a0b25913c
commit 570edd4c26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 98 additions and 16 deletions

View File

@ -257,10 +257,21 @@ CommandParser::CmdParser.new(ARGV) do
importer = VCenterDriver::VcImporter.new_child(helper.client,
vi_client,
options[:object])
importer.retrieve_resources(helper.parse_opts(options))
indexes = importer.get_indexes(args.first)
importer.process_import(indexes)
if options[:object] == "networks" && !args.first.nil?
indexes = args.first
else
importer.retrieve_resources(helper.parse_opts(options))
indexes = importer.get_indexes(args.first)
end
if indexes.nil?
raise "Could not get any unimported #{options[:object]}"\
" resources info in host: #{options[:host]} with"\
" this input: #{args.first}"
end
importer.process_import(indexes, options)
importer.stdout
rescue StandardError => e

View File

@ -28,6 +28,7 @@ MAX_VCENTER_PASSWORD_LENGTH = 22 #This is the maximum length for a vCenter passw
require 'vcenter_driver'
$importer = nil
$opts = nil
helpers do
def vcenter_client
@ -192,8 +193,12 @@ get '/vcenter/networks' do
begin
client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc])
new_vcenter_importer("networks", client)
opts = {:host => params["host"], :filter => true}
[200, $importer.retrieve_resources(opts).to_json]
$opts = {
:host => params["host"],
:filter => true,
:short => true
}
[200, $importer.retrieve_resources($opts).to_json]
rescue Exception => e
logger.error("[vCenter] " + e.message)
error = Error.new(e.message)
@ -203,8 +208,11 @@ end
post '/vcenter/networks' do
begin
$importer.process_import(params["networks"], params["opts"])
$opts[:short] = false
$importer.process_import(
params["networks"],
$opts
)
[200, $importer.output.to_json]
rescue Exception => e
logger.error("[vCenter] " + e.message)

View File

@ -373,8 +373,6 @@ class DatacenterFolder
# Determine if a network must be excluded from the list
def exclude_network?(vc_network, one_host, args, vc_network_hash)
vc_network_ref = vc_network_hash[:vc_network_ref]
vc_network_name = vc_network_hash[:vc_network_name]
vc_network_host = vc_network_hash[:vc_network_host]
vc_network_tag = vc_network_hash[:vc_network_tag]
@ -406,7 +404,7 @@ class DatacenterFolder
end
return false
end
return false
false
end
# Proccess each network
@ -440,11 +438,10 @@ class DatacenterFolder
# Initialize opts hash used to inject data into one template
opts = {}
if full_process
# Add network type to network hash
network_type = VCenterDriver::Network.get_network_type(vc_network, vc_network_name)
network[vc_network_ref][:network_type] = network_type
end
# Add network type to network hash
network_type = VCenterDriver::Network.get_network_type(vc_network, vc_network_name)
network[vc_network_ref][:network_type] = network_type
network[vc_network_ref][:type] = network_type
# Determine if the network must be excluded
network[vc_network_ref][:excluded] = exclude_network?(vc_network,

View File

@ -382,6 +382,72 @@ class NetImporter < VCenterDriver::VcImporter
@defaults = { size: "255", type: "ether" }
end
def process_import(indexes, opts = {}, &block)
indexes = indexes.gsub(/\s*\,\s*/, ',').strip.split(',')
dc_folder = VCenterDriver::DatacenterFolder.new(@vi_client)
vcenter_instance_name = @vi_client.vc_name
vcenter_uuid = @vi_client.vim.serviceContent.about.instanceUuid
hpool = VCenterDriver::VIHelper.one_pool(
OpenNebula::HostPool,
false
)
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 = vc_cluster_networks_map_ref[index]
if hpool.respond_to?(:message)
raise 'Could not get OpenNebula HostPool: ' \
"#{hpool.message}"
end
opts = {}
selected = dc_folder.process_network(vc_cluster_network, vcenter_instance_name, vcenter_uuid, hpool, one_host, opts)
selected = selected[index]
if block_given?
@info[index][:opts] = block.call(selected)
elsif opts[index]
@info[index][:opts] = opts[index]
else
@info[index][:opts] = defaults
end
# import the object
@info[:success] << import(selected)
rescue StandardError => e
@info[:error] << { index => e.message }
@info[index][:e] = e
apply_rollback
end
end
end
def get_list(args = {})
dc_folder = VCenterDriver::DatacenterFolder.new(@vi_client)
@ -398,7 +464,7 @@ class NetImporter < VCenterDriver::VcImporter
end
rs = dc_folder.get_unimported_networks(npool, @vi_client.vc_name,hpool, args)
@list = rs
@list = rs
end
def add_cluster(cid, eid)