[PATCH conductor 2/3] Consider 401 code as valid when checking provider connection

jprovazn at redhat.com jprovazn at redhat.com
Thu Sep 27 15:10:39 UTC 2012


From: Jan Provaznik <jprovazn at redhat.com>

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




More information about the aeolus-devel mailing list