diff --git a/devops-service/Gemfile b/devops-service/Gemfile index 4b42a3b..377a458 100644 --- a/devops-service/Gemfile +++ b/devops-service/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -ruby "2.0.0" +#ruby "2.0.0" gem "thin", "~>1.5.1" gem "mime-types", "~>1.25.1" @@ -9,17 +9,18 @@ gem "sinatra-contrib"#, "1.4.1" gem "sinatra-websocket"#, "~>0.3.0" gem "fog", "~>1.20" gem "mixlib-shellout" -gem "chef", ">=11" +gem "chef", ">=12" gem "mongo" gem "bson_ext" gem "multi_json", "1.7.8" gem "rufus-scheduler", "2.0.24" gem "sidekiq", "3.2.6" gem 'wisper' -gem 'rake', '10.0.0' +gem 'rake', '10.2.0' gem 'rack', '1.5.2' +gem 'hooks' -gem "devops-nibr", :path => "plugins/devops-nibr" +#gem "devops-nibr", :path => "plugins/devops-nibr" group :test do gem 'cucumber' diff --git a/devops-service/Gemfile.lock b/devops-service/Gemfile.lock index 69001ab..e5c2f34 100644 --- a/devops-service/Gemfile.lock +++ b/devops-service/Gemfile.lock @@ -1,66 +1,84 @@ -PATH - remote: plugins/devops-nibr - specs: - devops-nibr (0.0.1) - GEM remote: https://rubygems.org/ specs: - CFPropertyList (2.3.0) - addressable (2.3.6) + CFPropertyList (2.3.1) + addressable (2.3.8) backports (3.6.4) - bson (1.11.1) - bson_ext (1.11.1) - bson (~> 1.11.1) + bson (1.12.3) + bson_ext (1.12.3) + bson (~> 1.12.3) builder (3.2.2) - byebug (3.5.1) - columnize (~> 0.8) - debugger-linecache (~> 1.2) - slop (~> 3.6) + byebug (5.0.0) + columnize (= 0.9.0) celluloid (0.15.2) timers (~> 1.1.0) - chef (11.6.0) - erubis - highline (>= 1.6.9) - json (>= 1.4.4, <= 1.7.7) - mixlib-authentication (>= 1.3.0) - mixlib-cli (~> 1.3.0) - mixlib-config (>= 1.1.2) - mixlib-log (>= 1.3.0) - mixlib-shellout + chef (12.3.0) + chef-zero (~> 4.1) + diff-lcs (~> 1.2, >= 1.2.4) + erubis (~> 2.7) + ffi-yajl (>= 1.2, < 3.0) + highline (~> 1.6, >= 1.6.9) + mixlib-authentication (~> 1.3) + mixlib-cli (~> 1.4) + mixlib-config (~> 2.0) + mixlib-log (~> 1.3) + mixlib-shellout (>= 2.0.0.rc.0, < 3.0) net-ssh (~> 2.6) - net-ssh-multi (~> 1.1.0) - ohai (>= 0.6.0) - rest-client (>= 1.0.4, < 1.7.0) - yajl-ruby (~> 1.1) + net-ssh-multi (~> 1.1) + ohai (~> 8.0) + plist (~> 3.1.0) + pry (~> 0.9) + rspec-core (~> 3.2) + rspec-expectations (~> 3.2) + rspec-mocks (~> 3.2) + rspec_junit_formatter (~> 0.2.0) + serverspec (~> 2.7) + specinfra (~> 2.10) + chef-zero (4.2.3) + ffi-yajl (>= 1.1, < 3.0) + hashie (~> 2.0) + mixlib-log (~> 1.3) + rack + uuidtools (~> 2.1) + coderay (1.1.0) columnize (0.9.0) - connection_pool (2.1.1) - cucumber (1.3.18) + connection_pool (2.2.0) + cucumber (2.0.0) builder (>= 2.1.2) + cucumber-core (~> 1.1.3) diff-lcs (>= 1.1.3) gherkin (~> 2.12) multi_json (>= 1.7.5, < 2.0) - multi_test (>= 0.1.1) - daemons (1.1.9) - debugger-linecache (1.2.0) + multi_test (>= 0.1.2) + cucumber-core (1.1.3) + gherkin (~> 2.12.0) + daemons (1.2.2) diff-lcs (1.2.5) em-websocket (0.3.8) addressable (>= 2.1.1) eventmachine (>= 0.12.9) erubis (2.7.0) - eventmachine (1.0.4) - excon (0.43.0) + eventmachine (1.0.7) + excon (0.45.3) + ffi (1.9.8) + ffi-yajl (1.4.0) + ffi (~> 1.5) + libyajl2 (~> 1.2) fission (0.5.0) CFPropertyList (~> 2.2) - fog (1.27.0) + fog (1.31.0) fog-atmos fog-aws (~> 0.0) fog-brightbox (~> 0.4) - fog-core (~> 1.27, >= 1.27.3) + fog-core (~> 1.30) fog-ecloud + fog-google (>= 0.0.2) fog-json + fog-local + fog-powerdns (>= 0.1.1) fog-profitbricks fog-radosgw (>= 0.0.2) + fog-riakcs fog-sakuracloud (>= 0.0.4) fog-serverlove fog-softlayer @@ -74,7 +92,7 @@ GEM fog-atmos (0.1.0) fog-core fog-xml - fog-aws (0.0.7) + fog-aws (0.5.0) fog-core (~> 1.27) fog-json (~> 1.0) fog-xml (~> 0.1) @@ -83,105 +101,155 @@ GEM fog-core (~> 1.22) fog-json inflecto (~> 0.0.2) - fog-core (1.27.3) + fog-core (1.31.1) builder - excon (~> 0.38) + excon (~> 0.45) formatador (~> 0.2) mime-types net-scp (~> 1.1) net-ssh (>= 2.1.3) - fog-ecloud (0.0.2) + fog-ecloud (0.1.3) fog-core fog-xml - fog-json (1.0.0) + fog-google (0.0.5) + fog-core + fog-json + fog-xml + fog-json (1.0.1) + fog-core (~> 1.0) multi_json (~> 1.0) - fog-profitbricks (0.0.1) + fog-local (0.2.1) + fog-core (~> 1.27) + fog-powerdns (0.1.1) + fog-core (~> 1.27) + fog-json (~> 1.0) + fog-xml (~> 0.1) + fog-profitbricks (0.0.3) fog-core fog-xml nokogiri - fog-radosgw (0.0.3) + fog-radosgw (0.0.4) fog-core (>= 1.21.0) fog-json fog-xml (>= 0.0.1) - fog-sakuracloud (1.0.0) + fog-riakcs (0.1.0) fog-core fog-json - fog-serverlove (0.1.1) + fog-xml + fog-sakuracloud (1.0.1) fog-core fog-json - fog-softlayer (0.3.30) + fog-serverlove (0.1.2) fog-core fog-json - fog-storm_on_demand (0.1.0) + fog-softlayer (0.4.6) fog-core fog-json - fog-terremark (0.0.3) + fog-storm_on_demand (0.1.1) + fog-core + fog-json + fog-terremark (0.1.0) fog-core fog-xml - fog-vmfusion (0.0.1) + fog-vmfusion (0.1.0) fission fog-core - fog-voxel (0.0.2) + fog-voxel (0.1.0) fog-core fog-xml - fog-xml (0.1.1) + fog-xml (0.1.2) fog-core nokogiri (~> 1.5, >= 1.5.11) formatador (0.2.5) gherkin (2.12.2) multi_json (~> 1.3) - highline (1.6.21) + hashie (2.1.2) + highline (1.7.2) + hooks (0.4.0) + uber (~> 0.0.4) httpclient (2.6.0.1) inflecto (0.0.2) ipaddress (0.8.0) - json (1.7.7) + json (1.8.3) + libyajl2 (1.2.0) + method_source (0.8.2) mime-types (1.25.1) mini_portile (0.6.2) mixlib-authentication (1.3.0) mixlib-log - mixlib-cli (1.3.0) - mixlib-config (2.1.0) + mixlib-cli (1.5.0) + mixlib-config (2.2.1) mixlib-log (1.6.0) - mixlib-shellout (2.0.1) - mongo (1.11.1) - bson (= 1.11.1) + mixlib-shellout (2.1.0) + mongo (1.12.3) + bson (= 1.12.3) multi_json (1.7.8) - multi_test (0.1.1) + multi_test (0.1.2) + net-dhcp (1.3.2) net-scp (1.2.1) net-ssh (>= 2.6.5) net-ssh (2.9.2) net-ssh-gateway (1.2.0) net-ssh (>= 2.6.5) - net-ssh-multi (1.1) - net-ssh (>= 2.1.4) - net-ssh-gateway (>= 0.99.0) + net-ssh-multi (1.2.1) + net-ssh (>= 2.6.5) + net-ssh-gateway (>= 1.2.0) nokogiri (1.6.6.2) mini_portile (~> 0.6.0) - ohai (6.24.2) + ohai (8.0.1) + ffi (~> 1.9) + ffi-yajl (~> 1.1) ipaddress + mime-types (~> 1.16) mixlib-cli - mixlib-config + mixlib-config (~> 2.0) mixlib-log - mixlib-shellout - systemu (~> 2.5.2) - yajl-ruby - power_assert (0.2.2) + mixlib-shellout (~> 2.0) + net-dhcp + rake (~> 10.1) + systemu (~> 2.6.4) + wmi-lite (~> 1.0) + plist (3.1.0) + power_assert (0.2.3) + pry (0.10.1) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) rack (1.5.2) rack-protection (1.5.3) rack rack-test (0.6.3) rack (>= 1.0) - rake (10.0.0) - rdoc (4.2.0) - json (~> 1.4) - redis (3.2.0) - redis-namespace (1.5.1) + rake (10.2.0) + redis (3.2.1) + redis-namespace (1.5.2) redis (~> 3.0, >= 3.0.4) - rest-client (1.6.8) - mime-types (~> 1.16) - rdoc (>= 2.4.2) + rspec (3.3.0) + rspec-core (~> 3.3.0) + rspec-expectations (~> 3.3.0) + rspec-mocks (~> 3.3.0) + rspec-core (3.3.1) + rspec-support (~> 3.3.0) + rspec-expectations (3.3.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-its (1.2.0) + rspec-core (>= 3.0.0) + rspec-expectations (>= 3.0.0) + rspec-mocks (3.3.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-support (3.3.0) + rspec_junit_formatter (0.2.3) + builder (< 4) + rspec-core (>= 2, < 4, != 2.12.0) rufus-scheduler (2.0.24) tzinfo (>= 0.3.22) + serverspec (2.19.0) + multi_json + rspec (~> 3.0) + rspec-its + specinfra (~> 2.35) sidekiq (3.2.6) celluloid (= 0.15.2) connection_pool (>= 2.0.0) @@ -192,32 +260,37 @@ GEM rack (~> 1.4) rack-protection (~> 1.4) tilt (~> 1.3, >= 1.3.4) - sinatra-contrib (1.4.2) + sinatra-contrib (1.4.4) backports (>= 2.0) multi_json rack-protection rack-test sinatra (~> 1.4.0) - tilt (~> 1.3) + tilt (>= 1.3, < 3) sinatra-websocket (0.3.1) em-websocket (~> 0.3.6) eventmachine thin (>= 1.3.1, < 2.0.0) slop (3.6.0) - systemu (2.5.2) - test-unit (3.0.9) + specinfra (2.36.1) + net-scp + net-ssh + systemu (2.6.5) + test-unit (3.1.2) power_assert thin (1.5.1) daemons (>= 1.0.9) eventmachine (>= 0.12.6) rack (>= 1.0.0) - thread_safe (0.3.4) + thread_safe (0.3.5) tilt (1.4.1) timers (1.1.0) tzinfo (1.2.2) thread_safe (~> 0.1) + uber (0.0.13) + uuidtools (2.1.5) wisper (1.6.0) - yajl-ruby (1.2.1) + wmi-lite (1.0.0) PLATFORMS ruby @@ -225,17 +298,17 @@ PLATFORMS DEPENDENCIES bson_ext byebug - chef (>= 11) + chef (>= 12) cucumber - devops-nibr! fog (~> 1.20) + hooks httpclient mime-types (~> 1.25.1) mixlib-shellout mongo multi_json (= 1.7.8) rack (= 1.5.2) - rake (= 10.0.0) + rake (= 10.2.0) rufus-scheduler (= 2.0.24) sidekiq (= 3.2.6) sinatra (= 1.4.3) diff --git a/devops-service/client.rb b/devops-service/app/client/devops-client.rb similarity index 92% rename from devops-service/client.rb rename to devops-service/app/client/devops-client.rb index c676b69..80a3448 100644 --- a/devops-service/client.rb +++ b/devops-service/app/client/devops-client.rb @@ -2,9 +2,9 @@ require 'sinatra/base' class Client < Sinatra::Base - def initialize config + def initialize super() - @@config = config + @@config = DevopsConfig.config end # Route to download devops client @@ -30,3 +30,4 @@ class Client < Sinatra::Base end end + diff --git a/devops-service/app/devops-api2.rb b/devops-service/app/devops-api2.rb new file mode 100644 index 0000000..c24c532 --- /dev/null +++ b/devops-service/app/devops-api2.rb @@ -0,0 +1,87 @@ +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" + 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" + + 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 + diff --git a/devops-service/app/devops-application.rb b/devops-service/app/devops-application.rb new file mode 100644 index 0000000..d11676f --- /dev/null +++ b/devops-service/app/devops-application.rb @@ -0,0 +1,28 @@ +module Devops + module Application + class Application + + @@applications = [] + + def self.inherited(base) + @@applications << base.new + puts "Devops application '#{base}' has been added" + end + + def self.applications + @@applications + end + + def prepare + + end + + def init + + end + + def routes + end + end + end +end diff --git a/devops-service/app/devops-client.rb b/devops-service/app/devops-client.rb new file mode 100644 index 0000000..a303a53 --- /dev/null +++ b/devops-service/app/devops-client.rb @@ -0,0 +1,14 @@ +module Devops + module Application + class DevopsClientApplication < Application + + def prepare + require "app/client/devops-client" + end + + def routes + Routes.route "/client", ::Client.new + end + end + end +end diff --git a/devops-service/app/devops-version.rb b/devops-service/app/devops-version.rb new file mode 100644 index 0000000..0cfadc0 --- /dev/null +++ b/devops-service/app/devops-version.rb @@ -0,0 +1,15 @@ +module Devops + module Application + class DevopsVersionApplication < Application + + def prepare + require "app/version/version" + end + + def routes + Routes.route "/version", ::DevopsVersion.new + end + end + end +end + diff --git a/devops-service/app/sidekiq_web.rb b/devops-service/app/sidekiq_web.rb new file mode 100644 index 0000000..c53d3db --- /dev/null +++ b/devops-service/app/sidekiq_web.rb @@ -0,0 +1,17 @@ +module Devops + module Application + + class SidekiqApplication < Application + + def prepare + require "sidekiq/web" + end + + def routes + Devops::Routes.route "/sidekiq", Sidekiq::Web + end + + end + end +end + diff --git a/devops-service/version.rb b/devops-service/app/version/version.rb similarity index 100% rename from devops-service/version.rb rename to devops-service/app/version/version.rb diff --git a/devops-service/config.ru b/devops-service/config.ru index d2f4065..4205988 100644 --- a/devops-service/config.ru +++ b/devops-service/config.ru @@ -6,7 +6,7 @@ require 'byebug' require_relative "devops-service" require_relative "devops_config" -require_relative "routes" +require_relative "devops-routes" root = File.dirname(__FILE__) @@ -26,4 +26,10 @@ config[:report_dir_v2] = File.expand_path(File.join(config[:devops_dir], "report ].each {|key| d = config[key]; FileUtils.mkdir_p(d) unless File.exists?(d) } DevopsService.init -run Rack::URLMap.new(Devops::Routes.routes) +puts Devops::Routes.routes +Devops::Routes.routes.each do |p, c| + map(p) do + run c + end +end +#run Rack::URLMap.new(Devops::Routes.routes) diff --git a/devops-service/routes.rb b/devops-service/devops-routes.rb similarity index 100% rename from devops-service/routes.rb rename to devops-service/devops-routes.rb diff --git a/devops-service/devops-service.rb b/devops-service/devops-service.rb index 7d1115a..9a5e61f 100644 --- a/devops-service/devops-service.rb +++ b/devops-service/devops-service.rb @@ -8,16 +8,18 @@ require "db/validators/all" require "db/mongo/mongo_connector" require "providers/provider_factory" -require "loader" -require "devops_db" - -require "sidekiq/web" require "fog" +require "loader" +require "devops_db" require_relative "routes/v2.0" -require_relative "client" -require_relative "report" -require_relative "version" + +require "hooks" +require "app/devops-application" +require "app/devops-client" +require "app/sidekiq_web" +require "app/devops-version" +require "app/devops-api2" require_relative "sinatra/methods_with_headers" @@ -30,11 +32,7 @@ class DevopsService def routes config = DevopsConfig.config Devops::Routes.preffix = config[:url_prefix] - Devops::Routes.route "/version", DevopsVersion - Devops::Routes.route "/v2.0", Devops::Version2_0::Application - Devops::Routes.route "/client", Client.new(config) - Devops::Routes.route "/v2.0/report", ReportRoutes.new(config, "v2") - Devops::Routes.route "/sidekiq", Sidekiq::Web + #require_relative "routes/routes.rb" end # steps: @@ -48,15 +46,34 @@ class DevopsService def init # init database Devops::Db.init - # init plugins + routes + apps = Devops::Application::Application.applications + apps.each do |a| + a.prepare + end + + Devops::Loader.load_plugins + apps.each do |a| + a.init + end Devops::Loader.init_plugins + apps.each do |a| + a.routes + end + Devops::Loader.routes +=begin + Devops::Version2_0::Application.load + Devops::Loader.load_plugins # init routes classes Devops::Version2_0::Application.init + # init plugins + Devops::Loader.init_plugins Devops::Version2_0::Application.register_routes # init routes paths routes # add plugins routes Devops::Loader.routes +=end end def debug? diff --git a/devops-service/loader.rb b/devops-service/loader.rb index 4a36eb5..175d710 100644 --- a/devops-service/loader.rb +++ b/devops-service/loader.rb @@ -2,7 +2,7 @@ module Devops module Loader class << self - def init_plugins + def load_plugins plugins do |plugin| plugin.init end diff --git a/devops-service/report.rb b/devops-service/report.rb deleted file mode 100644 index 437ad79..0000000 --- a/devops-service/report.rb +++ /dev/null @@ -1,89 +0,0 @@ -require 'sinatra/base' - -class ReportRoutes < Sinatra::Base - - def initialize config, version - super() - @@config = config - end - - enable :inline_templates - - get "/all" do - options = {} - ["project", "deploy_env", "type", "created_by", "date_from", "date_to", "sort", "status"].each do |k| - options[k] = params[k] unless params[k].nil? - end - json Devops::Db.connector.reports(options).map{|r| r.to_hash} -=begin - res = {} - uri = URI.parse(request.url) - pref = File.dirname(uri.path) - @paths.each do |key, dir| - files = [] - Dir[File.join(dir, "/**/*")].each do |f| - next if File.directory?(f) - jid = File.basename(f) - uri.path = File.join(pref, key, f[dir.length..-1]) - o = { - "file" => uri.to_s, - "created" => File.ctime(f).to_s, - "status" => task_status(jid) - } - files.push o - end - res[key] = files - end - json res -=end - end - - get "/:id" do - r = Devops::Db.connector.report(params[:id]) - file = r.file - return [404, "Report '#{params[:id]}' does not exist"] unless File.exists? file - @text = File.read(file) - @done = completed?(params[:id]) - erb :index - end - - get "/favicon.ico" do - [404, ""] - end - - def completed? id - r = task_status(id) - r == "completed" or r == "failed" - end - - def task_status id - r = Sidekiq.redis do |connection| - connection.hget("devops", id) - end - end - -end - -__END__ - -@@ layout - - - <% unless @done %> - - <% end %> - - - <%= yield %> - - - -@@ index -
-<%= @text %>
-
diff --git a/devops-service/routes/routes.rb b/devops-service/routes/routes.rb new file mode 100644 index 0000000..66a8c56 --- /dev/null +++ b/devops-service/routes/routes.rb @@ -0,0 +1,4 @@ +require_relative "sidekiq_web" +require_relative "devops_version" +require_relative "devops-client" +require_relative "api_v2" diff --git a/devops-service/routes/routes_container.rb b/devops-service/routes/routes_container.rb deleted file mode 100644 index cef0a66..0000000 --- a/devops-service/routes/routes_container.rb +++ /dev/null @@ -1,12 +0,0 @@ -module Devops - module RoutesContainer - - def register_routes - routes = Devops::Version2_0::Routes.constants.collect{|s| Devops::Version2_0::Routes.const_get(s)}.select {|const| const.class == Module} - routes.each do |r| - register r - end - end - - end -end diff --git a/devops-service/routes/v2.0.rb b/devops-service/routes/v2.0.rb index 84520ff..0d91e1e 100644 --- a/devops-service/routes/v2.0.rb +++ b/devops-service/routes/v2.0.rb @@ -3,106 +3,10 @@ require "sinatra/streaming" require "helpers/version_2" require "json" -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/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/routes_container" - require "auth/devops_auth" module Devops - module Version2_0 - class Application < Sinatra::Base - - extend Devops::RoutesContainer - - class << self - - @routes = [ - Devops::Version2_0::Routes::ProviderRoutes, - Devops::Version2_0::Routes::BootstrapTemplatesRoutes, - Devops::Version2_0::Routes::UserRoutes, - Devops::Version2_0::Routes::FilterRoutes, - Devops::Version2_0::Routes::FlavorRoutes, - Devops::Version2_0::Routes::GroupRoutes, - Devops::Version2_0::Routes::ImageRoutes, - Devops::Version2_0::Routes::KeyRoutes, - Devops::Version2_0::Routes::NetworkRoutes, - Devops::Version2_0::Routes::ProjectRoutes, - Devops::Version2_0::Routes::ScriptRoutes, - Devops::Version2_0::Routes::ServerRoutes, - Devops::Version2_0::Routes::StatusRoutes, - Devops::Version2_0::Routes::TagRoutes, - Devops::Version2_0::Routes::DeployRoutes, - Devops::Version2_0::Routes::StackTemplateRoutes, - Devops::Version2_0::Routes::StackRoutes - ] - - def init - config = DevopsConfig.config - set :devops_home, config[:devops_dir] - #set :config, config - - set :keys_dir, (config[:keys_dir] || File.join(config[:devops_dir], "files/keys")) - set :scripts_dir, (config[:scripts_dir] || File.join(config[:devops_dir], "files/scripts")) - [:keys_dir, :scripts_dir].each {|key| d = settings.send(key); FileUtils.mkdir_p(d) unless File.exists?(d) } - init_mongo - settings.mongo.create_root_user - ::Provider::ProviderFactory.init(config) - #set_up_providers_keys!(::Provider::ProviderFactory.all, mongo) - - end - - def init_mongo - set :mongo, Devops::Db.connector - end - - private - 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 + class Api2 < Sinatra::Base include Sinatra::JSON helpers Sinatra::Streaming @@ -125,7 +29,7 @@ module Devops disable :dump_errors disable :show_exceptions set :logging, Logger::INFO - puts "TODO2" + puts "Production mode" end configure :development do @@ -133,7 +37,7 @@ module Devops disable :raise_errors # disable :dump_errors set :show_exceptions, :after_handler - puts "TODO1" + puts "Development mode" end not_found do @@ -210,5 +114,4 @@ module Devops end end - end end