summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/indirector/rest.rb12
-rw-r--r--lib/puppet/network/http/handler.rb17
-rw-r--r--lib/puppet/network/http/mongrel/rest.rb4
-rw-r--r--lib/puppet/network/http/webrick.rb16
-rw-r--r--lib/puppet/network/http/webrick/rest.rb17
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