fluke/devops-service/lib/stack_presets/base.rb

75 lines
1.9 KiB
Ruby
Raw Normal View History

require 'db/mongo/models/stack_template/stack_template_factory'
module Devops
module StackPresets
class Base
def id
self.class.to_s.underscore_class
end
def to_hash
2015-07-13 20:26:13 +03:00
{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')
2015-07-15 16:25:06 +03:00
template_name = find_or_create_stack_template!(provider)
stack_attrs = attrs.merge(
'id' => attrs['stack'],
2015-07-15 16:25:06 +03:00
'stack_template' => template_name
)
Model::StackFactory.create(provider, stack_attrs)
end
2015-07-13 20:26:13 +03:00
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
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
end
end
end