diff --git a/devops-service/lib/stack_template_presets/base.rb b/devops-service/lib/stack_template_presets/base.rb index fa0917a..784a0ab 100644 --- a/devops-service/lib/stack_template_presets/base.rb +++ b/devops-service/lib/stack_template_presets/base.rb @@ -1,4 +1,5 @@ require 'lib/string_helper' +require 'db/mongo/models/stack_template/stack_template_factory' module Devops module StackTemplatePresets @@ -12,13 +13,59 @@ module Devops {id: id, template_preset_body: template_preset_body} end - def template_preset_body - file_name = File.join("lib/stack_template_presets/#{id}.json") - File.read(file_name) + def build_template_from_preset(provider, stack_template_id, template_attrs) + stack_template_attrs = { + id: stack_template_id, + provider: provider, + template_body: serialize(actual_template_hash(template_preset_hash, template_attrs)) + } + template_model = Model::StackTemplateFactory.create(provider, stack_template_attrs) end - def build_template_from_preset(provider, options={}) - # do smth + def template_preset_body + @template_preset_body ||= begin + file_name = File.join("lib/stack_template_presets/#{id}.#{template_file_extension}") + File.read(file_name) + end + end + + + private + + def template_preset_hash + unserialize(template_preset_body) + end + + def actual_template_hash(template_preset_hash, params) + + end + + # some templates may be YAML files + def template_file_extension + serialization_strategy.to_s + end + + # some templates may be YAML files + def serialize(hash) + case serialization_strategy + when :json + hash.to_json + else + raise + end + end + + def unserialize(text) + case serialization_strategy + when :json + JSON.parse(text) + else + raise + end + end + + def serialization_strategy + :json end end diff --git a/devops-service/routes/v2.0/handlers/stack_template_preset.rb b/devops-service/routes/v2.0/handlers/stack_template_preset.rb index d4a508b..a519a77 100644 --- a/devops-service/routes/v2.0/handlers/stack_template_preset.rb +++ b/devops-service/routes/v2.0/handlers/stack_template_preset.rb @@ -20,6 +20,21 @@ module Devops } end + def build_stack_template + lamda { + # check_privileges("stack_template_presets", "r") + check_privileges('stack_template', 'w') + + attrs = create_object_from_json_body + provider = attrs.delete('provider') + stack_template_id = attrs.delete('stack_template_id') + stack_template = build_template_from_preset(provider, stack_template_id, attrs) + + settings.mongo.stack_template_insert(template_model) + create_response 'Created', template_model.to_hash, 201 + } + end + end end end diff --git a/devops-service/routes/v2.0/stack_template_presets.rb b/devops-service/routes/v2.0/stack_template_presets.rb index 4bb473d..06e4af2 100644 --- a/devops-service/routes/v2.0/stack_template_presets.rb +++ b/devops-service/routes/v2.0/stack_template_presets.rb @@ -29,6 +29,27 @@ module Devops # app.get_with_headers "/stack_template_presets/:id", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.get_preset + + # 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 + # + # * *Returns* : created stack template model + # { + # id: 'template id', + # provider: 'provider', + # 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 + puts "Stack template presets routes initialized" end