set project and deploy_env attrs to stack created from presets

This commit is contained in:
Anton Chuchkalov 2015-07-16 17:01:53 +04:00
parent 589fc6ff84
commit 58e0f4d118
10 changed files with 51 additions and 19 deletions

View File

@ -79,14 +79,18 @@ class Stack < Handler
end
def resources_handler
stack_id = @args[2]
stack_id, resource_id = @args[2], @args[3]
r = inspect_parameters(@options_parser.sync_params, stack_id)
unless r.nil?
@options_parser.invalid_sync_command
abort(r)
end
if resource_id
@list = get "/stack/#{stack_id}/resources/#{resource_id}"
else
@list = get "/stack/#{stack_id}/resources"
end
end
def delete_handler
stack_id = @args[2]

View File

@ -49,6 +49,8 @@ class StackPreset < Handler
params[:id] = @args[2]
params[:provider] = options[:provider] || resources_selector.select_available_provider
params[:stack] = options[:stack] || enter_parameter(I18n.t('handler.stack_preset.create.stack'))
params[:project] = options[:project] || resources_selector.select_available_project
params[:deploy_env] = options[:deploy_env] || enter_parameter(I18n.t('handler.stack.create.deploy_env'))
filepath = options[:parameters_file] || enter_parameter(I18n.t('handler.stack_preset.create.parameters_file'))
params[:parameters] = JSON.parse(File.read(filepath))

View File

@ -136,7 +136,7 @@ module Devops
def to_hash_without_id
h = {}
h["deploy_envs"] = self.deploy_envs.map {|e| e.to_hash} unless self.deploy_envs.nil?
h["archived"] = self.archived
h["archived"] = self.archived if self.archived
h["description"] = self.description
if self.multi?
h["type"] = MULTI_TYPE

View File

@ -7,8 +7,8 @@ module Devops
types id: {type: String, empty: false},
provider: {type: String, empty: false},
project: {type: String, nil: true},
deploy_env: {type: String, nil: true},
project: {type: String},
deploy_env: {type: String},
stack_template: {type: String, empty: false},
cloud_stack_id: {type: String, nil: true}
# details: {type: String, nil: true}
@ -59,6 +59,10 @@ module Devops
provider_class.stack_resources(self)
end
def resource(resource_id)
provider_class.stack_resource(self, resource_id)
end
def template_body
Devops::Api2.settings.mongo.stack_template(stack_template).template_body
end

View File

@ -13,15 +13,22 @@ module Devops
{id: id, template_body: template_body}
end
def create_stack_from_preset(provider, stack_id, parameters)
# attrs should include
# 'provider'
# 'stack'
# 'parameters'
# 'project'
# 'deploy_env'
def create_stack_from_preset(attrs)
provider = attrs.fetch('provider')
template_name = find_or_create_stack_template!(provider)
puts "Using #{template_name} stack_template to create new stack"
Model::StackFactory.create(provider, {
'id' => stack_id,
'provider' => provider,
'parameters' => parameters,
stack_attrs = attrs.merge(
'id' => attrs['stack'],
'stack_template' => template_name
})
)
Model::StackFactory.create(provider, stack_attrs)
end
def template_body

View File

@ -217,6 +217,10 @@ module Provider
fog_stack(stack).resources
end
def stack_resource(stack, resource_id)
fog_stack(stack).resources.get(resource_id)
end
private
def convert_groups list
res = {}

View File

@ -74,6 +74,14 @@ module Devops
}
end
def self.resource
lambda {
check_privileges("stack", "r")
stack = settings.mongo.stack(params[:stack_id])
json stack.resource(params[:resource_id])
}
end
end
end
end

View File

@ -26,11 +26,8 @@ module Devops
check_privileges('stack_template', 'w')
attrs = create_object_from_json_body
provider, stack_id, parameters = attrs.fetch('provider'), attrs.fetch('stack'), attrs.fetch('parameters')
preset = Devops::StackPresetsFactory.get(attrs.fetch('id'))
stack = preset.create_stack_from_preset(provider, stack_id, parameters)
stack = preset.create_stack_from_preset(attrs)
settings.mongo.stack_insert(stack)
create_response 'Created', stack.to_hash, 201

View File

@ -18,6 +18,8 @@ module Devops
app.get_with_headers "/stack/:stack_id/resources", :headers => [:accept], &Devops::Version2_0::Handler::Stack.resources
app.get_with_headers "/stack/:stack_id/resources/:resource_id", :headers => [:accept], &Devops::Version2_0::Handler::Stack.resource
hash = {}
hash['GET'] = Devops::Version2_0::Handler::Stack.get_stack

View File

@ -71,12 +71,16 @@ class Provider::Openstack
true
end
def stack_details
def stack_details(stack)
{stack_status: 'stubbed'}
end
def stack_resources
['stubbed']
def stack_resources(stack)
[{'stubbed' => 'stubbed'}]
end
def stack_resource(stack, resource_id)
{'stubbed' => 'stubbed'}
end
end