summaryrefslogtreecommitdiffstats
path: root/lib/puppet/master.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2005-08-23 16:09:14 +0000
committerLuke Kanies <luke@madstop.com>2005-08-23 16:09:14 +0000
commit6029ef7812765775306ff8394005c326e359d886 (patch)
tree32cbe5ea68e0e9fbdc0935d0b41e58fdfcba9e3d /lib/puppet/master.rb
parente87eb58ce8dc40ba8c66233bf17cea61094e7647 (diff)
downloadpuppet-6029ef7812765775306ff8394005c326e359d886.tar.gz
puppet-6029ef7812765775306ff8394005c326e359d886.tar.xz
puppet-6029ef7812765775306ff8394005c326e359d886.zip
Moving all files into a consolidated trunk. All tests pass except the known-failing certificate test, but there appear to be some errors that are incorrectly not resulting in failurs. I will track those down ASAP.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@576 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/master.rb')
-rw-r--r--lib/puppet/master.rb88
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/puppet/master.rb b/lib/puppet/master.rb
new file mode 100644
index 000000000..bbfeaf557
--- /dev/null
+++ b/lib/puppet/master.rb
@@ -0,0 +1,88 @@
+require 'openssl'
+require 'puppet'
+require 'puppet/parser/interpreter'
+require 'puppet/sslcertificates'
+require 'xmlrpc/server'
+
+module Puppet
+ class MasterError < Puppet::Error; end
+ class Master
+ attr_accessor :ast, :local
+ attr_reader :ca
+
+ def self.interface
+ XMLRPC::Service::Interface.new("puppetmaster") { |iface|
+ iface.add_method("string getconfig(string)")
+ }
+ end
+
+ def initialize(hash = {})
+
+ # build our AST
+ @file = hash[:File] || Puppet[:manifest]
+ @parser = Puppet::Parser::Parser.new()
+ @parser.file = @file
+ @ast = @parser.parse
+ hash.delete(:File)
+
+ if hash[:Local]
+ @local = hash[:Local]
+ else
+ @local = false
+ end
+
+ if hash.include?(:CA) and hash[:CA]
+ @ca = Puppet::SSLCertificates::CA.new()
+ else
+ @ca = nil
+ end
+ end
+
+ def getconfig(facts, request = nil)
+ if request
+ #Puppet.warning request.inspect
+ end
+ if @local
+ # we don't need to do anything, since we should already
+ # have raw objects
+ Puppet.debug "Our client is local"
+ else
+ Puppet.debug "Our client is remote"
+
+ # XXX this should definitely be done in the protocol, somehow
+ begin
+ facts = Marshal::load(CGI.unescape(facts))
+ rescue => detail
+ puts "AAAAA"
+ puts detail
+ exit
+ end
+ end
+
+ Puppet.debug("Creating interpreter")
+
+ begin
+ interpreter = Puppet::Parser::Interpreter.new(
+ :ast => @ast,
+ :facts => facts
+ )
+ rescue => detail
+ return detail.to_s
+ end
+
+ Puppet.debug("Running interpreter")
+ begin
+ retobjects = interpreter.run()
+ rescue => detail
+ Puppet.err detail.to_s
+ return ""
+ end
+
+ if @local
+ return retobjects
+ else
+ return CGI.escape(Marshal::dump(retobjects))
+ end
+ end
+ end
+end