create stack method for ec2
This commit is contained in:
parent
21cfbd8973
commit
ce49f03dd4
@ -16,7 +16,7 @@ module Devops
|
|||||||
json Devops::API2_0::Handler::Stack.new(request).stacks_for_provider(provider).map(&:to_hash)
|
json Devops::API2_0::Handler::Stack.new(request).stacks_for_provider(provider).map(&:to_hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
app.post_with_headers "/stack", :headers => [:accept] do
|
app.post_with_headers "/stack", :headers => [:accept, :content_type] do
|
||||||
check_privileges("stack", "w")
|
check_privileges("stack", "w")
|
||||||
json Devops::API2_0::Handler::Stack.new(request).create_stack
|
json Devops::API2_0::Handler::Stack.new(request).create_stack
|
||||||
#create_response "Created", nil, 201
|
#create_response "Created", nil, 201
|
||||||
|
|||||||
@ -29,5 +29,13 @@ module Provider
|
|||||||
def unset_tags instance_id, tags
|
def unset_tags instance_id, tags
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_default_chef_node_name s
|
||||||
|
"#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_default_stack_name s
|
||||||
|
"stack_#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -157,10 +157,6 @@ module Provider
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_default_chef_node_name s
|
|
||||||
"#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_server s
|
def delete_server s
|
||||||
r = self.compute.terminate_instances(s.id)
|
r = self.compute.terminate_instances(s.id)
|
||||||
i = r.body["instancesSet"][0]
|
i = r.body["instancesSet"][0]
|
||||||
@ -202,6 +198,63 @@ module Provider
|
|||||||
def compute
|
def compute
|
||||||
connection_compute(connection_options)
|
connection_compute(connection_options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cloud_formation
|
||||||
|
@cloud_formation ||= Fog::AWS::CloudFormation.new(connection_options)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_stack(stack, out)
|
||||||
|
begin
|
||||||
|
out << "Creating stack for project '#{stack.project}' and environment '#{stack.deploy_env}'...\n"
|
||||||
|
stack.name = create_default_stack_name(stack) unless stack.name
|
||||||
|
out << "Stack name: #{stack.name}\n"
|
||||||
|
out << "Stack template: #{stack.stack_template}\n"
|
||||||
|
out << "Stack parameters: #{stack.parameters}\n"
|
||||||
|
out << "Stack template: #{stack.template_body}\n"
|
||||||
|
response = cloud_formation.create_stack(stack.name,
|
||||||
|
{
|
||||||
|
'TemplateBody' => stack.template_body,
|
||||||
|
'Parameters' => stack.parameters || {}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
stack.id = response.body['StackId']
|
||||||
|
rescue Excon::Errors::Conflict => e
|
||||||
|
raise ProviderErrors::NameConflict
|
||||||
|
rescue Excon::Errors::BadRequest => br
|
||||||
|
response = ::Chef::JSONCompat.from_json(br.response.body)
|
||||||
|
if response['code'] == 400
|
||||||
|
out << "\nERROR: Bad request (400): #{response['explanation']}"
|
||||||
|
out << "\n"
|
||||||
|
raise InvalidRecord.new(response['explanation'])
|
||||||
|
else
|
||||||
|
out << "\nERROR: Unknown server error (#{response['code']}): #{response['explanation']}"
|
||||||
|
out << "\n"
|
||||||
|
raise InvalidRecord.new(response['explanation'])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_stack(stack)
|
||||||
|
fog_stack(stack).destroy
|
||||||
|
end
|
||||||
|
|
||||||
|
def stack_details(stack)
|
||||||
|
fog_stack(stack).details
|
||||||
|
end
|
||||||
|
|
||||||
|
def stack_resources(stack)
|
||||||
|
fog_stack(stack).resources
|
||||||
|
end
|
||||||
|
|
||||||
|
def stack_resource(stack, resource_id)
|
||||||
|
physical_id = fog_stack(stack).resources.get(resource_id).physical_resource_id
|
||||||
|
compute.servers.get(physical_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def stack_servers(stack)
|
||||||
|
fog_stack(stack).resources.map{|r| compute.servers.get(r.physical_resource_id)}
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def convert_groups list
|
def convert_groups list
|
||||||
res = {}
|
res = {}
|
||||||
@ -252,5 +305,9 @@ module Provider
|
|||||||
end
|
end
|
||||||
r
|
r
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fog_stack(stack)
|
||||||
|
cloud_formation.stacks.get(stack.name, stack.id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -161,14 +161,6 @@ module Provider
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_default_chef_node_name s
|
|
||||||
"#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_default_stack_name s
|
|
||||||
"stack_#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete_server s
|
def delete_server s
|
||||||
r = self.compute.delete_server(s.id)
|
r = self.compute.delete_server(s.id)
|
||||||
return r.status == 204 ? "Server with id '#{s.id}' terminated" : r.body
|
return r.status == 204 ? "Server with id '#{s.id}' terminated" : r.body
|
||||||
@ -211,7 +203,6 @@ module Provider
|
|||||||
response = orchestration.create_stack(
|
response = orchestration.create_stack(
|
||||||
stack_name: stack.name,
|
stack_name: stack.name,
|
||||||
template: stack.template_body,
|
template: stack.template_body,
|
||||||
tenant_id: connection_options[:openstack_tenant],
|
|
||||||
parameters: stack.parameters || {}
|
parameters: stack.parameters || {}
|
||||||
)
|
)
|
||||||
stack.id = response[:body]['stack']['id']
|
stack.id = response[:body]['stack']['id']
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user