From: Jan Provaznik <[email protected]> dc-core returns 401 if no credentials are passed when doing any openstack request, but conductor can not send credentials when connecting through provider model. For provider connection test (valid_framework? method) can be 401 response code considered as valid. Bug is tracked here: https://issues.apache.org/jira/browse/DTACLOUD-330
The connection test is currently not very usable anyway because for most drivers it just checks if "deltacloud knows about this driver" but not real end-provider connection is tested. This can be improved on Conductor side once the following issue is solved on deltacloud side: https://issues.apache.org/jira/browse/DTACLOUD-307 --- src/app/models/provider.rb | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb index bb6b660..05ff0e4 100644 --- a/src/app/models/provider.rb +++ b/src/app/models/provider.rb @@ -106,12 +106,7 @@ class Provider < ActiveRecord::Base def connect begin - opts = {:username => nil, - :password => nil, - :driver => provider_type.deltacloud_driver } - opts[:provider] = deltacloud_provider if deltacloud_provider - client = DeltaCloud.new(nil, nil, url) - return client.with_config(opts) + connect! rescue Exception => e logger.error("Error connecting to framework: #{e.message}") logger.error("Backtrace: #{e.backtrace.join("\n")}") @@ -119,6 +114,15 @@ class Provider < ActiveRecord::Base end end + def connect! + opts = {:username => nil, + :password => nil, + :driver => provider_type.deltacloud_driver } + opts[:provider] = deltacloud_provider if deltacloud_provider + client = DeltaCloud.new(nil, nil, url) + client.with_config(opts) + end + def pools cloud_accounts.collect {|account| account.pools}.flatten.uniq end @@ -278,7 +282,13 @@ class Provider < ActiveRecord::Base private def valid_framework? - connect.nil? ? false : true + begin + connect!.nil? + rescue Exception => e + logger.error("Error connecting to framework: #{e.message}") + logger.error("Backtrace: #{e.backtrace.join("\n")}") + e.message =~ /401 : Not authorized/ ? true : false + end end def valid_provider? -- 1.7.11.4
