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:
parent
3a0b25913c
commit
570edd4c26
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user