Class: Puppet::Parser::TemplateWrapper Private

Inherits:
Object
  • Object
show all
Includes:
Util
Defined in:
lib/puppet/parser/templatewrapper.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

A simple wrapper for templates, so they don’t have full access to the scope objects.

API:

  • private

Constant Summary

Constants included from Util

Util::ALNUM, Util::ALPHA, Util::AbsolutePathPosix, Util::AbsolutePathWindows, Util::DEFAULT_POSIX_MODE, Util::DEFAULT_WINDOWS_MODE, Util::ESCAPED, Util::HEX, Util::HttpProxy, Util::PUPPET_STACK_INSERTION_FRAME, Util::RESERVED, Util::RFC_3986_URI_REGEX, Util::UNRESERVED, Util::UNSAFE

Constants included from Util::POSIX

Util::POSIX::LOCALE_ENV_VARS, Util::POSIX::USER_ENV_VARS

Constants included from Util::SymbolicFileMode

Util::SymbolicFileMode::SetGIDBit, Util::SymbolicFileMode::SetUIDBit, Util::SymbolicFileMode::StickyBit, Util::SymbolicFileMode::SymbolicMode, Util::SymbolicFileMode::SymbolicSpecialToBit

Instance Method Summary collapse

Methods included from Util

absolute_path?, benchmark, chuser, clear_environment, create_erb, default_env, deterministic_rand, deterministic_rand_int, exit_on_fail, format_backtrace_array, format_puppetstack_frame, get_env, get_environment, logmethods, merge_environment, path_to_uri, pretty_backtrace, replace_file, resolve_stackframe, rfc2396_escape, safe_posix_fork, set_env, skip_external_facts, symbolizehash, thinmark, uri_encode, uri_query_encode, uri_to_path, uri_unescape, which, withenv, withumask

Methods included from Util::POSIX

#get_posix_field, #gid, groups_of, #idfield, #methodbyid, #methodbyname, #search_posix_field, #uid

Methods included from Util::SymbolicFileMode

#display_mode, #normalize_symbolic_mode, #symbolic_mode_to_int, #valid_symbolic_mode?

Constructor Details

#initialize(scope) ⇒ TemplateWrapper

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of TemplateWrapper.

API:

  • private



15
16
17
# File 'lib/puppet/parser/templatewrapper.rb', line 15

def initialize(scope)
  @__scope__ = scope
end

Instance Method Details

#all_tagsArray<String>

Returns All the defined tags.

Returns:

  • All the defined tags

API:

  • public



60
61
62
# File 'lib/puppet/parser/templatewrapper.rb', line 60

def all_tags
  scope.catalog.tags
end

#classesArray<String>

Returns The list of defined classes.

Returns:

  • The list of defined classes

API:

  • public



48
49
50
# File 'lib/puppet/parser/templatewrapper.rb', line 48

def classes
  scope.catalog.classes
end

#fileString

Returns The full path name of the template that is being executed.

Returns:

  • The full path name of the template that is being executed

API:

  • public



21
22
23
# File 'lib/puppet/parser/templatewrapper.rb', line 21

def file
  @__file__
end

#file=(filename) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



65
66
67
68
69
70
# File 'lib/puppet/parser/templatewrapper.rb', line 65

def file=(filename)
  @__file__ = Puppet::Parser::Files.find_template(filename, scope.compiler.environment)
  unless @__file__
    raise Puppet::ParseError, _("Could not find template '%{filename}'") % { filename: filename }
  end
end

#has_variable?(name) ⇒ Boolean

Should return true if a variable is defined, false if it is not

Returns:

API:

  • public



42
43
44
# File 'lib/puppet/parser/templatewrapper.rb', line 42

def has_variable?(name)
  scope.include?(name.to_s)
end

#result(string = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/puppet/parser/templatewrapper.rb', line 73

def result(string = nil)
  if string
    template_source = "inline template"
  else
    string = Puppet::FileSystem.read_preserve_line_endings(@__file__)
    template_source = @__file__
  end

  # Expose all the variables in our scope as instance variables of the
  # current object, making it possible to access them without conflict
  # to the regular methods.
  escaped_template_source = template_source.gsub(/%/, '%%')
  benchmark(:debug, _("Bound template variables for %{template_source} in %%{seconds} seconds") % { template_source: escaped_template_source }) do
    scope.to_hash.each do |name, value|
      realname = name.gsub(/[^\w]/, "_")
      instance_variable_set("@#{realname}", value)
    end
  end

  result = nil
  benchmark(:debug, _("Interpolated template %{template_source} in %%{seconds} seconds") % { template_source: escaped_template_source }) do
    template = Puppet::Util.create_erb(string)
    template.filename = @__file__
    result = template.result(binding)
  end

  result
end

#scopePuppet::Parser::Scope

Returns The scope in which the template is evaluated.

Returns:

  • The scope in which the template is evaluated

API:

  • public



27
28
29
# File 'lib/puppet/parser/templatewrapper.rb', line 27

def scope
  @__scope__
end

#tagsArray<String>

Returns The tags defined in the current scope.

Returns:

  • The tags defined in the current scope

Raises:

API:

  • public



54
55
56
# File 'lib/puppet/parser/templatewrapper.rb', line 54

def tags
  raise NotImplementedError, "Call 'all_tags' instead."
end

#to_sObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



102
103
104
# File 'lib/puppet/parser/templatewrapper.rb', line 102

def to_s
  "template[#{@__file__ || 'inline'}]"
end