| 
									
										
										
										
											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 |