class Node::Exec

Public Instance Methods

command() click to toggle source
   # File lib/puppet/indirector/node/exec.rb
 9 def command
10   command = Puppet[:external_nodes]
11   raise ArgumentError, _("You must set the 'external_nodes' parameter to use the external node terminus") unless command != _("none")
12   command.split
13 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
16 def find(request)
17   output = super or return nil
18 
19   # Translate the output to ruby.
20   result = translate(request.key, output)
21 
22   facts = request.options[:facts].is_a?(Puppet::Node::Facts) ? request.options[:facts] : nil
23 
24   # Set the requested environment if it wasn't overridden
25   # If we don't do this it gets set to the local default
26   result[:environment] ||= request.environment
27 
28   create_node(request.key, result, facts)
29 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
39 def create_node(name, result, facts = nil)
40   node = Puppet::Node.new(name)
41   [:parameters, :classes, :environment].each do |param|
42     value = result[param]
43     if value
44       node.send(param.to_s + "=", value)
45     end
46   end
47 
48   node.fact_merge(facts)
49   node
50 end
execute(command, arguments) click to toggle source

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

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

Translate the yaml string into Ruby objects.

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