diff --git a/src/cli/onevcenter b/src/cli/onevcenter index e021565168..b8b487b049 100755 --- a/src/cli/onevcenter +++ b/src/cli/onevcenter @@ -239,7 +239,7 @@ CommandParser::CmdParser.new(ARGV) do " this input: #{args.first}" end - importer.process_import(indexes) do |object_info| + importer.process_import(indexes, options) do |object_info| helper.cli_dialogue(object_info) end @@ -260,10 +260,8 @@ 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) + importer.process_import(args.first, options) importer.stdout rescue StandardError => e diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index ce58202738..fed8cc4d2d 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -200,8 +200,13 @@ get '/vcenter/networks' do begin client = one_client 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 + } + resources_list = $importer.retrieve_resources(opts).to_json + [200, resources_list] rescue Exception => e logger.error("[vCenter] " + e.message) error = Error.new(e.message) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb index c63c5c8d44..9fcd1cca3e 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/network.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/network.rb @@ -486,6 +486,71 @@ module VCenterDriver @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) + + 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 + + if hpool.respond_to?(:message) + raise 'Could not get OpenNebula HostPool: ' \ + "#{hpool.message}" + end + + opts = {} + + params = {} + params[:vc_network] = vc_cluster_network + params[:vcenter_instance_name] = vcenter_instance_name + params[:vcenter_uuid] = vcenter_uuid + params[:_hpool] = hpool + params[:one_host] = one_host + params[:args] = opts + params[:short] = !opts[:short] + + selected = dc_folder.process_network(params) + + 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)