diff --git a/devops-service/db/mongo/models/provider_accounts/ec2_provider_account.rb b/devops-service/db/mongo/models/provider_accounts/ec2_provider_account.rb index 219336c..f2633fb 100644 --- a/devops-service/db/mongo/models/provider_accounts/ec2_provider_account.rb +++ b/devops-service/db/mongo/models/provider_accounts/ec2_provider_account.rb @@ -4,18 +4,20 @@ module Devops module Model class Ec2ProviderAccount < ProviderAccount - attr_accessor :access_key_id, :availability_zone + attr_accessor :access_key_id, :availability_zone, :secret_access_key def initialize a={} super(a) self.provider = Provider::Ec2::PROVIDER self.availability_zone = a["availability_zone"] self.access_key_id = a["access_key_id"] + self.secret_access_key = a["secret_access_key"] end def to_list_hash s = super s["availability_zone"] = self.availability_zone + s["access_key_id"] = self.access_key_id s end @@ -23,6 +25,7 @@ module Devops s = super s["availability_zone"] = self.availability_zone s["access_key_id"] = self.access_key_id + s["secret_access_key"] = self.secret_access_key s end diff --git a/devops-service/providers/connection_factory.rb b/devops-service/providers/accounts_factory.rb similarity index 54% rename from devops-service/providers/connection_factory.rb rename to devops-service/providers/accounts_factory.rb index cef4b0f..c96568f 100644 --- a/devops-service/providers/connection_factory.rb +++ b/devops-service/providers/accounts_factory.rb @@ -1,12 +1,13 @@ module Provider - class ConnectionFactory + class AccountsFactory def init config end + # providers instances def connection account_name - @connections[account_name] || @from_config + @connections[account_name] end end end diff --git a/devops-service/providers/ec2.rb b/devops-service/providers/ec2.rb index 1d5ea9c..0a9d222 100644 --- a/devops-service/providers/ec2.rb +++ b/devops-service/providers/ec2.rb @@ -1,7 +1,7 @@ require "exceptions/conflict_exception" require "providers/base_provider" require "db/mongo/models/provider_accounts/ec2_provider_account" -require_relative "ec2_connection_factory" +require_relative "ec2_accounts_factory" module Provider # Provider for Amazon EC2 diff --git a/devops-service/providers/ec2_accounts_factory.rb b/devops-service/providers/ec2_accounts_factory.rb new file mode 100644 index 0000000..06b95e3 --- /dev/null +++ b/devops-service/providers/ec2_accounts_factory.rb @@ -0,0 +1,26 @@ +require_relative "accounts_factory" +module Provider + class Ec2AccountsFactory < AccountsFactory + + def init config + @connections = {} + Devops::Db.connector.provider_accounts(Ec2::PROVIDER).each do |account| + options = { + aws_certificate: account.certificate, + aws_ssh_key: account.ssh_key, + aws_access_key_id: account.access_key_id, + aws_secret_access_key: account.secret_access_key, + aws_availability_zone: account.availability_zone, + + aws_proxy: config[:aws_proxy], + aws_no_proxy: config[:aws_no_proxy], + aws_integration_run_list: config[:aws_integration_run_list] + } + @connections[account.account_name] = Ec2.new(options) + #DevopsLogger.logger.info("Found ec2 account '#{account.account_name}'") + puts "\tFound ec2 account '#{account.account_name}'" + end + end + + end +end diff --git a/devops-service/providers/ec2_connection_factory.rb b/devops-service/providers/ec2_connection_factory.rb deleted file mode 100644 index 120c190..0000000 --- a/devops-service/providers/ec2_connection_factory.rb +++ /dev/null @@ -1,13 +0,0 @@ -require_relative "connection_factory" -module Provider - class Ec2ConnectionFactory < ConnectionFactory - - def init - - end - - def connection account_name - @connections - end - end -end diff --git a/devops-service/providers/openstack_accounts_factory.rb b/devops-service/providers/openstack_accounts_factory.rb new file mode 100644 index 0000000..72bfa0f --- /dev/null +++ b/devops-service/providers/openstack_accounts_factory.rb @@ -0,0 +1,6 @@ +require_relative "accounts_factory" +module Provider + class OpenstackAccountsFactory < AccountsFactory + + end +end diff --git a/devops-service/providers/provider_factory.rb b/devops-service/providers/provider_factory.rb index 1e3453d..d087a13 100644 --- a/devops-service/providers/provider_factory.rb +++ b/devops-service/providers/provider_factory.rb @@ -4,13 +4,18 @@ module Provider module ProviderFactory @@providers = {} + @@providers_with_accounts_factories = {} def self.providers @@providers.keys end - def self.get provider - p = @@providers[provider] + def self.get provider, account=nil + p = if account.nil? + @@providers[provider] + else + @@providers_with_accounts_factories[provider].connection(account) + end raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil? p end @@ -30,6 +35,9 @@ module Provider @@providers[p] = o puts "Provider '#{p}' has been loaded" end + factory = Provider.const_get(p.capitalize + "AccountsFactory").new + factory.init(conf) + @@providers_with_accounts_factories[p] = factory rescue => e puts "Error while loading provider '#{p}': " + e.message next @@ -41,6 +49,7 @@ module Provider ["ec2", "openstack", "static"].each do |provider| begin require_relative provider + require_relative provider + "_accounts_factory" rescue LoadError => e puts "Can not load provider '#{provider}': " + e.message end diff --git a/devops-service/providers/static_accounts_factory.rb b/devops-service/providers/static_accounts_factory.rb new file mode 100644 index 0000000..630921b --- /dev/null +++ b/devops-service/providers/static_accounts_factory.rb @@ -0,0 +1,6 @@ +require_relative "accounts_factory" +module Provider + class StaticAccountsFactory < AccountsFactory + + end +end