Class: Puppet::Util::ResourceTemplate
- 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
- #evaluate ⇒ Object
-
#initialize(file, resource) ⇒ ResourceTemplate
constructor
A new instance of ResourceTemplate.
Methods included from Logging
#clear_deprecation_warnings, #debug, #deprecation_warning, #format_backtrace, #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.
48 49 50 51 52 53 |
# File 'lib/puppet/util/resource_template.rb', line 48 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
#evaluate ⇒ Object
43 44 45 46 |
# File 'lib/puppet/util/resource_template.rb', line 43 def evaluate set_resource_variables Puppet::Util.create_erb(Puppet::FileSystem.read(@file, :encoding => 'utf-8')).result(binding) end |