current progress

This commit is contained in:
Anton Chuchkalov 2015-07-13 21:26:13 +04:00
parent 3c8f5258d0
commit a72fc782a3
5 changed files with 37 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}