summaryrefslogtreecommitdiffstats
path: root/lib/puppet/indirector/code/configuration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/indirector/code/configuration.rb')
-rw-r--r--lib/puppet/indirector/code/configuration.rb60
1 files changed, 36 insertions, 24 deletions
diff --git a/lib/puppet/indirector/code/configuration.rb b/lib/puppet/indirector/code/configuration.rb
index 6d0317204..b3a4c67dd 100644
--- a/lib/puppet/indirector/code/configuration.rb
+++ b/lib/puppet/indirector/code/configuration.rb
@@ -15,21 +15,12 @@ class Puppet::Indirector::Code::Configuration < Puppet::Indirector::Code
# Compile a node's configuration.
def find(key, client = nil, clientip = nil)
- # If we want to use the cert name as our key
- if Puppet[:node_name] == 'cert' and client
- key = client
- end
-
- # Note that this is reasonable, because either their node source should actually
- # know about the node, or they should be using the ``none`` node source, which
- # will always return data.
- unless node = Puppet::Node.search(key)
- raise Puppet::Error, "Could not find node '%s'" % key
+ if key.is_a?(Puppet::Node)
+ node = key
+ else
+ node = find_node(key)
end
- # Add any external data to the node.
- add_node_data(node)
-
configuration = compile(node)
return configuration
@@ -47,6 +38,11 @@ class Puppet::Indirector::Code::Configuration < Puppet::Indirector::Code
@interpreter
end
+ # Is our compiler part of a network, or are we just local?
+ def networked?
+ $0 =~ /puppetmasterd/
+ end
+
# Return the configuration version.
def version(client = nil, clientip = nil)
if client and node = Puppet::Node.search(client)
@@ -76,22 +72,17 @@ class Puppet::Indirector::Code::Configuration < Puppet::Indirector::Code
end
config = nil
+ loglevel = networked? ? :notice : :none
+
# LAK:FIXME This should log at :none when our client is
# local, since we don't want 'puppet' (vs. puppetmasterd) to
# log compile times.
- benchmark(:notice, "Compiled configuration for %s" % node.name) do
+ benchmark(loglevel, "Compiled configuration for %s" % node.name) do
begin
config = interpreter.compile(node)
rescue Puppet::Error => detail
- if Puppet[:trace]
- puts detail.backtrace
- end
- unless local?
- Puppet.err detail.to_s
- end
- raise XMLRPC::FaultException.new(
- 1, detail.to_s
- )
+ Puppet.err(detail.to_s) if networked?
+ raise
end
end
@@ -117,6 +108,27 @@ class Puppet::Indirector::Code::Configuration < Puppet::Indirector::Code
return Puppet::Parser::Interpreter.new(args)
end
+ # Turn our host name into a node object.
+ def find_node(key)
+ # If we want to use the cert name as our key
+ # LAK:FIXME This needs to be figured out somehow, but it requires the routing.
+ #if Puppet[:node_name] == 'cert' and client
+ # key = client
+ #end
+
+ # Note that this is reasonable, because either their node source should actually
+ # know about the node, or they should be using the ``none`` node source, which
+ # will always return data.
+ unless node = Puppet::Node.search(key)
+ raise Puppet::Error, "Could not find node '%s'" % key
+ end
+
+ # Add any external data to the node.
+ add_node_data(node)
+
+ node
+ end
+
# Initialize our server fact hash; we add these to each client, and they
# won't change while we're running, so it's safe to cache the values.
def set_server_facts
@@ -150,7 +162,7 @@ class Puppet::Indirector::Code::Configuration < Puppet::Indirector::Code
# LAK:FIXME This method should probably be part of the protocol, but it
# shouldn't be here.
def translate(config)
- if local?
+ unless networked?
config
else
CGI.escape(config.to_yaml(:UseBlock => true))