diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/indirector/rest.rb | 12 | ||||
-rw-r--r-- | lib/puppet/network/http/handler.rb | 17 | ||||
-rw-r--r-- | lib/puppet/network/http/mongrel/rest.rb | 4 | ||||
-rw-r--r-- | lib/puppet/network/http/webrick.rb | 16 | ||||
-rw-r--r-- | lib/puppet/network/http/webrick/rest.rb | 17 |
5 files changed, 42 insertions, 24 deletions
diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb index 7b7c932c4..4c54183c6 100644 --- a/lib/puppet/indirector/rest.rb +++ b/lib/puppet/indirector/rest.rb @@ -1,8 +1,16 @@ -require 'puppet/indirector/rest' +require 'net/http' +require 'uri' # Access objects via REST class Puppet::Indirector::REST < Puppet::Indirector::Terminus + def network_fetch(path) + # TODO: url_encode path, set proper server + port + Net::HTTP.get(URI.parse("http://127.0.0.1:34343/#{path}")) + end + def find(name, options = {}) - indirection.model.new(name) + network_result = network_fetch("#{indirection.name}/#{name}") + raise YAML.load(network_result) if network_result =~ %r{--- !ruby/exception} + decoded_result = indirection.model.from_yaml(network_result) end end diff --git a/lib/puppet/network/http/handler.rb b/lib/puppet/network/http/handler.rb index 7679bf320..b5dcf69d4 100644 --- a/lib/puppet/network/http/handler.rb +++ b/lib/puppet/network/http/handler.rb @@ -1,10 +1,9 @@ module Puppet::Network::HTTP::Handler - - def initialize(args = {}) + + def initialize_for_puppet(args = {}) raise ArgumentError unless @server = args[:server] raise ArgumentError unless @handler = args[:handler] @model = find_model_for_handler(@handler) - register_handler end # handle an HTTP request @@ -19,24 +18,28 @@ module Puppet::Network::HTTP::Handler end private + + def model + @model + end def do_find(request, response) key = request_key(request) || raise(ArgumentError, "Could not locate lookup key in request path [#{path}]") args = params(request) - result = @model.find(key, args).to_yaml + result = model.find(key, args).to_yaml encode_result(request, response, result) end def do_search(request, response) args = params(request) - result = @model.search(args).collect {|obj| obj.to_yaml } + result = model.search(args).collect {|obj| obj.to_yaml } encode_result(request, response, result) end def do_destroy(request, response) key = request_key(request) || raise(ArgumentError, "Could not locate lookup key in request path [#{path}]") args = params(request) - result = @model.destroy(key, args) + result = model.destroy(key, args) encode_result(request, response, YAML.dump(result)) end @@ -44,7 +47,7 @@ module Puppet::Network::HTTP::Handler data = body(request) raise ArgumentError, "No data to save" if !data or data.empty? args = params(request) - obj = @model.new + obj = model.new result = obj.save(args.merge(:data => data)).to_yaml encode_result(request, response, result) end diff --git a/lib/puppet/network/http/mongrel/rest.rb b/lib/puppet/network/http/mongrel/rest.rb index 7cb6f67bf..d7a1a1bdc 100644 --- a/lib/puppet/network/http/mongrel/rest.rb +++ b/lib/puppet/network/http/mongrel/rest.rb @@ -3,6 +3,10 @@ require 'puppet/network/http/handler' class Puppet::Network::HTTP::MongrelREST < Mongrel::HttpHandler include Puppet::Network::HTTP::Handler + + def initialize(args={}) + initialize_for_puppet(args) + end private diff --git a/lib/puppet/network/http/webrick.rb b/lib/puppet/network/http/webrick.rb index 3fd643612..3a37e2071 100644 --- a/lib/puppet/network/http/webrick.rb +++ b/lib/puppet/network/http/webrick.rb @@ -9,6 +9,11 @@ class Puppet::Network::HTTP::WEBrick @mutex = Mutex.new end + def self.class_for_protocol(protocol) + return Puppet::Network::HTTP::WEBrickREST if protocol.to_sym == :rest + raise "Unknown protocol [#{protocol}]." + end + def listen(args = {}) raise ArgumentError, ":handlers must be specified." if !args[:handlers] or args[:handlers].empty? raise ArgumentError, ":protocols must be specified." if !args[:protocols] or args[:protocols].empty? @@ -42,19 +47,16 @@ class Puppet::Network::HTTP::WEBrick @listening end end - + private def setup_handlers @protocols.each do |protocol| + klass = self.class.class_for_protocol(protocol) @handlers.each do |handler| - class_for_protocol(protocol).new(:server => @server, :handler => handler) + @server.mount('/' + handler.to_s, klass, handler) + @server.mount('/' + handler.to_s + 's', klass, handler) end end end - - def class_for_protocol(protocol) - return Puppet::Network::HTTP::WEBrickREST if protocol.to_sym == :rest - raise ArgumentError, "Unknown protocol [#{protocol}]." - end end diff --git a/lib/puppet/network/http/webrick/rest.rb b/lib/puppet/network/http/webrick/rest.rb index 923e002e3..b43912196 100644 --- a/lib/puppet/network/http/webrick/rest.rb +++ b/lib/puppet/network/http/webrick/rest.rb @@ -1,21 +1,22 @@ require 'puppet/network/http/handler' -class Puppet::Network::HTTP::WEBrickREST - +class Puppet::Network::HTTP::WEBrickREST < WEBrick::HTTPServlet::AbstractServlet + include Puppet::Network::HTTP::Handler + + def initialize(server, handler) + raise ArgumentError, "server is required" unless server + super(server) + initialize_for_puppet(:server => server, :handler => handler) + end # WEBrick uses a service() method to respond to requests. Simply delegate to the handler response() method. def service(request, response) process(request, response) end - + private - def register_handler - @server.mount('/' + @handler.to_s, self) - @server.mount('/' + @handler.to_s + 's', self) - end - def http_method(request) request.request_method end |