fluke/devops-service/app/api2/routes/stack.rb
2015-08-14 17:48:07 +03:00

116 lines
3.9 KiB
Ruby

module Devops
module API2_0
module Routes
module StackRoutes
def self.registered(app)
app.get_with_headers '/stacks', :headers => [:accept] do
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request).stacks.map(&:to_hash)
end
app.get_with_headers '/stacks/provider/:provider', :headers => [:accept] do |provider|
check_privileges("stack", "r")
check_provider(provider)
json Devops::API2_0::Handler::Stack.new(request).stacks_for_provider(provider).map(&:to_hash)
end
app.post_with_headers "/stack", :headers => [:accept] do
check_privileges("stack", "w")
json Devops::API2_0::Handler::Stack.new(request).create_stack
#create_response "Created", nil, 201
end
hash = {}
hash['GET'] = lambda { |stack_id|
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request).stack(stack_id).to_hash
}
hash['DELETE'] = lambda { |stack_id|
check_privileges("stack", "w")
Devops::API2_0::Handler::Stack.new(request).delete_stack(stack_id)
create_response("Stack '#{stack_id}' has been removed")
}
app.multi_routes '/stack/:stack_id', {:headers => [:accept]}, hash
app.post_with_headers "/stack/:stack_id/sync_details", :headers => [:accept] do |stack_id|
check_privileges("stack", "w")
json Devops::API2_0::Handler::Stack.new(request).sync_details(stack_id).to_hash
end
app.get_with_headers "/stack/:stack_id/resources", :headers => [:accept] do |stack_id|
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request).resources(stack_id)
end
app.get_with_headers "/stack/:stack_id/resources/:resource_id", :headers => [:accept] do |stack_id, resource_id|
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request).resource(stack_id, resource_id)
end
# Set run_list to stack
#
# * *Request*
# - method : PATCH
# - headers :
# - Accept: application/json
# - Content-Type: application/json
# - body :
# [
# "role[role_1]",
# "recipe[recipe_1]"
# ]
#
# * *Returns* :
# 200 - Updated
app.patch_with_headers "/stack/:id/run_list", :headers => [:accept, :content_type] do |id|
check_privileges("stack", "w")
info = Devops::API2_0::Handler::Stack.new(request).set_run_list(id)
create_response(info)
end
# Deploy stack instances
#
# * *Request*
# - method : POST
# - headers :
# - Accept: application/json
# - Content-Type: application/json
# - body :
# {
# "tags" : ["tag1", "tag2"]
# }
#
# * *Returns* :
# 200 - Updated
app.patch_with_headers "/stack/:id/deploy", :headers => [:accept, :content_type] do |id|
check_privileges("stack", "x")
if request["X-Stream"]
stream() do |out|
status = []
begin
status = Devops::API2_0::Handler::Stack.new(request).deploy_stream(id, out)
out << create_status(status)
rescue IOError => e
logger.error e.message
break
end
end # stream
else
files = Devops::API2_0::Handler::Stack.new(request).deploy(id)
sleep 1
json files
end
end
puts "Stack routes initialized"
end
end
end
end
end