90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 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"
 | |
|         require "routes/v2.0/handlers/report"
 | |
|       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"
 | |
|         require "routes/v2.0/report"
 | |
| 
 | |
|         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
 | |
| 
 | 
