| 
									
										
										
										
											2014-06-18 15:11:47 +04:00
										 |  |  | module Provider | 
					
						
							|  |  |  |   class ProviderFactory | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 15:11:47 +04:00
										 |  |  |     @@providers = nil | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |       if @@providers.nil? | 
					
						
							|  |  |  |         ProviderFactory.init | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-06-18 15:11:47 +04:00
										 |  |  |       @@providers.values | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 15:11:47 +04:00
										 |  |  |     def self.init | 
					
						
							|  |  |  |       conf = DevopsService.config | 
					
						
							|  |  |  |       @@providers = {} | 
					
						
							|  |  |  |       ["ec2", "openstack", "static"].each do |p| | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |           require "providers/#{p}" | 
					
						
							|  |  |  |           o = Provider.const_get(p.capitalize).new(conf) | 
					
						
							|  |  |  |           @@providers[p] = o if o.configured? | 
					
						
							|  |  |  |         rescue => e | 
					
						
							|  |  |  |           next | 
					
						
							|  |  |  |         rescue LoadError | 
					
						
							|  |  |  |           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 |