fluke/devops-service/providers/provider_factory.rb

75 lines
1.8 KiB
Ruby
Raw Normal View History

2014-11-07 16:25:12 +03:00
require "sinatra"
module Provider
2015-07-02 19:17:25 +03:00
module ProviderFactory
2014-05-08 15:34:26 +04:00
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
def self.providers
@@providers.keys
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
# TODO: new exception
raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil?
p
end
2014-05-08 15:34:26 +04:00
def self.all
@@providers.values
end
2014-05-08 15:34:26 +04:00
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
o = Provider.const_get(p.capitalize).new(conf)
2014-11-20 15:08:42 +03:00
if o.configured?
@@providers[p] = o
puts "Provider '#{p}' has been loaded"
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
rescue => e
2014-11-20 15:08:42 +03:00
puts "Error while loading provider '#{p}': " + e.message
next
2014-05-08 15:34:26 +04:00
end
end
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-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