diff options
author | Luke Kanies <luke@madstop.com> | 2008-05-02 12:27:15 -0500 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2008-05-02 12:27:15 -0500 |
commit | 72673413c8ead5adcb321fe1ce9cfe0410e0eb54 (patch) | |
tree | 046e8d8e07284368527359606ca2956a53d2a47d /lib/puppet | |
parent | 8c9b04d807b34ade704da3584b72d39bb129aa75 (diff) | |
download | puppet-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')
-rw-r--r-- | lib/puppet/network/server.rb | 44 |
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 |