| 
									
										
										
										
											2015-06-25 11:13:46 +03:00
										 |  |  | module Devops | 
					
						
							|  |  |  |   module Application | 
					
						
							|  |  |  |     class DevopsApi2Application < Application | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def prepare | 
					
						
							|  |  |  |         require "routes/v2.0" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/provider" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/bootstrap_templates" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/deploy" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/filter" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/flavor" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/group" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/image" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/network" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/key" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/project" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/script" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/status" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/tag" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/user" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/server" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/stack_template" | 
					
						
							|  |  |  |         require "routes/v2.0/handlers/stack" | 
					
						
							| 
									
										
										
										
											2015-06-30 14:27:42 +03:00
										 |  |  |         require "routes/v2.0/handlers/report" | 
					
						
							| 
									
										
										
										
											2015-06-25 11:13:46 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def init | 
					
						
							|  |  |  |         config = DevopsConfig.config | 
					
						
							|  |  |  |         Devops::Api2.set :devops_home, config[:devops_dir] | 
					
						
							|  |  |  |         #set :config, config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Devops::Api2.set :keys_dir, (config[:keys_dir] || File.join(config[:devops_dir], "files/keys")) | 
					
						
							|  |  |  |         Devops::Api2.set :scripts_dir, (config[:scripts_dir] || File.join(config[:devops_dir], "files/scripts")) | 
					
						
							|  |  |  |         [:keys_dir, :scripts_dir].each {|key| d = Devops::Api2.settings.send(key); FileUtils.mkdir_p(d) unless File.exists?(d) } | 
					
						
							|  |  |  |         init_mongo | 
					
						
							|  |  |  |         Devops::Api2.settings.mongo.create_root_user | 
					
						
							|  |  |  |         ::Provider::ProviderFactory.init(config) | 
					
						
							|  |  |  |         #set_up_providers_keys!(::Provider::ProviderFactory.all, mongo) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def routes | 
					
						
							|  |  |  |         require "routes/v2.0/flavor" | 
					
						
							|  |  |  |         require "routes/v2.0/image" | 
					
						
							|  |  |  |         require "routes/v2.0/filter" | 
					
						
							|  |  |  |         require "routes/v2.0/network" | 
					
						
							|  |  |  |         require "routes/v2.0/group" | 
					
						
							|  |  |  |         require "routes/v2.0/deploy" | 
					
						
							|  |  |  |         require "routes/v2.0/project" | 
					
						
							|  |  |  |         require "routes/v2.0/key" | 
					
						
							|  |  |  |         require "routes/v2.0/user" | 
					
						
							|  |  |  |         require "routes/v2.0/provider" | 
					
						
							|  |  |  |         require "routes/v2.0/tag" | 
					
						
							|  |  |  |         require "routes/v2.0/server" | 
					
						
							|  |  |  |         require "routes/v2.0/script" | 
					
						
							|  |  |  |         require "routes/v2.0/status" | 
					
						
							|  |  |  |         require "routes/v2.0/bootstrap_templates" | 
					
						
							|  |  |  |         require "routes/v2.0/stack_template" | 
					
						
							|  |  |  |         require "routes/v2.0/stack" | 
					
						
							| 
									
										
										
										
											2015-06-30 14:27:42 +03:00
										 |  |  |         require "routes/v2.0/report" | 
					
						
							| 
									
										
										
										
											2015-06-25 11:13:46 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         routes = Devops::Version2_0::Routes.constants.collect{|s| Devops::Version2_0::Routes.const_get(s)}.select {|const| const.class == Module} | 
					
						
							|  |  |  |         routes.each do |r| | 
					
						
							|  |  |  |           Devops::Api2.register r | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         Routes.route "/v2.0", Devops::Api2 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       private | 
					
						
							|  |  |  |       def init_mongo | 
					
						
							|  |  |  |         Devops::Api2.set :mongo, Devops::Db.connector | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def set_up_providers_keys!(providers, mongo) | 
					
						
							|  |  |  |         providers.each do |provider| | 
					
						
							|  |  |  |           next if provider.certificate_path.nil? | 
					
						
							|  |  |  |           begin | 
					
						
							|  |  |  |             mongo.key provider.ssh_key, Key::SYSTEM | 
					
						
							|  |  |  |           rescue RecordNotFound => e | 
					
						
							|  |  |  |             k = Key.new({"id" => provider.ssh_key, "path" => provider.certificate_path, "scope" => Key::SYSTEM}) | 
					
						
							|  |  |  |             mongo.key_insert k | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 |