[PATCH conductor 2/4] BZ#773768 Add datacentre validation to provider account saving

tsedovic at redhat.com tsedovic at redhat.com
Tue Feb 28 17:26:45 UTC 2012


From: Tomas Sedovic <tomas at sedovic.cz>

---
 src/app/models/provider_account.rb       |   11 +++++++++--
 src/config/locales/en.yml                |    5 ++++-
 src/spec/models/provider_account_spec.rb |    6 +++++-
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index eff59f9..6548d80 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -66,6 +66,7 @@ class ProviderAccount < ActiveRecord::Base
   validate :validate_presence_of_credentials
   validate :validate_credentials
   validate :validate_unique_username
+  validate :validate_connectivity
   validates :priority, :numericality => { :only_integer => true}, :allow_blank => true
 
   before_create :populate_profiles_and_validate
@@ -95,6 +96,13 @@ class ProviderAccount < ActiveRecord::Base
     end
   end
 
+  def validate_connectivity
+    begin
+      connect if valid_credentials?
+    rescue
+    end
+  end
+
   def validate_unique_username
     cid = CredentialDefinition.find_by_name('username', :conditions => {:provider_type_id => provider.provider_type.id})
     Credential.all(:conditions => {:value => credentials_hash['username'], :credential_definition_id => cid}).each do |c|
@@ -193,8 +201,7 @@ class ProviderAccount < ActiveRecord::Base
     if credentials_hash['username'].blank? || credentials_hash['password'].blank?
       return false
     end
-      opts = {:driver => provider.provider_type.deltacloud_driver }
-      opts[:provider] = provider.deltacloud_provider if provider.deltacloud_provider
+    opts = {:driver => provider.provider_type.deltacloud_driver }
     DeltaCloud::valid_credentials?(credentials_hash['username'].to_s,
                                    credentials_hash['password'].to_s,
                                    provider.url,
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index c6129ad..a443ef2 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1035,7 +1035,10 @@ en:
         not_disabled: "Cannot disabled the provider."
         not_deleted: "Provider was not deleted"
       warning:
-        connect_failed: "Failed to connect to Provider!"
+        connect_failed: "Failed to connect to provider: %{provider}"
+        invalid_x_deltacloud_provider:
+          "Invalid datacenter specified for provider: %{provider}.
+          You should fix this on the provider page."
         not_stopped_instances: "Provider was not disabled, failed to stop following instances:"
         not_terminated_instances: "Provider was not disabled, failed to change status to 'stopped' for following instances:"
     alerts:
diff --git a/src/spec/models/provider_account_spec.rb b/src/spec/models/provider_account_spec.rb
index a8c1074..e155c59 100644
--- a/src/spec/models/provider_account_spec.rb
+++ b/src/spec/models/provider_account_spec.rb
@@ -140,8 +140,12 @@ describe ProviderAccount do
     provider_account1 = FactoryGirl.create :mock_provider_account
     provider_account2 = Factory.build(:mock_provider_account, :provider => Factory.create(:mock_provider2))
     provider_account1.credentials_hash.should == provider_account2.credentials_hash
+    provider_account2.stub!(:connect).and_return(true)
+    puts provider_account2.errors.inspect
+    provider_account2.valid?
+    puts provider_account2.errors.inspect
     provider_account2.should be_valid
-  end
+    end
 
   it "should not fail to create more than one account per provider" do
     provider = FactoryGirl.create :mock_provider
-- 
1.7.6.5




More information about the aeolus-devel mailing list