From 25ef0bd3b5859ca33ae0b0ccfca5114ad388c788 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Wed, 13 Jan 2016 13:06:11 +0300 Subject: [PATCH 1/4] fix minor bug in client --- devops-client/lib/devops-client/handler/image.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/devops-client/lib/devops-client/handler/image.rb b/devops-client/lib/devops-client/handler/image.rb index 3ee06d0..9fdc0d0 100644 --- a/devops-client/lib/devops-client/handler/image.rb +++ b/devops-client/lib/devops-client/handler/image.rb @@ -15,7 +15,6 @@ class Image < Handler end def handle - current_command = ARGV[1].to_sym @options, @args = @options_parser.parse_options_for!(current_command) case current_command when :list From a1d987d7e18e84421e18fabf1b925bff83affb85 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 14 Jan 2016 14:17:19 +0300 Subject: [PATCH 2/4] fix project creating bug --- devops-service/providers/ec2.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/providers/ec2.rb b/devops-service/providers/ec2.rb index dbb5d6b..609186b 100644 --- a/devops-service/providers/ec2.rb +++ b/devops-service/providers/ec2.rb @@ -56,7 +56,7 @@ module Provider end def groups filters={} - g = self.compute.describe_security_groups(filters) + g = self.compute.describe_security_groups(filters || {}) convert_groups(g.body["securityGroupInfo"]) end From 1aed2cf1c9efe26db134e7b493ff5a2fa9072961 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 14 Jan 2016 14:59:44 +0300 Subject: [PATCH 3/4] fix constant name --- devops-service/db/validators/base.rb | 1 + .../db/validators/field_validators/provider_account.rb | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/devops-service/db/validators/base.rb b/devops-service/db/validators/base.rb index 6e3b488..0cb68f9 100644 --- a/devops-service/db/validators/base.rb +++ b/devops-service/db/validators/base.rb @@ -9,6 +9,7 @@ module Validators def validate! raise InvalidRecord.new(message) unless valid? rescue StandardError => e + puts [e.message, e.backtrace].join("\n") raise InvalidRecord.new("An error raised during validation with #{self.class}: #{e.class}: #{e.message}") end diff --git a/devops-service/db/validators/field_validators/provider_account.rb b/devops-service/db/validators/field_validators/provider_account.rb index 3d56074..bd72486 100644 --- a/devops-service/db/validators/field_validators/provider_account.rb +++ b/devops-service/db/validators/field_validators/provider_account.rb @@ -1,11 +1,12 @@ require_relative "base" + module Validators module FieldValidator class ProviderAccount < Base def valid? - accounts = AccountsFactory.accounts(@model.provider) + accounts = ::Provider::AccountsFactory.accounts(@model.provider) accounts.map{|a| a.account_name}.include?(@value) end From f5e3dbd67996dac0b396c0e32c9ff71382c11379 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 21 Jan 2016 19:39:14 +0300 Subject: [PATCH 4/4] remove unused stack_presets functionality --- .../devops-client/handler/handler_factory.rb | 3 - .../lib/devops-client/handler/stack_preset.rb | 62 --------------- .../options/stack_preset_options.rb | 37 --------- .../lib/devops-client/output/stack_preset.rb | 45 ----------- devops-client/locales/en.yml | 15 ---- .../app/api2/handlers/stack_preset.rb | 43 ----------- .../app/api2/parsers/stack_preset.rb | 16 ---- .../app/api2/routes/stack_presets.rb | 70 ----------------- devops-service/app/devops-api2.rb | 2 - devops-service/lib/stack_presets/base.rb | 76 ------------------- devops-service/lib/stack_presets/factory.rb | 23 ------ .../lib/stack_presets/postgres_cluster.rb | 7 -- .../lib/stack_presets/postgres_cluster.yml | 19 ----- .../lib/stack_presets/preset_not_found.rb | 3 - devops-service/tests/generate_tests.rb | 1 - .../api_v2/00_list/stack_preset.feature.erb | 28 ------- 16 files changed, 450 deletions(-) delete mode 100644 devops-client/lib/devops-client/handler/stack_preset.rb delete mode 100644 devops-client/lib/devops-client/options/stack_preset_options.rb delete mode 100644 devops-client/lib/devops-client/output/stack_preset.rb delete mode 100644 devops-service/app/api2/handlers/stack_preset.rb delete mode 100644 devops-service/app/api2/parsers/stack_preset.rb delete mode 100644 devops-service/app/api2/routes/stack_presets.rb delete mode 100644 devops-service/lib/stack_presets/base.rb delete mode 100644 devops-service/lib/stack_presets/factory.rb delete mode 100644 devops-service/lib/stack_presets/postgres_cluster.rb delete mode 100644 devops-service/lib/stack_presets/postgres_cluster.yml delete mode 100644 devops-service/lib/stack_presets/preset_not_found.rb delete mode 100644 devops-service/tests/templates/api_v2/00_list/stack_preset.feature.erb diff --git a/devops-client/lib/devops-client/handler/handler_factory.rb b/devops-client/lib/devops-client/handler/handler_factory.rb index c5b7898..03ac0a4 100644 --- a/devops-client/lib/devops-client/handler/handler_factory.rb +++ b/devops-client/lib/devops-client/handler/handler_factory.rb @@ -47,9 +47,6 @@ class HandlerFactory when "stack_template" require "devops-client/handler/stack_template" StackTemplate - when "stack_preset" - require "devops-client/handler/stack_preset" - StackPreset when "stack" require "devops-client/handler/stack" Stack diff --git a/devops-client/lib/devops-client/handler/stack_preset.rb b/devops-client/lib/devops-client/handler/stack_preset.rb deleted file mode 100644 index b1e9073..0000000 --- a/devops-client/lib/devops-client/handler/stack_preset.rb +++ /dev/null @@ -1,62 +0,0 @@ -require "devops-client/handler/handler" -require "devops-client/options/stack_preset_options" -require "devops-client/output/stack_preset" - -class StackPreset < Handler - - output_with Output::StackPreset - - def initialize(host, def_options={}) - @host, @options = host, def_options - @options_parser = StackPresetOptions.new(ARGV, def_options) - end - - def handle - @options, @args = @options_parser.parse_options_for!(current_command) - case current_command - when :list - list_handler - output - when :show - show_handler - output - when :apply - apply_handler - output - end - end - - def show_handler - wrong_params = inspect_parameters(@options_parser.show_params, @args[2]) - if wrong_params - @options_parser.invalid_show_command - abort(wrong_params) - end - @show = get "/stack_presets/#{@args[2]}" - end - - def list_handler - @list = get('/stack_presets') - end - - def apply_handler - wrong_params = inspect_parameters(@options_parser.apply_params, @args[2]) - if wrong_params - @options_parser.invalid_apply_command - abort(wrong_params) - end - - params = {} - params[:id] = @args[2] - params[:provider] = options[:provider] || resources_selector.select_available_provider - params[:stack] = options[:stack] || enter_parameter(I18n.t('handler.stack_preset.create.stack')) - params[:project] = options[:project] || resources_selector.select_available_project - params[:deploy_env] = options[:deploy_env] || enter_parameter(I18n.t('handler.stack.create.deploy_env')) - - filepath = options[:parameters_file] || enter_parameter(I18n.t('handler.stack_preset.create.parameters_file')) - params[:parameters] = JSON.parse(File.read(filepath)) - - @list = post_body("/stack_presets/#{params[:id]}/apply", JSON.pretty_generate(params)) - end - -end diff --git a/devops-client/lib/devops-client/options/stack_preset_options.rb b/devops-client/lib/devops-client/options/stack_preset_options.rb deleted file mode 100644 index 5aa4d62..0000000 --- a/devops-client/lib/devops-client/options/stack_preset_options.rb +++ /dev/null @@ -1,37 +0,0 @@ -require "devops-client/options/common_options" - -class StackPresetOptions < CommonOptions - - commands :list, :show, :apply - - def initialize args, def_options - super(args, def_options) - self.header = I18n.t("headers.stack_preset") - self.banner_header = "stack_preset" - self.list_params = ["[provider]", "[ec2|openstack]"] - self.show_params = ["STACK"] - self.apply_params = ["PRESET"] - end - - def apply_options - self.options do |parser, options| - parser.banner << self.apply_banner - - parser.recognize_option_value(:provider, 'stack_preset') - parser.recognize_option_value(:project, 'stack_preset') - parser.recognize_option_value(:deploy_env, 'stack_preset') - parser.recognize_option_value(:stack, 'stack_preset') - parser.recognize_option_value(:project, 'stack_preset') - parser.recognize_option_value(:deploy_env, 'stack_preset') - parser.recognize_option_value(:parameters_file, 'stack_preset') - end - end - - - extend_options_method :list_options do |options| - if args[2] - options[:given_provider] = args[2] - end - end - -end diff --git a/devops-client/lib/devops-client/output/stack_preset.rb b/devops-client/lib/devops-client/output/stack_preset.rb deleted file mode 100644 index 76c9909..0000000 --- a/devops-client/lib/devops-client/output/stack_preset.rb +++ /dev/null @@ -1,45 +0,0 @@ -require "devops-client/output/base" - -module Output - class StackPreset < Base - - def table - if outputting_list? - title = I18n.t("output.title.stack_preset.list") - headers, rows = create_list - else - title = I18n.t("output.title.stack.show", id: @data["id"]) - headers, rows = create_apply - end - create_table headers, rows, title, with_num? - end - - def csv - if outputting_list? - headers, rows = create_list - else - headers, rows = create_show - end - create_csv headers, rows, with_num? - end - - def json - JSON.pretty_generate(@data) - end - - private - - def create_list - abort(I18n.t("output.not_found.stack_preset.list")) if @data.empty? - - fields_to_output = %w(id) - - headers_and_rows(@data, fields_to_output) - end - - def create_apply - headers_and_rows([@data], %w(id deploy_env stack_template cloud_stack_id stack_status)) - end - - end -end diff --git a/devops-client/locales/en.yml b/devops-client/locales/en.yml index 58f1d9f..34c0f01 100644 --- a/devops-client/locales/en.yml +++ b/devops-client/locales/en.yml @@ -43,7 +43,6 @@ en: user: "User" stack: "Stack" stack_template: "Stack template" - stack_preset: "Stack template preset" handler: flavor: list: @@ -119,10 +118,6 @@ en: question: create: "Are you sure to create stack?" delete: "Are you sure to delete stack '%{name}'?" - stack_preset: - create: - parameters_file: "Path to file with JSON parameters: " - stack: 'Name of stack to create: ' message: choose_list_default: "Choose %{name} (comma separated), like 1,2,3 or empty for default value '%{default}': " choose_list: "Choose %{name} (comma separated), like 1,2,3: " @@ -236,9 +231,6 @@ en: stack_template: list: "Stack Templates" show: "Stack Template" - stack_preset: - list: "Stack Template Presets" - show: "Stack Template Preset" stack: list: "Stacks" show: "Stack" @@ -274,9 +266,6 @@ en: stack_template: list: "No stack templates found" show: "There isn't such stack template" - stack_preset: - list: "No stack template presets found" - show: "There isn't such stack template preset" stack: list: "No stacks found" show: "There isn't such stack" @@ -382,9 +371,5 @@ en: provider: Stack template provider id: Stack template id template_file: Stack template file - stack_preset: - parameters_file: Path to file with JSON parameters - stack: 'Name of stack to build: ' - provider: Stack provider user: new_password: New user password diff --git a/devops-service/app/api2/handlers/stack_preset.rb b/devops-service/app/api2/handlers/stack_preset.rb deleted file mode 100644 index f812f9f..0000000 --- a/devops-service/app/api2/handlers/stack_preset.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'json' -require 'lib/stack_presets/factory' -require 'workers/stack_bootstrap_worker' -require "app/api2/parsers/stack_preset" -require_relative "request_handler" - -module Devops - module API2_0 - module Handler - class StackPreset < RequestHandler - - set_parser Devops::API2_0::Parser::StackPresetParser - - def presets - Devops::StackPresetsFactory.list - end - - def preset id - Devops::StackPresetsFactory.get(id) - end - - def apply id - body = parser.apply - preset = Devops::StackPresetsFactory.get(id) - stack = preset.create_stack_from_preset(body) - stack.owner = owner_from_request - Devops::Db.connector.stack_insert(stack) - - file = JobStarter.start_job(:worker, :stack_bootstrap, - provider: stack.provider, - stack_id: stack.id, - request: @request - ) - puts "Syncing report is located here: #{file}" - - stack - end - - end - end - end -end - diff --git a/devops-service/app/api2/parsers/stack_preset.rb b/devops-service/app/api2/parsers/stack_preset.rb deleted file mode 100644 index 6c921ff..0000000 --- a/devops-service/app/api2/parsers/stack_preset.rb +++ /dev/null @@ -1,16 +0,0 @@ -require_relative "request_parser" - -module Devops - module API2_0 - module Parser - class StackPresetParser < RequestParser - - def apply - create_object_from_json_body - end - - end - end - end -end - diff --git a/devops-service/app/api2/routes/stack_presets.rb b/devops-service/app/api2/routes/stack_presets.rb deleted file mode 100644 index 2619f6b..0000000 --- a/devops-service/app/api2/routes/stack_presets.rb +++ /dev/null @@ -1,70 +0,0 @@ -module Devops - module API2_0 - module Routes - module StackPresetRoutes - - def self.registered(app) - # Get list of available stack_template_presets - # - # * *Request* - # - method : GET - # - headers : - # - Accept: application/json - # - # * *Returns* : array of hashes - # [ {id: 'preset id', template_preset_body: 'long body'} ] - # - app.get_with_headers "/stack_presets", :headers => [:accept] do - # check_privileges("stack_template_presets", "r") - json Devops::API2_0::Handler::StackPreset.new(request).presets.map(&:to_hash) - end - - # Get information about stack_template_preset - # - # * *Request* - # - method : GET - # - headers : - # - Accept: application/json - # - # * *Returns* : hash - # {id: 'preset id', template_preset_body: 'long body'} - # - app.get_with_headers "/stack_presets/:id", :headers => [:accept] do |id| - # check_privileges("stack_template_presets", "r") - json Devops::API2_0::Handler::StackPreset.new(request).preset(id).to_hash - end - - # Build stack template from preset - # - # * *Request* - # - method : POST - # - headers : - # - Accept: application/json - # - params : - # - provider: string - # - stack_template_id: id of stack template to create - # - template_attrs: hash with template attributes - # - # TODO: not stack template, but stack itself - # - # * *Returns* : created stack template model - # { - # id: 'template id', - # provider: 'provider', - # template_body: 'long body' - # } - # - app.post_with_headers "/stack_presets/:id/apply", :headers => [:accept] do |id| - # check_privileges("stack_template_presets", "r") - check_privileges('stack_template', 'w') - stack = Devops::API2_0::Handler::StackPreset.new(request).apply(id) - create_response 'Created', stack.to_hash, 201 - end - - puts "Stack template presets routes initialized" - end - - end - end - end -end diff --git a/devops-service/app/devops-api2.rb b/devops-service/app/devops-api2.rb index 5e650de..37ba7ac 100644 --- a/devops-service/app/devops-api2.rb +++ b/devops-service/app/devops-api2.rb @@ -22,7 +22,6 @@ module Devops require_relative "api2/handlers/stack" require_relative "api2/handlers/stack_template" - require_relative "api2/handlers/stack_preset" require 'lib/stubber' end @@ -69,7 +68,6 @@ module Devops 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" diff --git a/devops-service/lib/stack_presets/base.rb b/devops-service/lib/stack_presets/base.rb deleted file mode 100644 index ae09ac7..0000000 --- a/devops-service/lib/stack_presets/base.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'lib/string_helper' -require 'db/mongo/models/stack_template/stack_template_factory' - -module Devops - module StackPresets - class Base - - def id - StringHelper.underscore_class(self.class) - end - - def to_hash - {id: id, template_body: template_body} - end - - # attrs should include - # 'provider' - # 'stack' - # 'parameters' - # 'project' - # 'deploy_env' - def create_stack_from_preset(attrs) - provider = attrs.fetch('provider') - template_name = find_or_create_stack_template!(provider) - - stack_attrs = attrs.merge( - 'id' => attrs['stack'], - 'stack_template' => template_name - ) - - Model::StackFactory.create(provider, stack_attrs) - end - - def template_body - @template_body ||= File.read("lib/stack_presets/#{id}.#{template_file_extension}") - end - - # some templates may be YAML files - def template_file_extension - :json - end - - private - - def find_or_create_stack_template!(provider) - name = stack_template_name(provider) - begin - stack_template = Devops::Api2.settings.mongo.stack_template(name) - update_stack_template(stack_template) if stack_template.template_body != template_body - rescue RecordNotFound - create_stack_template(provider) - end - name - end - - def stack_template_name(provider) - "#{id}_#{provider}_preset" - end - - def create_stack_template(provider) - stack_template = Model::StackTemplateFactory.create(provider, { - 'id' => stack_template_name(provider), - 'provider' => provider, - 'template_body' => template_body - }) - Devops::Api2.settings.mongo.stack_template_insert(stack_template) - end - - def update_stack_template(stack_template) - stack_template.template_body = template_body - Devops::Api2.settings.mongo.stack_template_update(stack_template) - end - - end - end -end \ No newline at end of file diff --git a/devops-service/lib/stack_presets/factory.rb b/devops-service/lib/stack_presets/factory.rb deleted file mode 100644 index 1bb613e..0000000 --- a/devops-service/lib/stack_presets/factory.rb +++ /dev/null @@ -1,23 +0,0 @@ -require_relative 'base' -require_relative 'postgres_cluster' -require_relative 'preset_not_found' - -class Devops::StackPresetsFactory - - # find all classes in Devops::StackPresets modules excluding Base and factory. - # This list can be extended in external gems via defining new classes in Devops::StackPresets module. - def self.list - @list ||= Devops::StackPresets.constants.select do |class_name| - class_name != :Base - end.map do |class_name| - Devops::StackPresets.const_get(class_name).new - end - end - - def self.get(id) - preset = list.detect { |preset| preset.id == id } - raise PresetNotFound, "Preset '#{preset}' not found" unless preset - preset - end - -end \ No newline at end of file diff --git a/devops-service/lib/stack_presets/postgres_cluster.rb b/devops-service/lib/stack_presets/postgres_cluster.rb deleted file mode 100644 index 21f165a..0000000 --- a/devops-service/lib/stack_presets/postgres_cluster.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Devops::StackPresets - class PostgresCluster < Base - def template_file_extension - :yml - end - end -end \ No newline at end of file diff --git a/devops-service/lib/stack_presets/postgres_cluster.yml b/devops-service/lib/stack_presets/postgres_cluster.yml deleted file mode 100644 index 6b8bc1b..0000000 --- a/devops-service/lib/stack_presets/postgres_cluster.yml +++ /dev/null @@ -1,19 +0,0 @@ -heat_template_version: 2013-05-23 - -description: Simple template to deploy a single compute instance - -parameters: - key_name: - type: string - label: Key Name - description: Name of key-pair to be used for compute instance - -resources: - my_instance: - type: OS::Nova::Server - properties: - key_name: { get_param: key_name } - image: 5f4020a1-b6ab-47e4-a0ed-de4324a17c3a - flavor: m1.micro - networks: - - network: devops-net-1 \ No newline at end of file diff --git a/devops-service/lib/stack_presets/preset_not_found.rb b/devops-service/lib/stack_presets/preset_not_found.rb deleted file mode 100644 index 5b28c4d..0000000 --- a/devops-service/lib/stack_presets/preset_not_found.rb +++ /dev/null @@ -1,3 +0,0 @@ -class PresetNotFound < StandardError - -end \ No newline at end of file diff --git a/devops-service/tests/generate_tests.rb b/devops-service/tests/generate_tests.rb index b797fd3..2f8a4da 100755 --- a/devops-service/tests/generate_tests.rb +++ b/devops-service/tests/generate_tests.rb @@ -94,7 +94,6 @@ templates = { #list "templates/api_v2/00_list/flavor.feature.erb" => "features/api_v2/00_list/flavor.feature", - "templates/api_v2/00_list/stack_preset.feature.erb" => "features/api_v2/00_list/stack_preset.feature", "templates/api_v2/00_list/00_network.feature.erb" => "features/api_v2/00_list/00_network.feature", "templates/api_v2/00_list/10_user.feature.erb" => "features/api_v2/00_list/10_user.feature", "templates/api_v2/00_list/10_group.feature.erb" => "features/api_v2/00_list/10_group.feature", diff --git a/devops-service/tests/templates/api_v2/00_list/stack_preset.feature.erb b/devops-service/tests/templates/api_v2/00_list/stack_preset.feature.erb deleted file mode 100644 index f2c2311..0000000 --- a/devops-service/tests/templates/api_v2/00_list/stack_preset.feature.erb +++ /dev/null @@ -1,28 +0,0 @@ -@stack_preset @list -Feature: stack template preset list - - Scenario: Get list of all stack template presets - When I send GET '/v2.0/stack_presets' query - Then response should be '200' - And the Content-Type header should include 'application/json' - And the JSON response should be an array - And response array should contains elements like: - """ - [ - { - "id": "test", - "template_body": "long body" - } - ] - """ - - Scenario: Get information about particular stack template preset - When I send GET '/v2.0/stack_presets/postgres_cluster' query - Then response should be '200' - And the Content-Type header should include 'application/json' - And response should be JSON object like: - """ - { - "id": "postgres_cluster", "template_body": "long body" - } - """