summaryrefslogtreecommitdiffstats
path: root/lib/puppet/network
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-05-02 12:27:15 -0500
committerLuke Kanies <luke@madstop.com>2008-05-02 12:27:15 -0500
commit72673413c8ead5adcb321fe1ce9cfe0410e0eb54 (patch)
tree046e8d8e07284368527359606ca2956a53d2a47d /lib/puppet/network
parent8c9b04d807b34ade704da3584b72d39bb129aa75 (diff)
downloadpuppet-72673413c8ead5adcb321fe1ce9cfe0410e0eb54.tar.gz
puppet-72673413c8ead5adcb321fe1ce9cfe0410e0eb54.tar.xz
puppet-72673413c8ead5adcb321fe1ce9cfe0410e0eb54.zip
Adding configuration support for XMLRPC handlers.
This provides the interface for configuring backward compatibility in the new-style server code. It requires a completely different configuration step, in that REST and xmlrpc handlers are configured separately, rather than using the same handler names, but this was considered less evil than having a large abstraction layer for specifying how the handlers are related.
Diffstat (limited to 'lib/puppet/network')
-rw-r--r--lib/puppet/network/server.rb44
1 files changed, 37 insertions, 7 deletions
diff --git a/lib/puppet/network/server.rb b/lib/puppet/network/server.rb
index fb78baf8e..a610ea7c9 100644
--- a/lib/puppet/network/server.rb
+++ b/lib/puppet/network/server.rb
@@ -6,21 +6,28 @@ class Puppet::Network::Server
def initialize(args = {})
@server_type = Puppet[:servertype] or raise "No servertype configuration found." # e.g., WEBrick, Mongrel, etc.
http_server_class || raise(ArgumentError, "Could not determine HTTP Server class for server type [#{@server_type}]")
- @address = args[:address] || Puppet[:bindaddress] ||
- raise(ArgumentError, "Must specify :address or configure Puppet :bindaddress.")
- @port = args[:port] || Puppet[:masterport] ||
- raise(ArgumentError, "Must specify :port or configure Puppet :masterport")
- @protocols = [ :rest ]
+
+ @address = args[:address] || Puppet[:bindaddress] || raise(ArgumentError, "Must specify :address or configure Puppet :bindaddress.")
+ @port = args[:port] || Puppet[:masterport] || raise(ArgumentError, "Must specify :port or configure Puppet :masterport")
+
+ @protocols = [ :rest, :xmlrpc ]
@listening = false
@routes = {}
+ @xmlrpc_routes = {}
self.register(args[:handlers]) if args[:handlers]
+ self.register_xmlrpc(args[:xmlrpc_handlers]) if args[:xmlrpc_handlers]
end
+ # Register handlers for REST networking, based on the Indirector.
def register(*indirections)
raise ArgumentError, "Indirection names are required." if indirections.empty?
- indirections.flatten.each { |i| @routes[i.to_sym] = true }
+ indirections.flatten.each do |name|
+ Puppet::Indirector::Indirection.model(name) || raise(ArgumentError, "Cannot locate indirection '#{name}'.")
+ @routes[name.to_sym] = true
+ end
end
+ # Unregister Indirector handlers.
def unregister(*indirections)
raise "Cannot unregister indirections while server is listening." if listening?
indirections = @routes.keys if indirections.empty?
@@ -34,6 +41,29 @@ class Puppet::Network::Server
end
end
+ # Register xmlrpc handlers for backward compatibility.
+ def register_xmlrpc(*namespaces)
+ raise ArgumentError, "XMLRPC namespaces are required." if namespaces.empty?
+ namespaces.flatten.each do |name|
+ Puppet::Network::Handler.handler(name) || raise(ArgumentError, "Cannot locate XMLRPC handler for namespace '#{name}'.")
+ @xmlrpc_routes[name.to_sym] = true
+ end
+ end
+
+ # Unregister xmlrpc handlers.
+ def unregister_xmlrpc(*namespaces)
+ raise "Cannot unregister xmlrpc handlers while server is listening." if listening?
+ namespaces = @xmlrpc_routes.keys if namespaces.empty?
+
+ namespaces.flatten.each do |i|
+ raise(ArgumentError, "XMLRPC handler '%s' is unknown." % i) unless @xmlrpc_routes[i.to_sym]
+ end
+
+ namespaces.flatten.each do |i|
+ @xmlrpc_routes.delete(i.to_sym)
+ end
+ end
+
def listening?
@listening
end
@@ -41,7 +71,7 @@ class Puppet::Network::Server
def listen
raise "Cannot listen -- already listening." if listening?
@listening = true
- http_server.listen(:address => address, :port => port, :handlers => @routes.keys, :protocols => protocols)
+ http_server.listen(:address => address, :port => port, :handlers => @routes.keys, :xmlrpc_handlers => @xmlrpc_routes.keys, :protocols => protocols)
end
def unlisten