52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "sinatra"
 | |
| 
 | |
| module Provider
 | |
|   module ProviderFactory
 | |
| 
 | |
|     @@providers = {}
 | |
| 
 | |
|     def self.providers
 | |
|       @@providers.keys
 | |
|     end
 | |
| 
 | |
|     def self.get provider
 | |
|       p = @@providers[provider]
 | |
|       raise ::Sinatra::NotFound.new("Provider #{provider} not found") if p.nil?
 | |
|       p
 | |
|     end
 | |
| 
 | |
|     def self.all
 | |
|       @@providers.values
 | |
|     end
 | |
| 
 | |
|     def self.init conf
 | |
|       # require providers here to get access to debug properties
 | |
|       require_all
 | |
| 
 | |
|       ["ec2", "openstack", "static"].each do |p|
 | |
|         begin
 | |
|           o = Provider.const_get(p.capitalize).new(conf)
 | |
|           if o.configured?
 | |
|             @@providers[p] = o
 | |
|             puts "Provider '#{p}' has been loaded"
 | |
|           end
 | |
|         rescue => e
 | |
|           puts "Error while loading provider '#{p}': " + e.message
 | |
|           next
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     def self.require_all
 | |
|       ["ec2", "openstack", "static"].each do |provider|
 | |
|         begin
 | |
|           require_relative provider
 | |
|         rescue LoadError => e
 | |
|           puts "Can not load provider '#{provider}': " + e.message
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|   end
 | |
| end
 | 
