current progress
This commit is contained in:
parent
3c8f5258d0
commit
a72fc782a3
@ -2,14 +2,13 @@ module Devops
|
||||
module Model
|
||||
class StackBase < MongoModel
|
||||
|
||||
attr_accessor :id, :project, :deploy_env, :stack_template, :cloud_stack_id, :provider, :parameters, :template_body
|
||||
attr_accessor :id, :project, :deploy_env, :stack_template, :cloud_stack_id, :provider, :parameters
|
||||
|
||||
types id: {type: String, empty: false},
|
||||
provider: {type: String, empty: false},
|
||||
project: {type: String, empty: true},
|
||||
deploy_env: {type: String, empty: true},
|
||||
stack_template: {type: String, empty: true},
|
||||
template_body: {type: String, empty: true}
|
||||
project: {type: String, nil: true},
|
||||
deploy_env: {type: String, nil: true},
|
||||
stack_template: {type: String, empty: false}
|
||||
# cloud_stack_id: {type: String, empty: true}
|
||||
# TODO: add parameters Hash
|
||||
|
||||
@ -19,7 +18,6 @@ module Devops
|
||||
self.project = attrs['project']
|
||||
self.deploy_env = attrs['deploy_env']
|
||||
self.stack_template = attrs['stack_template']
|
||||
self.template_body = attrs['template_body']
|
||||
# self.cloud_stack_id = attrs['cloud_stack_id']
|
||||
self.parameters = attrs['parameters']
|
||||
self
|
||||
@ -61,11 +59,8 @@ module Devops
|
||||
raise 'override me'
|
||||
end
|
||||
|
||||
# if not set in constructor, assume stack was created via stack_template.
|
||||
# It is need to support presets.
|
||||
# TODO: refactore it.
|
||||
def template_body
|
||||
@template_body ||= Devops::Api2.settings.mongo.stack_template(stack_template).template_body
|
||||
Devops::Api2.settings.mongo.stack_template(stack_template).template_body
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -10,20 +10,20 @@ module Devops
|
||||
end
|
||||
|
||||
def to_hash
|
||||
{id: id, template_preset_body: template_preset_body}
|
||||
{id: id, template_body: template_body}
|
||||
end
|
||||
|
||||
def create_stack_from_preset(provider, stack_id, parameters)
|
||||
stack_attrs = {
|
||||
find_or_create_stack_template!(provider)
|
||||
Model::StackFactory.create(provider, {
|
||||
'id' => stack_id,
|
||||
'provider' => provider,
|
||||
'parameters' => parameters,
|
||||
'template_body' => template_preset_body
|
||||
}
|
||||
Model::StackFactory.create(provider, stack_attrs)
|
||||
'stack_template' => stack_template_name(provider)
|
||||
})
|
||||
end
|
||||
|
||||
def template_preset_body
|
||||
def template_body
|
||||
file_name = File.join("lib/stack_template_presets/#{id}.#{template_file_extension}")
|
||||
File.read(file_name)
|
||||
end
|
||||
@ -33,6 +33,26 @@ module Devops
|
||||
:json
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_or_create_stack_template!(provider)
|
||||
name = stack_template_name(provider)
|
||||
begin
|
||||
Devops::Api2.settings.mongo.stack_template(name)
|
||||
rescue RecordNotFound
|
||||
template = Model::StackTemplateFactory.create(provider, {
|
||||
'id' => name,
|
||||
'provider' => provider,
|
||||
'template_body' => template_body
|
||||
})
|
||||
Devops::Api2.settings.mongo.stack_template_insert(template)
|
||||
end
|
||||
end
|
||||
|
||||
def stack_template_name(provider)
|
||||
"#{id}_#{provider}_preset"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -193,11 +193,13 @@ module Provider
|
||||
|
||||
def create_stack(stack)
|
||||
begin
|
||||
response = orchestration.create_stack(stack.id, {
|
||||
response = orchestration.create_stack(
|
||||
stack_name: stack.id,
|
||||
template: stack.template_body,
|
||||
tenant_id: connection_options[:openstack_tenant],
|
||||
parameters: stack.parameters
|
||||
})
|
||||
)
|
||||
# byebug
|
||||
response[:body]['stack']['id']
|
||||
rescue Excon::Errors::Conflict => e
|
||||
raise ProviderErrors::NameConflict
|
||||
|
||||
@ -28,8 +28,8 @@ module Devops
|
||||
|
||||
attrs = create_object_from_json_body
|
||||
template_model = Model::StackTemplateFactory.create(attrs['provider'], attrs)
|
||||
|
||||
settings.mongo.stack_template_insert(template_model)
|
||||
|
||||
create_response 'Created', template_model.to_hash, 201
|
||||
}
|
||||
end
|
||||
|
||||
@ -31,6 +31,7 @@ module Devops
|
||||
|
||||
preset = Devops::StackTemplatePresetsFactory.get(attrs.fetch('id'))
|
||||
stack = preset.create_stack_from_preset(provider, stack_id, parameters)
|
||||
settings.mongo.stack_insert(stack)
|
||||
|
||||
create_response 'Created', stack.to_hash, 201
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user