File: template.rb

package info (click to toggle)
puppet-agent 8.10.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,404 kB
  • sloc: ruby: 286,820; sh: 492; xml: 116; makefile: 88; cs: 68
file content (42 lines) | stat: -rw-r--r-- 1,671 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frozen_string_literal: true

Puppet::Parser::Functions.newfunction(:template, :type => :rvalue, :arity => -2, :doc =>
  "Loads an ERB template from a module, evaluates it, and returns the resulting
  value as a string.

  The argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
  reference, which will load `<TEMPLATE FILE>` from a module's `templates`
  directory. (For example, the reference `apache/vhost.conf.erb` will load the
  file `<MODULES DIRECTORY>/apache/templates/vhost.conf.erb`.)

  This function can also accept:

  * An absolute path, which can load a template file from anywhere on disk.
  * Multiple arguments, which will evaluate all of the specified templates and
  return their outputs concatenated into a single string.") do |vals|
  if Puppet[:tasks]
    raise Puppet::ParseErrorWithIssue.from_issue_and_stack(
      Puppet::Pops::Issues::FEATURE_NOT_SUPPORTED_WHEN_SCRIPTING,
      { :feature => 'ERB template' }
    )
  end
  vals.collect do |file|
    # Use a wrapper, so the template can't get access to the full
    # Scope object.
    debug "Retrieving template #{file}"

    wrapper = Puppet::Parser::TemplateWrapper.new(self)
    wrapper.file = file
    begin
      wrapper.result
    rescue => detail
      info = detail.backtrace.first.split(':')
      message = []
      message << _("Failed to parse template %{file}:") % { file: file }
      message << _("  Filepath: %{file_path}") % { file_path: info[0] }
      message << _("  Line: %{line}") % { line: info[1] }
      message << _("  Detail: %{detail}") % { detail: detail }
      raise Puppet::ParseError, message.join("\n") + "\n"
    end
  end.join("")
end