diff --git a/devops-service/app/client/devops-client.rb b/devops-service/app/client/devops-client.rb index 80a3448..fbe77aa 100644 --- a/devops-service/app/client/devops-client.rb +++ b/devops-service/app/client/devops-client.rb @@ -1,4 +1,5 @@ require 'sinatra/base' +require 'core/devops-logger' class Client < Sinatra::Base @@ -7,6 +8,25 @@ class Client < Sinatra::Base @@config = DevopsConfig.config end + configure :production do + logger = DevopsLogger.create("/tmp/devops-client.log", Logger::INFO) + use Rack::CommonLogger, logger + disable :dump_errors + disable :show_exceptions +# set :logging, Logger::INFO + logger.info "Production mode" + end + + configure :development do + logger = DevopsLogger.create("/tmp/devops-client.log", Logger::DEBUG) + use Rack::CommonLogger, logger +# set :logging, Logger::DEBUG + disable :raise_errors +# disable :dump_errors + set :show_exceptions, :after_handler + logger.info "Development mode" + end + # Route to download devops client get "/devops-client.gem" do begin diff --git a/devops-service/app/devops-api2.rb b/devops-service/app/devops-api2.rb index 0337734..2000242 100644 --- a/devops-service/app/devops-api2.rb +++ b/devops-service/app/devops-api2.rb @@ -1,81 +1,79 @@ module Devops - module Application - class DevopsApi2Application < 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" - require "routes/v2.0/handlers/stack_template" - require "routes/v2.0/stack_template_presets" - require "routes/v2.0/handlers/report" - - 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 - Devops::Api2.settings.mongo.create_root_user - ::Provider::ProviderFactory.init(config) - - Stubber.stub_providers! if config[:stub_classes] - 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" - require "routes/v2.0/stack_template" - require "routes/v2.0/handlers/stack_template_preset" - 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 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" + require "routes/v2.0/handlers/stack_template" + require "routes/v2.0/stack_template_presets" + require "routes/v2.0/handlers/report" + 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 + Devops::Api2.settings.mongo.create_root_user + ::Provider::ProviderFactory.init(config) + + Stubber.stub_providers! if config[:stub_classes] + 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" + require "routes/v2.0/stack_template" + require "routes/v2.0/handlers/stack_template_preset" + 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 + end end diff --git a/devops-service/app/devops-application.rb b/devops-service/app/devops-application.rb deleted file mode 100644 index d11676f..0000000 --- a/devops-service/app/devops-application.rb +++ /dev/null @@ -1,28 +0,0 @@ -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 index a303a53..79813f0 100644 --- a/devops-service/app/devops-client.rb +++ b/devops-service/app/devops-client.rb @@ -1,14 +1,12 @@ module Devops - module Application - class DevopsClientApplication < Application + class DevopsClientApplication < Application - def prepare - require "app/client/devops-client" - end + def prepare + require "app/client/devops-client" + end - def routes - Routes.route "/client", ::Client.new - end + def routes + Routes.route "/client", ::Client.new end end end diff --git a/devops-service/app/devops-version.rb b/devops-service/app/devops-version.rb index 0cfadc0..3bc8445 100644 --- a/devops-service/app/devops-version.rb +++ b/devops-service/app/devops-version.rb @@ -1,14 +1,12 @@ module Devops - module Application - class DevopsVersionApplication < Application + class DevopsVersionApplication < Application - def prepare - require "app/version/version" - end + def prepare + require "app/version/version" + end - def routes - Routes.route "/version", ::DevopsVersion.new - end + def routes + Routes.route "/version", ::DevopsVersion.new end end end diff --git a/devops-service/app/sidekiq_web.rb b/devops-service/app/sidekiq_web.rb index c53d3db..6a8ba04 100644 --- a/devops-service/app/sidekiq_web.rb +++ b/devops-service/app/sidekiq_web.rb @@ -1,17 +1,15 @@ module Devops - module Application - class SidekiqApplication < Application - - def prepare - require "sidekiq/web" - end - - def routes - Devops::Routes.route "/sidekiq", Sidekiq::Web - end + class SidekiqApplication < Application + def prepare + require "sidekiq/web" end + + def routes + Devops::Routes.route "/sidekiq", Sidekiq::Web + end + end end diff --git a/devops-service/app/version/version.rb b/devops-service/app/version/version.rb index 277675f..b32fcd3 100644 --- a/devops-service/app/version/version.rb +++ b/devops-service/app/version/version.rb @@ -2,7 +2,7 @@ require 'sinatra/base' class DevopsVersion < Sinatra::Base - VERSION = "3.0.0" + VERSION = "2.3.0" get "/" do VERSION diff --git a/devops-service/applications.rb b/devops-service/applications.rb new file mode 100644 index 0000000..27f1bcd --- /dev/null +++ b/devops-service/applications.rb @@ -0,0 +1,4 @@ +require "app/sidekiq_web" +require "app/devops-client" +require "app/devops-version" +#require "app/devops-api2" diff --git a/devops-service/config.ru b/devops-service/config.ru index 4354bf3..6626b13 100644 --- a/devops-service/config.ru +++ b/devops-service/config.ru @@ -4,11 +4,12 @@ require "rubygems" require "bundler/setup" require 'byebug' -require_relative "devops-service" -require_relative "devops_config" -require_relative "devops-routes" - root = File.dirname(__FILE__) +$:.push root + +require_relative "core/devops-service" +require_relative "core/devops-config" +require_relative "core/devops-routes" # Read configuration file DevopsConfig.read @@ -27,6 +28,10 @@ config[:report_dir_v2] = File.expand_path(File.join(config[:devops_dir], "report DevopsService.init puts Devops::Routes.routes +if Devops::Routes.routes.empty? + puts "No applications" + exit -1 +end Devops::Routes.routes.each do |p, c| map(p) do run c diff --git a/devops-service/core/devops-application.rb b/devops-service/core/devops-application.rb new file mode 100644 index 0000000..d959418 --- /dev/null +++ b/devops-service/core/devops-application.rb @@ -0,0 +1,26 @@ +module Devops + 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 diff --git a/devops-service/devops_config.rb b/devops-service/core/devops-config.rb similarity index 100% rename from devops-service/devops_config.rb rename to devops-service/core/devops-config.rb diff --git a/devops-service/devops_db.rb b/devops-service/core/devops-db.rb similarity index 93% rename from devops-service/devops_db.rb rename to devops-service/core/devops-db.rb index bd01610..02407bc 100644 --- a/devops-service/devops_db.rb +++ b/devops-service/core/devops-db.rb @@ -1,3 +1,5 @@ +require "db/mongo/mongo_connector" + module Devops class Db diff --git a/devops-service/loader.rb b/devops-service/core/devops-loader.rb similarity index 100% rename from devops-service/loader.rb rename to devops-service/core/devops-loader.rb diff --git a/devops-service/core/devops-logger.rb b/devops-service/core/devops-logger.rb new file mode 100644 index 0000000..8963f2b --- /dev/null +++ b/devops-service/core/devops-logger.rb @@ -0,0 +1,16 @@ +require "logger" + +class DevopsLogger + + def self.create out, level=Logger::INFO, format='%a %d-%m-%Y %H%M ' + @_logger = Logger.new out + @_logger.level = level + @_logger.datetime_format = format + @_logger.debug("Logger has been created") + @_logger + end + + def self.logger + @_logger + end +end diff --git a/devops-service/devops-routes.rb b/devops-service/core/devops-routes.rb similarity index 100% rename from devops-service/devops-routes.rb rename to devops-service/core/devops-routes.rb diff --git a/devops-service/devops-service.rb b/devops-service/core/devops-service.rb similarity index 80% rename from devops-service/devops-service.rb rename to devops-service/core/devops-service.rb index 8490cc8..31984e6 100644 --- a/devops-service/devops-service.rb +++ b/devops-service/core/devops-service.rb @@ -1,29 +1,29 @@ require "wisper" -$:.push File.dirname(__FILE__) +=begin require "db/exceptions/invalid_record" require "db/exceptions/record_not_found" require "exceptions/dependency_error" require "db/validators/all" -require "db/mongo/mongo_connector" require "providers/provider_factory" require "fog" -require "loader" -require "devops_db" -require "devops_logger" - require_relative "routes/v2.0" require "hooks" -require "app/devops-application" -require "app/devops-client" -require "app/sidekiq_web" -require "app/devops-version" -require "app/devops-api2" +=end -require_relative "sinatra/methods_with_headers" +require_relative "devops-loader" +require_relative "devops-db" +require_relative "devops-logger" +require_relative "devops-application" + +require_relative "../sinatra/methods_with_headers" + +require_relative "../applications" +#root = File.expand_path("../", __FILE__) +#$:.push root class DevopsService @@ -51,7 +51,7 @@ class DevopsService DevopsLogger.create STDOUT routes - apps = Devops::Application::Application.applications + apps = Devops::Application.applications apps.each do |a| a.prepare end @@ -91,4 +91,4 @@ class DevopsService end -require "wisper_fix" +require_relative "../wisper_fix" diff --git a/devops-service/db/mongo/models/image.rb b/devops-service/db/mongo/models/image.rb index b20d545..16d9fbd 100644 --- a/devops-service/db/mongo/models/image.rb +++ b/devops-service/db/mongo/models/image.rb @@ -1,5 +1,7 @@ require "db/exceptions/invalid_record" require "db/mongo/models/mongo_model" +require "db/validators/image/bootstrap_template.rb" +require "db/validators/image/image_in_filter.rb" module Devops module Model diff --git a/devops-service/db/validators/base.rb b/devops-service/db/validators/base.rb index a195053..ff3245e 100644 --- a/devops-service/db/validators/base.rb +++ b/devops-service/db/validators/base.rb @@ -1,40 +1,42 @@ -class Validators::Base +module Validators + class Base - def initialize(model, options={}) - @model = model - @options = options - end + def initialize(model, options={}) + @model = model + @options = options + end - def validate! - raise InvalidRecord.new(message) unless valid? - end + def validate! + raise InvalidRecord.new(message) unless valid? + end - def valid? - raise 'override me' - end + def valid? + raise 'override me' + end - def message - raise 'override me' - end + def message + raise 'override me' + end - class << self - private + class << self + private - # this method delegates @valid? and @message methods to helper validator, passed as block - def delegate_to_helper_validator(&block) + # this method delegates @valid? and @message methods to helper validator, passed as block + def delegate_to_helper_validator(&block) - define_method :helper_validator do - @helper_validator ||= self.instance_eval(&block) - end + define_method :helper_validator do + @helper_validator ||= self.instance_eval(&block) + end - define_method :valid? do - self.helper_validator.valid? - end + define_method :valid? do + self.helper_validator.valid? + end - define_method :message do - self.helper_validator.message + define_method :message do + self.helper_validator.message + end end end - end + end end diff --git a/devops-service/db/validators/image/bootstrap_template.rb b/devops-service/db/validators/image/bootstrap_template.rb index 5bf37e4..b1d53dc 100644 --- a/devops-service/db/validators/image/bootstrap_template.rb +++ b/devops-service/db/validators/image/bootstrap_template.rb @@ -1,20 +1,24 @@ require "commands/bootstrap_templates" +require "db/validators/base" + module Validators - class Image::BootstrapTemplate < Base + module Image + class BootstrapTemplate < Base - include BootstrapTemplatesCommands + include BootstrapTemplatesCommands - def valid? - if @model.bootstrap_template - templates = get_templates - templates.include?(@model.bootstrap_template) - else - true + def valid? + if @model.bootstrap_template + templates = get_templates + templates.include?(@model.bootstrap_template) + else + true + end end - end - def message - "Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'" + def message + "Invalid bootstrap template '#{@model.bootstrap_template}' for image '#{@model.id}'" + end end end end diff --git a/devops-service/devops_logger.rb b/devops-service/devops_logger.rb deleted file mode 100644 index 10bf2b1..0000000 --- a/devops-service/devops_logger.rb +++ /dev/null @@ -1,16 +0,0 @@ -require "logger" - -class DevopsLogger - - def self.create out, level=Logger::INFO - @_logger = Logger.new out - @_logger.level = level - @_logger.datetime_format = '%a %d-%m-%Y %H%M ' - @_logger.info("Logger has been created") - @_logger - end - - def self.logger - @_logger - end -end \ No newline at end of file diff --git a/devops-service/routes/v2.0.rb b/devops-service/routes/v2.0.rb index dbe1346..1d3cc4a 100644 --- a/devops-service/routes/v2.0.rb +++ b/devops-service/routes/v2.0.rb @@ -3,7 +3,12 @@ require "sinatra/streaming" require "helpers/version_2" require "json" +require "fog" + require "auth/devops_auth" +require "db/exceptions/invalid_record" +require "db/exceptions/record_not_found" +require "exceptions/dependency_error" module Devops class Api2 < Sinatra::Base diff --git a/devops-service/routes/v2.0/flavor.rb b/devops-service/routes/v2.0/flavor.rb index d3abcf7..0cc5dae 100644 --- a/devops-service/routes/v2.0/flavor.rb +++ b/devops-service/routes/v2.0/flavor.rb @@ -1,5 +1,5 @@ module Devops - module Version2_0 + module API2_0 module Routes module FlavorRoutes @@ -31,7 +31,13 @@ module Devops # "disk": 20 # } # ] - app.get_with_headers "/flavors/:provider", :headers => [:accept], &Devops::Version2_0::Handler::Flavor.get_flavors + app.get_with_headers "/flavors/:provider", :headers => [:accept] do#, &Devops::Version2_0::Handler::Flavor.get_flavors + check_privileges("flavor", "r") + provider = params[:provider] + check_provider(provider) + h = Devops::API2_0::Handler::Flavor.new(provider) + json h.flavors + end puts "Flavor routes initialized" end diff --git a/devops-service/routes/v2.0/handlers/filter.rb b/devops-service/routes/v2.0/handlers/filter.rb index e765490..b8c17aa 100644 --- a/devops-service/routes/v2.0/handlers/filter.rb +++ b/devops-service/routes/v2.0/handlers/filter.rb @@ -19,7 +19,9 @@ module Devops def self.delete_filter lambda { - create_response("Deleted", {:images => settings.mongo.delete_available_images(@images, params[:provider])}) + # f = FilterHandler.new(?) #request, params +# f.delete + # create_response("Deleted", {:images => f.delete})# settings.mongo.delete_available_images(@images, params[:provider])}) } end diff --git a/devops-service/routes/v2.0/handlers/flavor.rb b/devops-service/routes/v2.0/handlers/flavor.rb index c71b2d1..f8d099d 100644 --- a/devops-service/routes/v2.0/handlers/flavor.rb +++ b/devops-service/routes/v2.0/handlers/flavor.rb @@ -1,17 +1,19 @@ require "providers/provider_factory" module Devops - module Version2_0 + module API2_0 module Handler class Flavor - def self.get_flavors - lambda { - check_privileges("flavor", "r") - check_provider(params[:provider]) - p = ::Provider::ProviderFactory.get params[:provider] - json p.flavors - } + + def initialize provider + @provider = provider end + + def flavors + p = ::Provider::ProviderFactory.get @provider + p.flavors + end + end end end