2014-11-07 16:25:12 +03:00
|
|
|
require "sinatra"
|
|
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
module Provider
|
2015-07-02 19:17:25 +03:00
|
|
|
module ProviderFactory
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2015-11-02 11:42:20 +03:00
|
|
|
@@available_providers = []
|
2014-11-07 16:25:12 +03:00
|
|
|
@@providers = {}
|
2015-10-26 17:14:48 +03:00
|
|
|
@@providers_with_accounts_factories = {}
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
def self.providers
|
2015-11-02 11:42:20 +03:00
|
|
|
@@available_providers
|
2014-06-18 15:11:47 +04:00
|
|
|
end
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2015-10-26 17:14:48 +03:00
|
|
|
def self.get provider, account=nil
|
|
|
|
|
p = if account.nil?
|
|
|
|
|
@@providers[provider]
|
|
|
|
|
else
|
|
|
|
|
@@providers_with_accounts_factories[provider].connection(account)
|
|
|
|
|
end
|
2015-10-27 12:01:21 +03:00
|
|
|
# TODO: new exception
|
2014-06-18 15:11:47 +04:00
|
|
|
raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil?
|
|
|
|
|
p
|
|
|
|
|
end
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
def self.all
|
|
|
|
|
@@providers.values
|
|
|
|
|
end
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2015-11-02 11:42:20 +03:00
|
|
|
def self.add_provider provider
|
|
|
|
|
@@available_providers << provider unless @@available_providers.include?(provider)
|
|
|
|
|
end
|
|
|
|
|
|
2014-11-07 16:22:50 +03:00
|
|
|
def self.init conf
|
2015-02-12 13:01:05 +03:00
|
|
|
# require providers here to get access to debug properties
|
2015-07-02 19:17:25 +03:00
|
|
|
require_all
|
2014-11-27 18:45:35 +03:00
|
|
|
|
2015-02-12 13:01:05 +03:00
|
|
|
["ec2", "openstack", "static"].each do |p|
|
|
|
|
|
begin
|
2014-06-18 15:11:47 +04:00
|
|
|
o = Provider.const_get(p.capitalize).new(conf)
|
2015-10-29 13:30:34 +03:00
|
|
|
if o.configured?
|
2014-11-20 15:08:42 +03:00
|
|
|
@@providers[p] = o
|
2015-11-02 11:42:20 +03:00
|
|
|
@@available_providers << p
|
2014-11-20 15:08:42 +03:00
|
|
|
puts "Provider '#{p}' has been loaded"
|
2015-10-29 13:30:34 +03:00
|
|
|
end
|
2015-10-26 17:14:48 +03:00
|
|
|
factory = Provider.const_get(p.capitalize + "AccountsFactory").new
|
|
|
|
|
factory.init(conf)
|
|
|
|
|
@@providers_with_accounts_factories[p] = factory
|
2014-06-18 15:11:47 +04:00
|
|
|
rescue => e
|
2014-11-20 15:08:42 +03:00
|
|
|
puts "Error while loading provider '#{p}': " + e.message
|
2014-06-18 15:11:47 +04:00
|
|
|
next
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|
|
|
|
|
end
|
2015-11-02 17:33:25 +03:00
|
|
|
puts "Available providers: #{@@available_providers}"
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|
2014-06-18 15:11:47 +04:00
|
|
|
|
2015-10-28 17:27:02 +03:00
|
|
|
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
|
|
|
|
|
|
2015-11-02 17:33:25 +03:00
|
|
|
def self.delete_account provider, account
|
|
|
|
|
factory = @@providers_with_accounts_factories[provider]
|
|
|
|
|
factory.delete_connection(account.account_name)
|
|
|
|
|
DevopsLogger.logger.info("Removed #{provider} account '#{account.account_name}'")
|
|
|
|
|
end
|
|
|
|
|
|
2015-07-02 19:17:25 +03:00
|
|
|
def self.require_all
|
|
|
|
|
["ec2", "openstack", "static"].each do |provider|
|
|
|
|
|
begin
|
|
|
|
|
require_relative provider
|
2015-10-26 17:14:48 +03:00
|
|
|
require_relative provider + "_accounts_factory"
|
2015-07-02 19:17:25 +03:00
|
|
|
rescue LoadError => e
|
|
|
|
|
puts "Can not load provider '#{provider}': " + e.message
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2015-11-02 17:33:25 +03:00
|
|
|
def self.get_accounts_factory provider
|
|
|
|
|
@@providers_with_accounts_factories[provider]
|
|
|
|
|
end
|
|
|
|
|
|
2015-10-22 12:39:22 +03:00
|
|
|
def self.get_account_class provider
|
|
|
|
|
case(provider)
|
|
|
|
|
when ::Provider::Static::PROVIDER
|
|
|
|
|
::Devops::Model::StaticProviderAccount
|
|
|
|
|
when ::Provider::Ec2::PROVIDER
|
|
|
|
|
::Devops::Model::Ec2ProviderAccount
|
|
|
|
|
when ::Provider::Openstack::PROVIDER
|
|
|
|
|
::Devops::Model::OpenstackProviderAccount
|
|
|
|
|
else
|
|
|
|
|
nil
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|
|
|
|
|
end
|