diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/feature/base.rb | 2 | ||||
-rw-r--r-- | lib/puppet/indirector/rest.rb | 8 | ||||
-rw-r--r-- | lib/puppet/indirector/rest/node.rb | 6 | ||||
-rw-r--r-- | lib/puppet/network/http_server.rb | 3 | ||||
-rw-r--r-- | lib/puppet/network/http_server/mongrel.rb (renamed from lib/puppet/network/server/mongrel.rb) | 4 | ||||
-rw-r--r-- | lib/puppet/network/http_server/webrick.rb (renamed from lib/puppet/network/server/webrick.rb) | 4 | ||||
-rw-r--r-- | lib/puppet/network/rest_controller.rb | 2 | ||||
-rw-r--r-- | lib/puppet/network/server.rb | 66 |
8 files changed, 88 insertions, 7 deletions
diff --git a/lib/puppet/feature/base.rb b/lib/puppet/feature/base.rb index 6368d0931..518e9b419 100644 --- a/lib/puppet/feature/base.rb +++ b/lib/puppet/feature/base.rb @@ -18,7 +18,7 @@ Puppet.features.add(:libshadow, :libs => ["shadow"]) Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 } # We've got mongrel available -Puppet.features.add(:mongrel, :libs => %w{rubygems mongrel puppet/network/server/mongrel}) +Puppet.features.add(:mongrel, :libs => %w{rubygems mongrel puppet/network/http_server/mongrel}) # We have lcs diff Puppet.features.add :diff, :libs => %w{diff/lcs diff/lcs/hunk} diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb new file mode 100644 index 000000000..8d51aff09 --- /dev/null +++ b/lib/puppet/indirector/rest.rb @@ -0,0 +1,8 @@ +require 'puppet/indirector/rest' + +# Access objects via REST +class Puppet::Indirector::REST < Puppet::Indirector::Terminus + def find(name) + indirection.model.new(name) + end +end diff --git a/lib/puppet/indirector/rest/node.rb b/lib/puppet/indirector/rest/node.rb new file mode 100644 index 000000000..ce809f77a --- /dev/null +++ b/lib/puppet/indirector/rest/node.rb @@ -0,0 +1,6 @@ +require 'puppet/indirector/rest' + +class Puppet::Indirector::REST::Node < Puppet::Indirector::REST + desc "TODO: FIXME" + # TODO/FIXME +end diff --git a/lib/puppet/network/http_server.rb b/lib/puppet/network/http_server.rb new file mode 100644 index 000000000..e3826a654 --- /dev/null +++ b/lib/puppet/network/http_server.rb @@ -0,0 +1,3 @@ +# Just a stub, so we can correctly scope other classes. +module Puppet::Network::HTTPServer # :nodoc: +end diff --git a/lib/puppet/network/server/mongrel.rb b/lib/puppet/network/http_server/mongrel.rb index 8cd7e807b..ba4b048b3 100644 --- a/lib/puppet/network/server/mongrel.rb +++ b/lib/puppet/network/http_server/mongrel.rb @@ -31,7 +31,7 @@ require 'rubygems' require 'mongrel' require 'xmlrpc/server' require 'puppet/network/xmlrpc/server' -require 'puppet/network/server' +require 'puppet/network/http_server' require 'puppet/network/client_request' require 'puppet/daemon' @@ -49,7 +49,7 @@ require 'resolv' # handler.xmlrpc_server.add_handler("my.add") { |a, b| a.to_i + b.to_i } # </pre> module Puppet::Network - class Server::Mongrel < ::Mongrel::HttpHandler + class HTTPServer::Mongrel < ::Mongrel::HttpHandler include Puppet::Daemon attr_reader :xmlrpc_server diff --git a/lib/puppet/network/server/webrick.rb b/lib/puppet/network/http_server/webrick.rb index dd9a91c7c..2cf85b7b6 100644 --- a/lib/puppet/network/server/webrick.rb +++ b/lib/puppet/network/http_server/webrick.rb @@ -6,7 +6,7 @@ require 'fcntl' require 'puppet/sslcertificates/support' require 'puppet/network/xmlrpc/webrick_servlet' -require 'puppet/network/server' +require 'puppet/network/http_server' require 'puppet/network/client' module Puppet @@ -14,7 +14,7 @@ module Puppet module Network # The old-school, pure ruby webrick server, which is the default serving # mechanism. - class Server::WEBrick < WEBrick::HTTPServer + class HTTPServer::WEBrick < WEBrick::HTTPServer include Puppet::Daemon include Puppet::SSLCertificates::Support diff --git a/lib/puppet/network/rest_controller.rb b/lib/puppet/network/rest_controller.rb new file mode 100644 index 000000000..76a9830ea --- /dev/null +++ b/lib/puppet/network/rest_controller.rb @@ -0,0 +1,2 @@ +class Puppet::Network::RESTController # :nodoc: +end diff --git a/lib/puppet/network/server.rb b/lib/puppet/network/server.rb index 0dee30b10..84a71a6b4 100644 --- a/lib/puppet/network/server.rb +++ b/lib/puppet/network/server.rb @@ -1,4 +1,66 @@ -# Just a stub, so we can correctly scope other classes. -module Puppet::Network::Server # :nodoc: +class Puppet::Network::Server + attr_reader :server_type + + # which HTTP server subclass actually handles web requests of a certain type? (e.g., :rest => RESTServer) + def self.server_class_by_name(name) + klass = (name.to_s + 'Server').to_sym + const_get klass + end + + # we will actually return an instance of the Server subclass which handles the HTTP web server, instead of + # an instance of this generic Server class. A tiny bit of sleight-of-hand is necessary to make this happen. + def self.new(args = {}) + server_type = Puppet[:servertype] or raise "No servertype configuration found." + obj = self.server_class_by_name(server_type).allocate + obj.send :initialize, args.merge(:server_type => server_type) + obj + end + + def initialize(args = {}) + @routes = {} + @listening = false + @server_type = args[:server_type] + self.register(args[:handlers]) if args[:handlers] + end + + def register(*indirections) + raise ArgumentError, "indirection names are required" if indirections.empty? + indirections.flatten.each { |i| @routes[i.to_sym] = true } + end + + def unregister(*indirections) + indirections = @routes.keys if indirections.empty? + indirections.flatten.each do |i| + raise(ArgumentError, "indirection [%s] is not known" % i) unless @routes[i.to_sym] + @routes.delete(i.to_sym) + end + end + + def listening? + @listening + end + + def listen + raise "Cannot listen -- already listening" if listening? + start_web_server + @listening = true + end + + def unlisten + raise "Cannot unlisten -- not currently listening" unless listening? + stop_web_server + @listening = false + end + + private + + def start_web_server + raise NotImplementedError, "this method needs to be implemented by the actual web server (sub)class" + end + + def stop_web_server + raise NotImplementedError, "this method needs to be implemented by the actual web server (sub)class" + end end + |