class Node::Exec

Public Instance Methods

command() click to toggle source
   # File lib/puppet/indirector/node/exec.rb
10 def command
11   command = Puppet[:external_nodes]
12   raise ArgumentError, _("You must set the 'external_nodes' parameter to use the external node terminus") unless command != _("none")
13   command.split
14 end
find(request) click to toggle source

Look for external node definitions.

Calls superclass method Puppet::Indirector::Exec#find
   # File lib/puppet/indirector/node/exec.rb
17 def find(request)
18   output = super or return nil
19 
20   # Translate the output to ruby.
21   result = translate(request.key, output)
22 
23   facts = request.options[:facts].is_a?(Puppet::Node::Facts) ? request.options[:facts] : nil
24 
25   # Set the requested environment if it wasn't overridden
26   # If we don't do this it gets set to the local default
27   result[:environment] ||= request.environment
28 
29   create_node(request.key, result, facts)
30 end

Private Instance Methods

create_node(name, result, facts = nil) click to toggle source

Turn our outputted objects into a Puppet::Node instance.

   # File lib/puppet/indirector/node/exec.rb
40 def create_node(name, result, facts = nil)
41   node = Puppet::Node.new(name)
42   [:parameters, :classes, :environment].each do |param|
43     value = result[param]
44     if value
45       node.send(param.to_s + "=", value)
46     end
47   end
48 
49   node.fact_merge(facts)
50   node
51 end
execute(command, arguments) click to toggle source

Proxy the execution, so it's easier to test.

   # File lib/puppet/indirector/node/exec.rb
35 def execute(command, arguments)
36   Puppet::Util::Execution.execute(command,arguments)
37 end
translate(name, output) click to toggle source

Translate the yaml string into Ruby objects.

   # File lib/puppet/indirector/node/exec.rb
54 def translate(name, output)
55   Puppet::Util::Yaml.safe_load(output, [Symbol]).inject({}) do |hash, data|
56     case data[0]
57     when String
58       hash[data[0].intern] = data[1]
59     when Symbol
60       hash[data[0]] = data[1]
61     else
62       raise Puppet::Error, _("key is a %{klass}, not a string or symbol") % { klass: data[0].class }
63     end
64 
65     hash
66   end
67 
68 rescue => detail
69     raise Puppet::Error, _("Could not load external node results for %{name}: %{detail}") % { name: name, detail: detail }, detail.backtrace
70 end