Class: Puppet::Network::HTTP::Rack
- Defined in:
- lib/vendor/puppet/network/http/rack.rb
Overview
An rack application, for running the Puppet HTTP Server.
Instance Method Summary collapse
-
#call(env) ⇒ Object
The real rack application (which needs to respond to call).
-
#initialize(args) ⇒ Rack
constructor
A new instance of Rack.
Constructor Details
#initialize(args) ⇒ Rack
Returns a new instance of Rack.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/vendor/puppet/network/http/rack.rb', line 12 def initialize(args) raise ArgumentError, ":protocols must be specified." if !args[:protocols] or args[:protocols].empty? protocols = args[:protocols] # Always prepare a REST handler @rest_http_handler = Puppet::Network::HTTP::RackREST.new protocols.delete :rest # Prepare the XMLRPC handler, for backward compatibility (if requested) @xmlrpc_path = '/RPC2' if args[:protocols].include?(:xmlrpc) raise ArgumentError, "XMLRPC was requested, but no handlers were given" if !args.include?(:xmlrpc_handlers) @xmlrpc_http_handler = Puppet::Network::HTTP::RackXMLRPC.new(args[:xmlrpc_handlers]) protocols.delete :xmlrpc end raise ArgumentError, "there were unknown :protocols specified." if !protocols.empty? end |
Instance Method Details
#call(env) ⇒ Object
The real rack application (which needs to respond to call). The work we need to do, roughly is:
-
Read request (from env) and prepare a response
-
Route the request to the correct handler
-
Return the response (in rack-format) to our caller.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/vendor/puppet/network/http/rack.rb', line 37 def call(env) request = Rack::Request.new(env) response = Rack::Response.new Puppet.debug 'Handling request: %s %s' % [request.request_method, request.fullpath] # if we shall serve XMLRPC, have /RPC2 go to the xmlrpc handler if @xmlrpc_http_handler and @xmlrpc_path == request.path_info[0, @xmlrpc_path.size] handler = @xmlrpc_http_handler else # everything else is handled by the new REST handler handler = @rest_http_handler end begin handler.process(request, response) rescue => detail # Send a Status 500 Error on unhandled exceptions. response.status = 500 response['Content-Type'] = 'text/plain' response.write 'Internal Server Error: "%s"' % detail. # log what happened Puppet.err "Puppet Server (Rack): Internal Server Error: Unhandled Exception: \"%s\"" % detail. Puppet.err "Backtrace:" detail.backtrace.each { |line| Puppet.err " > #{line}" } end response.finish end |