2015-06-17 22:37:08 +03:00
|
|
|
require 'lib/string_helper'
|
2015-06-18 17:53:03 +03:00
|
|
|
require 'db/mongo/models/stack_template/stack_template_factory'
|
2015-06-17 22:37:08 +03:00
|
|
|
|
|
|
|
|
module Devops
|
2015-07-15 19:21:23 +03:00
|
|
|
module StackPresets
|
2015-06-17 22:37:08 +03:00
|
|
|
class Base
|
|
|
|
|
|
|
|
|
|
def id
|
|
|
|
|
StringHelper.underscore_class(self.class)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def to_hash
|
2015-07-13 20:26:13 +03:00
|
|
|
{id: id, template_body: template_body}
|
2015-06-17 22:37:08 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-08 18:42:36 +03:00
|
|
|
def create_stack_from_preset(provider, stack_id, parameters)
|
2015-07-15 16:25:06 +03:00
|
|
|
template_name = find_or_create_stack_template!(provider)
|
|
|
|
|
puts "Using #{template_name} stack_template to create new stack"
|
2015-07-13 20:26:13 +03:00
|
|
|
Model::StackFactory.create(provider, {
|
2015-07-08 18:42:36 +03:00
|
|
|
'id' => stack_id,
|
2015-06-22 13:51:04 +03:00
|
|
|
'provider' => provider,
|
2015-07-08 18:42:36 +03:00
|
|
|
'parameters' => parameters,
|
2015-07-15 16:25:06 +03:00
|
|
|
'stack_template' => template_name
|
2015-07-13 20:26:13 +03:00
|
|
|
})
|
2015-06-18 17:53:03 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-13 20:26:13 +03:00
|
|
|
def template_body
|
2015-07-15 19:21:23 +03:00
|
|
|
@template_body ||= File.read("lib/stack_presets/#{id}.#{template_file_extension}")
|
2015-06-18 17:53:03 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# some templates may be YAML files
|
|
|
|
|
def template_file_extension
|
|
|
|
|
:json
|
2015-06-17 22:37:08 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-13 20:26:13 +03:00
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def find_or_create_stack_template!(provider)
|
|
|
|
|
name = stack_template_name(provider)
|
|
|
|
|
begin
|
2015-07-15 16:25:06 +03:00
|
|
|
stack_template = Devops::Api2.settings.mongo.stack_template(name)
|
|
|
|
|
update_stack_template(stack_template) if stack_template.template_body != template_body
|
2015-07-13 20:26:13 +03:00
|
|
|
rescue RecordNotFound
|
2015-07-15 16:25:06 +03:00
|
|
|
create_stack_template(provider)
|
2015-07-13 20:26:13 +03:00
|
|
|
end
|
2015-07-15 16:25:06 +03:00
|
|
|
name
|
2015-07-13 20:26:13 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def stack_template_name(provider)
|
|
|
|
|
"#{id}_#{provider}_preset"
|
|
|
|
|
end
|
|
|
|
|
|
2015-07-15 16:25:06 +03:00
|
|
|
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
|
|
|
|
|
|
2015-06-17 22:37:08 +03:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|