#789: providers accounts factories

This commit is contained in:
amartynov 2015-10-26 17:14:48 +03:00
parent e2d49e066f
commit 80b22f8a4d
8 changed files with 57 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,13 +0,0 @@
require_relative "connection_factory"
module Provider
class Ec2ConnectionFactory < ConnectionFactory
def init
end
def connection account_name
@connections
end
end
end

View File

@ -0,0 +1,6 @@
require_relative "accounts_factory"
module Provider
class OpenstackAccountsFactory < AccountsFactory
end
end

View File

@ -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

View File

@ -0,0 +1,6 @@
require_relative "accounts_factory"
module Provider
class StaticAccountsFactory < AccountsFactory
end
end