Class: Puppet::Util::ResourceTemplate

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/puppet/util/resource_template.rb

Overview

A template wrapper that evaluates a template in the context of a resource, allowing the resource attributes to be looked up from within the template.

This provides functionality essentially equivalent to

the language's template() function. You pass your file path and the resource you want to use into the initialization method, then call result on the instance, and you get back a chunk of text.

The resource's parameters are available as instance variables

(as opposed to the language, where we use a method_missing trick).

For example, say you have a resource that generates a file.  You would

need to implement the following style of `generate` method:

def generate
    template = Puppet::Util::ResourceTemplate.new("/path/to/template", self)

    return Puppet::Type.type(:file).new :path => "/my/file",
        :content => template.evaluate
end

This generated file gets added to the catalog (which is what `generate` does), and its content is the result of the template. You need to use instance variables in your template, so if your template just needs to have the name of the generating resource, it would just have:

<%= @name %>

Since the ResourceTemplate class sets as instance variables all of the resource's parameters.

Note that this example uses the generating resource as its source of parameters, which is generally most useful, since it allows you to configure the generated resource via the generating resource.

Instance Method Summary collapse

Methods included from Logging

#clear_deprecation_warnings, #debug, #deprecation_warning, #format_exception, #get_deprecation_offender, #log_and_raise, #log_deprecations_to_file, #log_exception, #puppet_deprecation_warning, #send_log, setup_facter_logging!, #warn_once

Constructor Details

#initialize(file, resource) ⇒ ResourceTemplate

Returns a new instance of ResourceTemplate

Raises:

  • (ArgumentError)

46
47
48
49
50
# File 'lib/puppet/util/resource_template.rb', line 46

def initialize(file, resource)
  raise ArgumentError, _("Template %{file} does not exist") % { file: file } unless Puppet::FileSystem.exist?(file)
  @file = file
  @resource = resource
end

Instance Method Details

#evaluateObject


41
42
43
44
# File 'lib/puppet/util/resource_template.rb', line 41

def evaluate
  set_resource_variables
  ERB.new(Puppet::FileSystem.read(@file, :encoding => 'utf-8'), 0, "-").result(binding)
end