From 04646a7430b8cb8bc9935aa43b91c0a256573c25 Mon Sep 17 00:00:00 2001 From: amartynov Date: Wed, 28 Oct 2015 17:27:02 +0300 Subject: [PATCH] #789: add account in runtime --- devops-service/app/api2/handlers/provider.rb | 1 + devops-service/app/api2/routes/provider.rb | 2 +- devops-service/providers/accounts_factory.rb | 7 +++++ .../providers/ec2_accounts_factory.rb | 29 ++++++++++--------- devops-service/providers/provider_factory.rb | 10 +++++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/devops-service/app/api2/handlers/provider.rb b/devops-service/app/api2/handlers/provider.rb index 7209b58..6b46284 100644 --- a/devops-service/app/api2/handlers/provider.rb +++ b/devops-service/app/api2/handlers/provider.rb @@ -24,6 +24,7 @@ module Devops account = ::Provider::ProviderFactory.get(provider).create_account(parser.account) key = Devops::Db.connector.key account.ssh_key Devops::Db.connector.provider_accounts_insert(account) + ::Provider::ProviderFactory.add_account(provider, account) account end diff --git a/devops-service/app/api2/routes/provider.rb b/devops-service/app/api2/routes/provider.rb index 85dee99..d0e117a 100644 --- a/devops-service/app/api2/routes/provider.rb +++ b/devops-service/app/api2/routes/provider.rb @@ -84,7 +84,7 @@ module Devops app.post_with_headers "/provider/:provider/account", :headers => [:accept, :content_type] do |provider| check_privileges("provider", "w") check_provider(provider) - create_response("Updated", {:account => Devops::API2_0::Handler::Provider.new(request).add_account(provider)}, 201) + create_response("Created", {:account => Devops::API2_0::Handler::Provider.new(request).add_account(provider)}, 201) end # Delete account with name :account_name for :provider diff --git a/devops-service/providers/accounts_factory.rb b/devops-service/providers/accounts_factory.rb index c96568f..c956b14 100644 --- a/devops-service/providers/accounts_factory.rb +++ b/devops-service/providers/accounts_factory.rb @@ -9,6 +9,13 @@ module Provider def connection account_name @connections[account_name] end + + def add_connection name, conn + @connections[name] = conn + end + + def create_connection_from_account config, account + end end end diff --git a/devops-service/providers/ec2_accounts_factory.rb b/devops-service/providers/ec2_accounts_factory.rb index 06b95e3..ca94ece 100644 --- a/devops-service/providers/ec2_accounts_factory.rb +++ b/devops-service/providers/ec2_accounts_factory.rb @@ -5,22 +5,25 @@ module Provider 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}'") + create_connection_from_account(config, account) puts "\tFound ec2 account '#{account.account_name}'" end end + def create_connection_from_account config, 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] + } + add_connection(account.account_name, Ec2.new(options)) + end + end end diff --git a/devops-service/providers/provider_factory.rb b/devops-service/providers/provider_factory.rb index 8fcaa89..cf5e0b8 100644 --- a/devops-service/providers/provider_factory.rb +++ b/devops-service/providers/provider_factory.rb @@ -32,10 +32,10 @@ module Provider ["ec2", "openstack", "static"].each do |p| begin o = Provider.const_get(p.capitalize).new(conf) - if o.configured? + #if o.configured? @@providers[p] = o puts "Provider '#{p}' has been loaded" - end + #end factory = Provider.const_get(p.capitalize + "AccountsFactory").new factory.init(conf) @@providers_with_accounts_factories[p] = factory @@ -46,6 +46,12 @@ module Provider end end + def self.add_account provider, account + factory = @@providers_with_accounts_factories[provider] + factory.create_connection_from_account(DevopsConfig.config, account) + DevopsLogger.logger.info("Added #{provider} account '#{account.account_name}'") + end + def self.require_all ["ec2", "openstack", "static"].each do |provider| begin