module Devops class DevopsApi2Application < Application def prepare require "auth/devops_auth" require_relative "api2/routes/v2.0" require_relative "api2/handlers/provider" require_relative "api2/handlers/flavor" require_relative "api2/handlers/filter" require_relative "api2/handlers/group" require_relative "api2/handlers/user" require_relative "api2/handlers/network" require_relative "api2/handlers/report" require_relative "api2/handlers/deploy" require_relative "api2/handlers/script" require_relative "api2/handlers/bootstrap_templates" require_relative "api2/handlers/key" require_relative "api2/handlers/tag" require_relative "api2/handlers/server" require_relative "api2/handlers/image" require_relative "api2/handlers/project" require_relative "api2/handlers/stack" require_relative "api2/handlers/stack_template" require_relative "api2/handlers/stack_preset" require 'lib/stubber' 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 mongo = Devops::Api2.settings.mongo mongo.create_root_user ::Provider::ProviderFactory.init(config) ::Provider::ProviderFactory.all.each do |p| next if p.certificate_path.nil? or p.certificate_path.empty? begin mongo.key p.ssh_key, Devops::Model::Key::SYSTEM rescue RecordNotFound => e k = Devops::Model::Key.new({"id" => p.ssh_key, "path" => p.certificate_path, "scope" => Devops::Model::Key::SYSTEM}) mongo.key_insert k end end Stubber.stub_providers!(config[:stub_providers]) end def routes require_relative "api2/routes/flavor" require_relative "api2/routes/image" require_relative "api2/routes/filter" require_relative "api2/routes/network" require_relative "api2/routes/group" require_relative "api2/routes/deploy" require_relative "api2/routes/project" require_relative "api2/routes/key" require_relative "api2/routes/user" require_relative "api2/routes/provider" require_relative "api2/routes/tag" require_relative "api2/routes/server" require_relative "api2/routes/script" require_relative "api2/routes/bootstrap_templates" require_relative "api2/routes/stack" require_relative "api2/routes/stack_template" require_relative "api2/routes/stack_presets" require_relative "api2/routes/statistic" require_relative "api2/routes/report" routes = Devops::API2_0::Routes.constants.collect{|s| Devops::API2_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 #Devops::Api2.routes_list end private def init_mongo Devops::Api2.set :mongo, Devops::Db.connector end end end