module Devops module API2_0 module Routes module ScriptRoutes def self.registered(app) # Get scripts names # # * *Request* # - method : GET # - headers : # - Accept: application/json # # * *Returns* : # [ # "script_1" # ] app.get_with_headers "/scripts", :headers => [:accept] do check_privileges("script", "r") json Devops::API2_0::Handler::Script.new(request, params).scripts end # Run command on node :node_name # # * *Request* # - method : POST # - body : # command to run # # * *Returns* : text stream app.post_with_statistic "/script/command/:node_name" do |node_name| check_privileges("script", "x") stream() do |out| begin Devops::API2_0::Handler::Script.new(request, params).execute_command(out, request.body.read, node_name) rescue IOError => e logger.error e.message end end end # Run script :script_name on nodes # # * *Request* # - method : POST # - headers : # - Content-Type: application/json # - body : # { # "nodes": [], -> array of nodes names # "params": [] -> array of script arguments # } # # * *Returns* : text stream app.post_with_headers "/script/run/:script_name", :headers => [:content_type] do |script_name| check_privileges("script", "x") file_name = check_filename(script_name, "Parameter 'script_name' must be a not empty string", false) body = create_object_from_json_body nodes = check_array(body["nodes"], "Parameter 'nodes' must be a not empty array of strings") p = check_array(body["params"], "Parameter 'params' should be a not empty array of strings", String, true) stream() do |out| begin Devops::API2_0::Handler::Script.new(request, params).run_script out, file_name, nodes, p rescue IOError => e logger.error e.message end end end hash = {} # Create script :script_name # # * *Request* # - method : PUT # - headers : # - Accept: application/json # - body : script content # # * *Returns* : # 201 - Created hash["PUT"] = lambda { check_privileges("script", "w") file_name = params[:script_name] check_filename(file_name, "Parameter 'script_name' must be a not empty string") Devops::API2_0::Handler::Script.new(request, params).create_script(file_name) create_response("File '#{file_name}' created", nil, 201) } # Delete script :script_name # # * *Request* # - method : Delete # - headers : # - Accept: application/json # # * *Returns* : # 200 - Deleted hash["DELETE"] = lambda { check_privileges("script", "w") file_name = params[:script_name] check_filename(file_name, "Parameter 'script_name' must be a not empty string") Devops::API2_0::Handler::Script.new(request, params).delete_script file_name create_response("File '#{file_name}' deleted") } app.multi_routes "/script/:script_name", {:headers => [:accept]}, hash puts "Script routes initialized" end end end end end