remove unused stack_presets functionality
This commit is contained in:
		
							parent
							
								
									7745686ab4
								
							
						
					
					
						commit
						f5e3dbd679
					
				| @ -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 | ||||
|  | ||||
| @ -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 | ||||
| @ -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 | ||||
| @ -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 | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| 
 | ||||
| @ -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 | ||||
| @ -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" | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
| @ -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 | ||||
| @ -1,7 +0,0 @@ | ||||
| module Devops::StackPresets | ||||
|   class PostgresCluster < Base | ||||
|     def template_file_extension | ||||
|       :yml | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @ -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 | ||||
| @ -1,3 +0,0 @@ | ||||
| class PresetNotFound < StandardError | ||||
| 
 | ||||
| end | ||||
| @ -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", | ||||
|  | ||||
| @ -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" | ||||
|     } | ||||
|     """ | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Anton Chuchkalov
						Anton Chuchkalov