2014-11-07 16:25:12 +03:00
|
|
|
require "sinatra"
|
|
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
module Provider
|
|
|
|
|
class ProviderFactory
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-11-07 16:25:12 +03:00
|
|
|
@@providers = {}
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
def self.providers
|
|
|
|
|
@@providers.keys
|
|
|
|
|
end
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
def self.get provider
|
|
|
|
|
p = @@providers[provider]
|
|
|
|
|
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
|
|
|
|
2014-11-07 16:22:50 +03:00
|
|
|
def self.init conf
|
2014-06-18 15:11:47 +04:00
|
|
|
["ec2", "openstack", "static"].each do |p|
|
|
|
|
|
begin
|
|
|
|
|
require "providers/#{p}"
|
2014-11-27 18:45:35 +03:00
|
|
|
|
|
|
|
|
if File.exist?("providers/#{p}_stub.rb")
|
|
|
|
|
require "providers/#{p}_stub"
|
|
|
|
|
end
|
|
|
|
|
|
2014-06-18 15:11:47 +04:00
|
|
|
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
|
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-11-20 15:08:42 +03:00
|
|
|
rescue LoadError => e
|
|
|
|
|
puts "Can not load provider '#{p}': " + e.message
|
2014-06-18 15:11:47 +04:00
|
|
|
next
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-06-18 15:11:47 +04:00
|
|
|
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|
|
|
|
|
end
|