From 5d41044272d6ba96e3f9597f8b6ba2328d6d139e Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 27 Jul 2015 11:14:01 +0300 Subject: [PATCH] stack --- devops-service/app/api2/handlers/filter.rb | 20 +++---- devops-service/app/api2/handlers/report.rb | 2 +- devops-service/app/api2/handlers/stack.rb | 60 ++++++------------- .../app/api2/handlers/stack_template.rb | 55 +++++------------ .../api2/handlers/stack_template_preset.rb | 36 ++++------- devops-service/app/api2/routes/filter.rb | 15 ++--- devops-service/app/api2/routes/stack.rb | 38 ++++++++---- .../app/api2/routes/stack_template.rb | 35 +++++++---- .../app/api2/routes/stack_template_presets.rb | 22 +++++-- devops-service/app/devops-api2.rb | 7 ++- devops-service/core/devops-config.rb | 2 +- devops-service/db/mongo/models/report.rb | 1 - devops-service/db/mongo/models/server.rb | 1 - 13 files changed, 134 insertions(+), 160 deletions(-) diff --git a/devops-service/app/api2/handlers/filter.rb b/devops-service/app/api2/handlers/filter.rb index 9c51c28..8a4cf23 100644 --- a/devops-service/app/api2/handlers/filter.rb +++ b/devops-service/app/api2/handlers/filter.rb @@ -1,22 +1,20 @@ +require_relative "request_handler" + module Devops module API2_0 module Handler - class Filter + class Filter < RequestHandler - def initialize provider - @provider = provider + def available_images provider + Devops::Db.connector.available_images(provider) end - def available_images - Devops::Db.connector.available_images(@provider) + def add_images images, provider + Devops::Db.connector.add_available_images(images, provider) end - def add_images images - Devops::Db.connector.add_available_images(images, @provider) - end - - def delete_images images - Devops::Db.connector.delete_available_images(images, @provider) + def delete_images images, provider + Devops::Db.connector.delete_available_images(images, provider) end end diff --git a/devops-service/app/api2/handlers/report.rb b/devops-service/app/api2/handlers/report.rb index e421d13..1918d66 100644 --- a/devops-service/app/api2/handlers/report.rb +++ b/devops-service/app/api2/handlers/report.rb @@ -1,7 +1,7 @@ require_relative "request_handler" module Devops - module Version2_0 + module API2_0 module Handler class Report < RequestHandler diff --git a/devops-service/app/api2/handlers/stack.rb b/devops-service/app/api2/handlers/stack.rb index 1e1d794..b911acb 100644 --- a/devops-service/app/api2/handlers/stack.rb +++ b/devops-service/app/api2/handlers/stack.rb @@ -1,60 +1,36 @@ require 'db/mongo/models/stack/stack_factory' +require_relative "request_handler" module Devops - module Version2_0 + module API2_0 module Handler - class Stack + class Stack < RequestHandler - def self.get_stacks - lambda { - check_privileges("stack", "r") - stacks = settings.mongo.stacks - json stacks.map(&:to_hash) - } + def stacks + Devops::Db.connector.stacks end - def self.get_stacks_for_provider - lambda { - check_privileges("stack", "r") - check_provider(params[:provider]) - stacks = settings.mongo.stacks(params[:provider]) - json stacks.map(&:to_hash) - } + def stacks_for_provider + Devops::Db.connector.stacks(@params[:provider]) end - def self.create_stack - lambda { - check_privileges("stack", "w") - - object = create_object_from_json_body - stack_model = Model::StackFactory.create(object['provider'], object) - settings.mongo.stack_insert(stack_model) - - create_response "Created", stack_model.to_hash, 201 - } + def create_stack object + stack_model = Model::StackFactory.create(object['provider'], object) + Devops::Db.connector.stack_insert(stack_model) + stack_model end - def self.get_stack - lambda { - check_privileges("stack", "r") - stack = settings.mongo.stack(params[:stack_id]) - json stack.to_hash - } + def stack id + Devops::Db.connector.stack(id) end - def self.delete_stack - lambda { - check_privileges("stack", "w") - - stack = settings.mongo.stack(params[:stack_id]) - stack.delete_stack_in_cloud! - settings.mongo.stack_delete(params[:stack_id]) - - create_response("Stack '#{params[:stack_id]}' has been removed") - } + def delete_stack id + stack = self.stack(id) + stack.delete_stack_in_cloud! + Devops::Db.connector.stack_delete(id) end end end end -end \ No newline at end of file +end diff --git a/devops-service/app/api2/handlers/stack_template.rb b/devops-service/app/api2/handlers/stack_template.rb index 5a690bb..93a0f6a 100644 --- a/devops-service/app/api2/handlers/stack_template.rb +++ b/devops-service/app/api2/handlers/stack_template.rb @@ -1,57 +1,34 @@ require 'db/mongo/models/stack_template/stack_template_factory' +require_relative "request_handler" module Devops - module Version2_0 + module API2_0 module Handler - class StackTemplate + class StackTemplate < RequestHandler - def self.get_stack_templates - lambda { - check_privileges('stack_template', 'r') - stack_templates = settings.mongo.stack_templates - json stack_templates.map(&:to_hash) - } + def stack_templates + Devops::Db.connector.stack_templates end - def self.get_stack_templates_for_provider - lambda { - check_privileges('stack_template', 'r') - check_provider(params[:provider]) - stack_templates = settings.mongo.stack_templates(params[:provider]) - json stack_templates.map(&:to_hash) - } + def stack_templates_for_provider provider + Devops::Db.connector.stack_templates(provider) end - def self.create_stack_template - lambda { - check_privileges('stack_template', 'w') - - attrs = create_object_from_json_body - template_model = Model::StackTemplateFactory.create(attrs['provider'], attrs) - - settings.mongo.stack_template_insert(template_model) - create_response 'Created', template_model.to_hash, 201 - } + def create_stack_template body + template_model = Model::StackTemplateFactory.create(body['provider'], body) + Devops::Db.connector.stack_template_insert(template_model) + template_model end - def self.get_stack_template - lambda { - check_privileges('stack_template', 'r') - stack_template = settings.mongo.stack_template(params[:stack_template_id]) - json stack_template.to_hash - } + def get_stack_template id + Devops::Db.connector.stack_template(id) end - def self.delete_stack_template - lambda { - check_privileges('stack_template', 'w') - - settings.mongo.stack_template_delete params[:stack_template_id] - create_response("Template '#{params[:stack_template_id]}' has been removed") - } + def delete_stack_template id + Devops::Db.connector.stack_template_delete id end end end end -end \ No newline at end of file +end diff --git a/devops-service/app/api2/handlers/stack_template_preset.rb b/devops-service/app/api2/handlers/stack_template_preset.rb index 766e23b..088bd32 100644 --- a/devops-service/app/api2/handlers/stack_template_preset.rb +++ b/devops-service/app/api2/handlers/stack_template_preset.rb @@ -1,39 +1,25 @@ require 'json' require 'lib/stack_template_presets/factory' +require_relative "request_handler" module Devops - module Version2_0 + module API2_0 module Handler - class StackTemplatePreset + class StackTemplatePreset < RequestHandler - def self.get_presets - lambda { - # check_privileges("stack_template_presets", "r") - json Devops::StackTemplatePresetsFactory.list.map(&:to_hash) - } + def templates + Devops::StackTemplatePresetsFactory.list end - def self.get_preset - lambda { - # check_privileges("stack_template_presets", "r") - json Devops::StackTemplatePresetsFactory.get(params['id']).to_hash - } + def template id + Devops::StackTemplatePresetsFactory.get(id) end - def self.build_stack_template - lambda { - # check_privileges("stack_template_presets", "r") - check_privileges('stack_template', 'w') + def build_stack_template id, body + provider, stack_id, parameters = body.fetch('provider'), body.fetch('stack'), body.fetch('parameters') - attrs = create_object_from_json_body - - provider, stack_id, parameters = attrs.fetch('provider'), attrs.fetch('stack'), attrs.fetch('parameters') - - preset = Devops::StackTemplatePresetsFactory.get(attrs.fetch('id')) - stack = preset.create_stack_from_preset(provider, stack_id, parameters) - - create_response 'Created', stack.to_hash, 201 - } + preset = Devops::StackTemplatePresetsFactory.get(id) + preset.create_stack_from_preset(provider, stack_id, parameters) end end diff --git a/devops-service/app/api2/routes/filter.rb b/devops-service/app/api2/routes/filter.rb index bbce987..b443ea8 100644 --- a/devops-service/app/api2/routes/filter.rb +++ b/devops-service/app/api2/routes/filter.rb @@ -23,11 +23,10 @@ module Devops # [ # "36dc7618-4178-4e29-be43-286fbfe90f50" # ] - app.get_with_headers "/filter/:provider/images", :headers => [:accept] do#, &Devops::API2_0::Handler::Filter.get_filters + app.get_with_headers "/filter/:provider/images", :headers => [:accept] do |provider| check_privileges("filter", "r") - provider = params[:provider] check_provider(provider) - json Devops::API2_0::Handler::Filter.new(provider).available_images + json Devops::API2_0::Handler::Filter.new(request, params).available_images(provider) end hash = {} @@ -45,14 +44,13 @@ module Devops # ] -> array of image ids to add to filter # # * *Returns* : list of images filters for :provider - hash["PUT"] = lambda { #Devops::API2_0::Handler::Filter.add_filter + hash["PUT"] = lambda { |provider| check_privileges("filter", "w") - provider = params[:provider] check_provider(provider) images = create_object_from_json_body(Array) halt_response("Request body should not be an empty array") if images.empty? check_array(images, "Request body should contains an array with strings") - create_response("Updated", {:images => Devops::API2_0::Handler::Filter.new(provider).add_images(images)}) + create_response("Updated", {:images => Devops::API2_0::Handler::Filter.new(request, params).add_images(images, provider)}) } # Delete image ids from filter for :provider @@ -68,14 +66,13 @@ module Devops # ] -> array of image ids to delete from filter # # * *Returns* : list of images filters for :provider - hash["DELETE"] = lambda {#Devops::API2_0::Handler::Filter.delete_filter + hash["DELETE"] = lambda { |provider| check_privileges("filter", "w") - provider = params[:provider] check_provider(provider) images = create_object_from_json_body(Array) halt_response("Request body should not be an empty array") if images.empty? check_array(images, "Request body should contains an array with strings") - create_response("Deleted", {:images => Devops::API2_0::Handler::Filter.new(provider).delete_images(images)}) + create_response("Deleted", {:images => Devops::API2_0::Handler::Filter.new(request, params).delete_images(images, provider)}) } app.multi_routes "/filter/:provider/image", {:headers => [:accept, :content_type]}, hash diff --git a/devops-service/app/api2/routes/stack.rb b/devops-service/app/api2/routes/stack.rb index 70c3364..05c9ce6 100644 --- a/devops-service/app/api2/routes/stack.rb +++ b/devops-service/app/api2/routes/stack.rb @@ -1,26 +1,42 @@ module Devops - module Version2_0 + module API2_0 module Routes module StackRoutes def self.registered(app) - app.after %r{\A/stack_template(/[\w]+)?\z} do - statistic + + app.get_with_headers '/stacks', :headers => [:accept] do + check_privileges("stack", "r") + json Devops::API2_0::Handler::Stack.new(request, params).stacks.map(&:to_hash) end - app.get_with_headers '/stacks', :headers => [:accept], &Devops::Version2_0::Handler::Stack.get_stacks + app.get_with_headers '/stacks/provider/:provider', :headers => [:accept] do |provider| + check_privileges("stack", "r") + check_provider(provider) + json Devops::API2_0::Handler::Stack.new(request, params).stacks_for_provider.map(&:to_hash) + end - app.get_with_headers '/stacks/provider/:provider', :headers => [:accept], &Devops::Version2_0::Handler::Stack.get_stacks_for_provider - - app.post_with_headers "/stack", :headers => [:accept], &Devops::Version2_0::Handler::Stack.create_stack + app.post_with_headers "/stack", :headers => [:accept] do + check_privileges("stack", "w") + object = create_object_from_json_body + m = Devops::API2_0::Handler::Stack.new(request, params).create_stack object + create_response "Created", m.to_hash, 201 + end hash = {} - hash['GET'] = Devops::Version2_0::Handler::Stack.get_stack + hash['GET'] = lambda { |stack_id| + check_privileges("stack", "r") + json Devops::API2_0::Handler::Stack.new(request, params).stack(stack_id).to_hash + } - hash['DELETE'] = Devops::Version2_0::Handler::Stack.delete_stack + hash['DELETE'] = lambda { |stack_id| + check_privileges("stack", "w") + Devops::API2_0::Handler::Stack.new(request, params).delete_stack(stack_id) + create_response("Stack '#{stack_id}' has been removed") + } - app.multi_routes '/stack/:stack_id', {}, hash + app.multi_routes '/stack/:stack_id', {:headers => [:accept]}, hash puts "Stack routes initialized" end @@ -28,4 +44,4 @@ module Devops end end end -end \ No newline at end of file +end diff --git a/devops-service/app/api2/routes/stack_template.rb b/devops-service/app/api2/routes/stack_template.rb index abf5488..322132d 100644 --- a/devops-service/app/api2/routes/stack_template.rb +++ b/devops-service/app/api2/routes/stack_template.rb @@ -1,24 +1,39 @@ module Devops - module Version2_0 + module API2_0 module Routes module StackTemplateRoutes def self.registered(app) - app.after %r{\A/stack_template(/[\w]+)?\z} do - statistic + app.get_with_headers '/stack_templates', :headers => [:accept] do + check_privileges('stack_template', 'r') + json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_templates.map(&:to_hash) end - app.get_with_headers '/stack_templates', :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.get_stack_templates + app.get_with_headers '/stack_templates/provider/:provider', :headers => [:accept] do |provider| + check_privileges('stack_template', 'r') + check_provider(provider) + json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_templates_for_provider(provider).map(&:to_hash) + end - app.get_with_headers '/stack_templates/provider/:provider', :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.get_stack_templates_for_provider - - app.post_with_headers "/stack_template", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.create_stack_template + app.post_with_headers "/stack_template", :headers => [:accept] do + check_privileges('stack_template', 'w') + body = create_object_from_json_body + model = Devops::API2_0::Handler::StackTemplate.new(request, params).create_stack_template(body) + create_response 'Created', model.to_hash, 201 + end hash = {} - hash['GET'] = Devops::Version2_0::Handler::StackTemplate.get_stack_template + hash['GET'] = lambda {|stack_template_id| + check_privileges('stack_template', 'r') + json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_template(stack_template_id).to_hash + } - hash['DELETE'] = Devops::Version2_0::Handler::StackTemplate.delete_stack_template + hash['DELETE'] = lambda {|stack_template_id| + check_privileges('stack_template', 'w') + Devops::API2_0::Handler::StackTemplate.new(request, params).delete_stack_template(stack_template_id) + create_response("Template '#{stack_template_id}' has been removed") + } app.multi_routes '/stack_template/:stack_template_id', {}, hash @@ -28,4 +43,4 @@ module Devops end end end -end \ No newline at end of file +end diff --git a/devops-service/app/api2/routes/stack_template_presets.rb b/devops-service/app/api2/routes/stack_template_presets.rb index 8cdb70d..1cf8b30 100644 --- a/devops-service/app/api2/routes/stack_template_presets.rb +++ b/devops-service/app/api2/routes/stack_template_presets.rb @@ -1,5 +1,5 @@ module Devops - module Version2_0 + module API2_0 module Routes module StackTemplatePresetRoutes @@ -14,8 +14,10 @@ module Devops # * *Returns* : array of hashes # [ {id: 'preset id', template_preset_body: 'long body'} ] # - app.get_with_headers "/stack_template_presets", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.get_presets - + app.get_with_headers "/stack_template_presets", :headers => [:accept] do + # check_privileges("stack_template_presets", "r") + json Devops::API2_0::Handler::StackTemplatePreset.new(request, params).templates.map(&:to_hash) + end # Get information about stack_template_preset # @@ -27,8 +29,10 @@ module Devops # * *Returns* : hash # {id: 'preset id', template_preset_body: 'long body'} # - app.get_with_headers "/stack_template_presets/:id", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.get_preset - + app.get_with_headers "/stack_template_presets/:id", :headers => [:accept] do |id| + # check_privileges("stack_template_presets", "r") + json Devops::API2_0::Handler::StackTemplatePreset.new(request, params).template(id).to_hash + end # Build stack template from preset # @@ -50,7 +54,13 @@ module Devops # template_body: 'long body' # } # - app.post_with_headers "/stack_template_presets/:id/build_stack_template", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.build_stack_template + app.post_with_headers "/stack_template_presets/:id/build_stack_template", :headers => [:accept] do |id| + # check_privileges("stack_template_presets", "r") + check_privileges('stack_template', 'w') + body = create_object_from_json_body + stack = Devops::API2_0::Handler::StackTemplatePreset.new(request, params).build_stack_template(id, body) + create_response 'Created', stack.to_hash, 201 + end puts "Stack template presets routes initialized" end diff --git a/devops-service/app/devops-api2.rb b/devops-service/app/devops-api2.rb index 954d0bf..4587ec6 100644 --- a/devops-service/app/devops-api2.rb +++ b/devops-service/app/devops-api2.rb @@ -11,6 +11,10 @@ module Devops require_relative "api2/handlers/report" require_relative "api2/handlers/deploy" require_relative "api2/handlers/script" + + require_relative "api2/handlers/stack" + require_relative "api2/handlers/stack_template" + require_relative "api2/handlers/stack_template_preset" =begin require "routes/v2.0/handlers/bootstrap_templates" require "routes/v2.0/handlers/image" @@ -19,9 +23,6 @@ module Devops require "routes/v2.0/handlers/project" require "routes/v2.0/handlers/tag" require "routes/v2.0/handlers/server" - require "routes/v2.0/handlers/stack" - require "routes/v2.0/handlers/stack_template" - require_relative "api2/routes/handlers/stack_template_preset" =end require 'lib/stubber' diff --git a/devops-service/core/devops-config.rb b/devops-service/core/devops-config.rb index 53b0c13..b40466d 100644 --- a/devops-service/core/devops-config.rb +++ b/devops-service/core/devops-config.rb @@ -9,7 +9,7 @@ class DevopsConfig class << self def read config_file=nil if config_file.nil? - config_file = ENV['DEVOPS_CONFIG'] || ENV['CONFIG'] || File.join(File.dirname(__FILE__), 'config.rb') + config_file = ENV['DEVOPS_CONFIG'] || ENV['CONFIG'] || File.join(File.dirname(__FILE__), '../config.rb') end config = {:url_prefix => ""} if File.exists? config_file diff --git a/devops-service/db/mongo/models/report.rb b/devops-service/db/mongo/models/report.rb index b4971f7..6f03795 100644 --- a/devops-service/db/mongo/models/report.rb +++ b/devops-service/db/mongo/models/report.rb @@ -1,4 +1,3 @@ -require "db/exceptions/invalid_record" require "db/mongo/models/mongo_model" module Devops diff --git a/devops-service/db/mongo/models/server.rb b/devops-service/db/mongo/models/server.rb index ea93ea7..96a7c6e 100644 --- a/devops-service/db/mongo/models/server.rb +++ b/devops-service/db/mongo/models/server.rb @@ -1,4 +1,3 @@ -require "db/exceptions/invalid_record" require "db/mongo/models/mongo_model" module Devops