From: Tomas Sedovic <tomas(a)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