summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/feature/base.rb2
-rw-r--r--lib/puppet/indirector/rest.rb8
-rw-r--r--lib/puppet/indirector/rest/node.rb6
-rw-r--r--lib/puppet/network/http_server.rb3
-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.rb2
-rw-r--r--lib/puppet/network/server.rb66
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
+