From 51061fee1f2193a4d9d1734894cf3507ab07f247 Mon Sep 17 00:00:00 2001 From: "Carlos J. Herrera" Date: Thu, 12 Nov 2020 05:07:21 -0500 Subject: [PATCH] F #5019: allow remote oned (#403) --- src/cli/one_helper.rb | 8 +++-- .../models/OpenNebula2FA/SunstoneWebAuthn.rb | 2 +- src/sunstone/routes/vcenter.rb | 32 ++++++++++++------- .../remotes/lib/vcenter_driver/datacenter.rb | 3 +- .../remotes/lib/vcenter_driver/datastore.rb | 7 +++- .../remotes/lib/vcenter_driver/vi_client.rb | 10 +++--- .../remotes/lib/vcenter_driver/vi_helper.rb | 10 +++++- 7 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/cli/one_helper.rb b/src/cli/one_helper.rb index 3df1759476..ff30e6e730 100644 --- a/src/cli/one_helper.rb +++ b/src/cli/one_helper.rb @@ -519,8 +519,12 @@ EOT @translation_hash = nil end - def set_client(options) - @client=OpenNebulaHelper::OneHelper.get_client(options, true) + def set_client(options, client=nil) + if client.nil? + @client=OpenNebulaHelper::OneHelper.get_client(options, true) + else + @client = client + end end def create_resource(options, &block) diff --git a/src/sunstone/models/OpenNebula2FA/SunstoneWebAuthn.rb b/src/sunstone/models/OpenNebula2FA/SunstoneWebAuthn.rb index 7affb25719..c747757ff1 100644 --- a/src/sunstone/models/OpenNebula2FA/SunstoneWebAuthn.rb +++ b/src/sunstone/models/OpenNebula2FA/SunstoneWebAuthn.rb @@ -21,7 +21,7 @@ require 'webauthn' module SunstoneWebAuthn def self.configure(conf) - @client = OpenNebula::Client.new + @client = OpenNebula::Client.new(nil, conf[:one_xmlrpc]) @challenges = Hash.new WebAuthn.configure do |config| if !conf.include?(:webauthn_origin) || conf[:webauthn_origin] == '' diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index 9ea5ffa03b..d0e75f79b5 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -62,7 +62,7 @@ helpers do if vpass.size > MAX_VCENTER_PASSWORD_LENGTH begin - client = OpenNebula::Client.new + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) system = OpenNebula::System.new(client) config = system.get_configuration token = config["ONE_KEY"] @@ -96,16 +96,16 @@ helpers do error code, error.to_json end - def viclient_from_host + def viclient_from_host(client) host_id = params["host"] - VCenterDriver::VIClient.new_from_host(host_id) if host_id + VCenterDriver::VIClient.new_from_host(host_id, client) if host_id end - def new_vcenter_importer(type) + def new_vcenter_importer(type, one_client=nil) host_id = params["host"] - vi_client = VCenterDriver::VIClient.new_from_host(host_id) if host_id - one_client = OpenNebula::Client.new + one_client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) if one_client.nil? + vi_client = VCenterDriver::VIClient.new_from_host(host_id, one_client) if host_id $importer = VCenterDriver::VcImporter.new_child(one_client, vi_client, type) end @@ -115,6 +115,9 @@ get '/vcenter/hosts' do begin dc_folder = VCenterDriver::DatacenterFolder.new(vcenter_client) + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + + VCenterDriver::VIHelper.set_client(nil, client) hpool = VCenterDriver::VIHelper.one_pool(OpenNebula::HostPool, false) if hpool.respond_to?(:message) @@ -137,7 +140,8 @@ end get '/vcenter/datastores' do begin - new_vcenter_importer("datastores") + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + new_vcenter_importer("datastores", client) [200, $importer.retrieve_resources.to_json] rescue Exception => e @@ -161,7 +165,8 @@ end get '/vcenter/templates' do begin - new_vcenter_importer("templates") + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + new_vcenter_importer("templates", client) [200, $importer.retrieve_resources.to_json] rescue Exception => e @@ -185,7 +190,8 @@ end get '/vcenter/networks' do begin - new_vcenter_importer("networks") + 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] rescue Exception => e @@ -209,8 +215,10 @@ end get '/vcenter/images' do begin - new_vcenter_importer("images") + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + new_vcenter_importer("images", client) + VCenterDriver::VIHelper.set_client(nil, client) ds = VCenterDriver::VIHelper.one_item(OpenNebula::Datastore, params["ds"]) opts = { @@ -240,8 +248,8 @@ end post '/vcenter/wild' do begin - client = OpenNebula::Client.new - vi_client = viclient_from_host + client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + vi_client = viclient_from_host(client) importer = VCenterDriver::VmmImporter.new(client, vi_client).tap do |im| im.list(params["host"], params["opts"]) end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb index 21214c8a70..31e66c9df2 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datacenter.rb @@ -557,7 +557,8 @@ class DatacenterFolder networks = {} # Selected host in OpenNebula - one_client = OpenNebula::Client.new() + one_client = OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) + one_host = OpenNebula::Host.new_with_id(args[:host], one_client) rc = one_host.info raise rc.message if OpenNebula.is_error? rc diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb index f53a4e1407..9724953b39 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/datastore.rb @@ -795,7 +795,12 @@ class DsImporter < VCenterDriver::VcImporter add_clusters(id, clusters) - inner.call(one_object, @vi_client.get_host_credentials) + inner.call( + one_object, + @vi_client.get_host_credentials( + @one_client + ) + ) end end diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vi_client.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vi_client.rb index 60269d4962..9b7e53de5f 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vi_client.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vi_client.rb @@ -51,13 +51,13 @@ class VIClient !!@rp end - def get_host_credentials() + def get_host_credentials(one_client) raise "no host id defined!" if @host_id == -1 - host = OpenNebula::Host.new_with_id(@host_id, OpenNebula::Client.new) + host = OpenNebula::Host.new_with_id(@host_id, one_client) rc = host.info if OpenNebula.is_error?(rc) - raise "Could not get host info for ID: #{host_id} - #{rc.message}" + raise "Could not get host info for ID: #{@host_id} - #{rc.message}" end {pass: host["TEMPLATE/VCENTER_PASSWORD"], @@ -121,9 +121,9 @@ class VIClient return entities end - def self.new_from_host(host_id) + def self.new_from_host(host_id, client=nil) begin - client = OpenNebula::Client.new + client = OpenNebula::Client.new if client.nil? host = OpenNebula::Host.new_with_id(host_id, client) rc = host.info(true) if OpenNebula.is_error?(rc) diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb index 9e5863e37d..6ad898c107 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/vi_helper.rb @@ -23,7 +23,15 @@ class VIHelper VM_PREFIX_DEFAULT = "one-$i-" def self.client - @@client ||= OpenNebula::Client.new + @@client ||= OpenNebula::Client.new(nil, $conf[:one_xmlrpc]) # rubocop:disable Style/ClassVars + end + + def self.set_client(options, client=nil) + if client.nil? + @@client=OpenNebulaHelper::OneHelper.get_client(options, true) + else + @@client = client + end end def self.return_if_error(rc, item, exit_if_fail)