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