Sha256: 7e4f65f924580fe8aa9795d976cf48b7723630f8a37ca3e602a45c6c6a38c1e3

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require 'puppet/node'
require 'puppet/indirector/exec'

class Puppet::Node::Exec < Puppet::Indirector::Exec
    desc "Call an external program to get node information.  See
    the `ExternalNodes`:trac: page for more information."
    include Puppet::Util

    def command
        command = Puppet[:external_nodes]
        unless command != "none"
            raise ArgumentError, "You must set the 'external_nodes' parameter to use the external node terminus"
        end
        command.split
    end

    # Look for external node definitions.
    def find(name)
        output = super or return nil

        # Translate the output to ruby.
        result = translate(name, output)

        return create_node(name, result)
    end

    private

    # Turn our outputted objects into a Puppet::Node instance.
    def create_node(name, result)
        node = Puppet::Node.new(name)
        set = false
        [:parameters, :classes].each do |param|
            if value = result[param]
                node.send(param.to_s + "=", value)
                set = true
            end
        end

        node.fact_merge
        return node
    end

    # Translate the yaml string into Ruby objects.
    def translate(name, output)
        begin
            YAML.load(output).inject({}) { |hash, data| hash[symbolize(data[0])] = data[1]; hash }
        rescue => detail
            raise Puppet::Error, "Could not load external node results for %s: %s" % [name, detail]
        end
    end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
puppet-0.24.0 lib/puppet/indirector/node/exec.rb
puppet-0.24.2 lib/puppet/indirector/node/exec.rb
puppet-0.24.1 lib/puppet/indirector/node/exec.rb