211 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			211 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | module Devops | ||
|  |   module API3 | ||
|  |     module Routes | ||
|  |       module ServerRoutes | ||
|  | 
 | ||
|  |         def self.registered(app) | ||
|  | 
 | ||
|  |           app.define_policy :read_servers, "Get servers" | ||
|  |           app.define_policy :create_servers, "Create servers" | ||
|  |           app.define_policy :delete_servers, "Delete servers" | ||
|  |           app.define_policy :deploy_servers, "Run deploy command on reserved server" | ||
|  |           app.define_policy :pause_servers, "Pause and unpouse servers" | ||
|  |           app.define_policy :reserve_servers, "Reserve and unreserve servers" | ||
|  | 
 | ||
|  |           app.get_with_headers "/servers" do | ||
|  |             check_policy(:read_servers) | ||
|  |             json Devops::API3::Handler::Server.new(request).servers.map(&:to_hash) | ||
|  |           end | ||
|  | 
 | ||
|  | =begin | ||
|  |           app.get_with_headers "/servers/:provider" do |provider| | ||
|  |             check_policy(:read_servers) | ||
|  |             check_provider(provider) | ||
|  |             json Devops::API3::Handler::Server.new(request).provider_servers(provider) | ||
|  |           end | ||
|  | =end | ||
|  | 
 | ||
|  |           app.get_with_headers "/servers/provider/:provider/:account" do |provider, account| | ||
|  |             check_policy(:read_servers) | ||
|  |             check_provider(provider) | ||
|  |             check_provider_account(provider, account) | ||
|  |             json Devops::API3::Handler::Server.new(request).provider_servers_with_account(provider, account) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.get_with_headers "/server/id/:name" do |name| | ||
|  |             check_policy(:read_servers) | ||
|  |             json({id: Devops::API3::Handler::Server.new(request).server_id_by_name(name)}) | ||
|  |           end | ||
|  | 
 | ||
|  |           hash = {} | ||
|  |           hash["GET"] = lambda {|id| | ||
|  |             check_policy(:read_servers) | ||
|  |             json Devops::API3::Handler::Server.new(request).server(id).to_hash | ||
|  |           } | ||
|  | 
 | ||
|  |           hash["DELETE"] = lambda {|id| | ||
|  |             check_policy(:delete_servers) | ||
|  |             if request["HTTP_X_STREAM"] | ||
|  |               stream() do |out| | ||
|  |                 begin | ||
|  |                   status = Devops::API3::Handler::Server.new(request).delete_stream([id], out) | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                   break | ||
|  |                 end | ||
|  |               end # stream | ||
|  |             else | ||
|  |               files = Devops::API3::Handler::Server.new(request).delete([id]) | ||
|  |               json files | ||
|  |             end | ||
|  |           } | ||
|  |           app.multi_routes "/server/:id", hash | ||
|  | 
 | ||
|  |           app.post_with_headers "/servers/delete" do | ||
|  |             check_policy(:delete_servers) | ||
|  |             if request["HTTP_X_STREAM"] | ||
|  |               stream() do |out| | ||
|  |                 begin | ||
|  |                   status = Devops::API3::Handler::Server.new(request).delete_stream(parser.delete_list, out) | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                   break | ||
|  |                 end | ||
|  |               end # stream | ||
|  |             else | ||
|  |               files = Devops::API3::Handler::Server.new(request).delete(parser.delete_list) | ||
|  |               json files | ||
|  |             end | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/deploy" do |id| | ||
|  |             check_policy(:deploy_servers) | ||
|  | 
 | ||
|  |             if request["HTTP_X_STREAM"] | ||
|  |               stream() do |out| | ||
|  |                 status = [] | ||
|  |                 begin | ||
|  |                   status = Devops::API3::Handler::Server.new(request).deploy_stream(id, out) | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                   break | ||
|  |                 end | ||
|  |               end # stream | ||
|  |             else | ||
|  |               json [ Devops::API3::Handler::Server.new(request).deploy(id) ] | ||
|  |             end | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server" do | ||
|  |             check_policy(:create_servers) | ||
|  |             handler = Devops::API3::Handler::Server.new(request) | ||
|  |             if request["X-Stream"] or request["HTTP_X_STREAM"] | ||
|  |               stream() do |out| | ||
|  |                 begin | ||
|  |                   status = handler.create_server_stream out | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                 end | ||
|  |               end | ||
|  |             else | ||
|  |               json handler.create_server | ||
|  |             end | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/pause" do |id| | ||
|  |             check_policy(:pause_servers) | ||
|  |             info = Devops::API3::Handler::Server.new(request).pause_server(id) | ||
|  |             create_response(info, {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/unpause" do |id| | ||
|  |             check_policy(:pause_servers) | ||
|  |             info = Devops::API3::Handler::Server.new(request).unpause_server(id) | ||
|  |             create_response(info, {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/reserve" do |id| | ||
|  |             check_policy(:reserve_servers) | ||
|  |             Devops::API3::Handler::Server.new(request).reserve_server(id) | ||
|  |             create_response("Server '#{id}' has been reserved", {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/unreserve" do |id| | ||
|  |             check_policy(:reserve_servers) | ||
|  |             Devops::API3::Handler::Server.new(request).unreserve_server(id) | ||
|  |             create_response("Server '#{id}' has been unreserved", {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/bootstrap" do |id| | ||
|  |             check_policy(:deploy_servers) | ||
|  | 
 | ||
|  |             handler = Devops::API3::Handler::Server.new(request) | ||
|  |             if request["X-Stream"] | ||
|  |               stream() do |out| | ||
|  |                 begin | ||
|  |                   status = handler.bootstrap_server_stream id, out | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                 end | ||
|  |               end | ||
|  |             else | ||
|  |               jid = handler.bootstrap_server(id) | ||
|  |               json [jid] | ||
|  |             end | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/unbootstrap" do |id| | ||
|  |             check_policy(:deploy_servers) | ||
|  |             handler = Devops::API3::Handler::Server.new(request) | ||
|  |             if request["X-Stream"] | ||
|  |               stream() do |out| | ||
|  |                 begin | ||
|  |                   status = handler.unbootstrap_server_stream id, out | ||
|  |                   out << create_status(status) | ||
|  |                 rescue IOError => e | ||
|  |                   logger.error e.message | ||
|  |                 end | ||
|  |               end | ||
|  |             else | ||
|  |               jid = handler.unbootstrap_server(id) | ||
|  |               json [jid] | ||
|  |             end | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/add" do | ||
|  |             check_policy(:create_servers) | ||
|  |             server = Devops::API3::Handler::Server.new(request).add_server() | ||
|  |             create_response("Server '#{server.id}' has been added", {id: server.id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/tags/add" do |id| | ||
|  |             check_policy(:create_servers) | ||
|  |             Devops::API3::Handler::Server.new(request).set_tags(id) | ||
|  |             create_response("Added", {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/tags/delete" do |id| | ||
|  |             check_policy(:create_servers) | ||
|  |             Devops::API3::Handler::Server.new(request).unset_tags(id) | ||
|  |             create_response("Deleted", {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/server/:id/run_list" do |id| | ||
|  |             check_policy(:create_servers) | ||
|  |             Devops::API3::Handler::Server.new(request).set_run_list(id) | ||
|  |             create_response("Run list has been changed", {id: id}) | ||
|  |           end | ||
|  | 
 | ||
|  |           puts "Server routes initialized" | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |