class Puppet::Resource::Catalog::Compiler

Attributes

code[RW]

Public Instance Methods

extract_facts_from_request(request) click to toggle source
# File lib/puppet/indirector/catalog/compiler.rb, line 14
def extract_facts_from_request(request)
  return unless text_facts = request.options[:facts]
  unless format = request.options[:facts_format]
    raise ArgumentError, "Facts but no fact format provided for #{request.key}"
  end

  Puppet::Util::Profiler.profile("Found facts", [:compiler, :find_facts]) do
    # If the facts were encoded as yaml, then the param reconstitution system
    # in Network::HTTP::Handler will automagically deserialize the value.
    if text_facts.is_a?(Puppet::Node::Facts)
      facts = text_facts
    else
      # We unescape here because the corresponding code in Puppet::Configurer::FactHandler escapes
      facts = Puppet::Node::Facts.convert_from(format, CGI.unescape(text_facts))
    end

    unless facts.name == request.key
      raise Puppet::Error, "Catalog for #{request.key.inspect} was requested with fact definition for the wrong node (#{facts.name.inspect})."
    end

    facts.add_timestamp

    options = {
      :environment => request.environment,
      :transaction_uuid => request.options[:transaction_uuid],
    }

    Puppet::Node::Facts.indirection.save(facts, nil, options)
  end
end
filter(catalog) click to toggle source

filter-out a catalog to remove exported resources

# File lib/puppet/indirector/catalog/compiler.rb, line 62
def filter(catalog)
  return catalog.filter { |r| r.virtual? } if catalog.respond_to?(:filter)
  catalog
end
find(request) click to toggle source

Compile a node’s catalog.

# File lib/puppet/indirector/catalog/compiler.rb, line 46
def find(request)
  extract_facts_from_request(request)

  node = node_from_request(request)
  node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h

  if catalog = compile(node)
    return catalog
  else
    # This shouldn't actually happen; we should either return
    # a config or raise an exception.
    return nil
  end
end
networked?() click to toggle source

Is our compiler part of a network, or are we just local?

# File lib/puppet/indirector/catalog/compiler.rb, line 74
def networked?
  Puppet.run_mode.master?
end

Public Class Methods

new() click to toggle source
# File lib/puppet/indirector/catalog/compiler.rb, line 67
def initialize
  Puppet::Util::Profiler.profile("Setup server facts for compiling", [:compiler, :init_server_facts]) do
    set_server_facts
  end
end