Module: Puppet::Indirector

Overview

Manage indirections to termini. They are organized in terms of indirections -

  • e.g., configuration, node, file, certificate – and each indirection has one

or more terminus types defined. The indirection is configured via the indirects method, which will be called by the class extending itself with this module.

Defined Under Namespace

Modules: ClassMethods, Envelope Classes: ActiveRecord, CertificateStatus, Code, Couch, DirectFileServer, Exec, Face, FileContent, FileMetadata, FileServer, Indirection, InstrumentationData, InstrumentationListener, InstrumentationProbe, Ldap, Memory, Plain, Queue, REST, Request, ResourceType, SslFile, Status, StoreConfigs, Terminus, Yaml

Constant Summary collapse

BadNameRegexp =

Helper definition for indirections that handle filenames.

Regexp.union(/^\.\./,
%r{[\\/]},
"\0",
/(?i)^[a-z]:/)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configure_routes(application_routes) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/vendor/puppet/indirector.rb', line 15

def self.configure_routes(application_routes)
  application_routes.each do |indirection_name, termini|
    indirection_name = indirection_name.to_sym
    terminus_name = termini["terminus"]
    cache_name    = termini["cache"]

    Puppet::Indirector::Terminus.terminus_class(indirection_name, terminus_name || cache_name)

    indirection = Puppet::Indirector::Indirection.instance(indirection_name)
    raise "Indirection #{indirection_name} does not exist" unless indirection

    indirection.terminus_class = terminus_name if terminus_name
    indirection.cache_class = cache_name if cache_name
  end
end

Instance Method Details

#indirects(indirection, options = {}) ⇒ Object

Declare that the including class indirects its methods to this terminus. The terminus name must be the name of a Puppet default, not the value – if it’s the value, then it gets evaluated at parse time, which is before the user has had a chance to override it.

Raises:

  • (ArgumentError)


36
37
38
39
40
41
42
43
44
45
46
# File 'lib/vendor/puppet/indirector.rb', line 36

def indirects(indirection, options = {})
  raise(ArgumentError, "Already handling indirection for #{@indirection.name}; cannot also handle #{indirection}") if @indirection
  # populate this class with the various new methods
  extend ClassMethods
  include Puppet::Indirector::Envelope
  extend Puppet::Network::FormatHandler

  # instantiate the actual Terminus for that type and this name (:ldap, w/ args :node)
  # & hook the instantiated Terminus into this class (Node: @indirection = terminus)
  @indirection = Puppet::Indirector::Indirection.new(self, indirection,  options)
end