Puppet Function: params_lookup

Defined in:
lib/puppet/functions/params_lookup.rb
Function type:
Ruby 4.x API

Overview

params_lookup(String $varname, Optional[String] $lookup_type)Any

params_lookup.rb

Puppet 4 implementation

This function lookups for a variable value in various locations following this order (first match is returned)

  • Hiera backend (if present) for modulename_varname

  • Hiera backend (if present) for varname (if second argument is ‘global’)

  • Top Scope Variable ::modulename_varname

  • Top Scope Variable ::varname (if second argument is ‘global’)

  • Module default: ::modulename::params::varname

Alessandro Franceschi al@lab42.it

Parameters:

  • varname (String)
  • lookup_type (Optional[String])

Returns:

  • (Any)


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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/puppet/functions/params_lookup.rb', line 16

Puppet::Functions.create_function(:params_lookup, Puppet::Functions::InternalFunction) do
  dispatch :single do
    scope_param()
    param          'String', :varname
    optional_param 'String', :lookup_type
#    arg_count 1, 3
  end

  def single(scope, varname, lookup_type='')
    value = ''
    modulename = scope["module_name"]

    # OK - Hiera Lookup modulename_varname
    value = call_function('hiera', "#{modulename}_#{varname}" , '')
    return value if (value != '')

    # OK - Hiera Lookup varname (global)
    value = call_function('hiera', "#{varname}", '') if lookup_type == 'global'
    return value if (not value.nil?) && (value != :undefined) && (value != '')

    # OK - Top Scope Variable Lookup (::modulename_varname)
    catch (:undefined_variable) do
      begin
        value = scope["::#{modulename}_#{varname}"]
      rescue Puppet::ParseError => e
        raise unless e.to_s =~ /.Could not look./
      end
    end
    return value if (not value.nil?) && (value != :undefined) && (value != '')

    # OK - Top Scope Variable Lookup ::varname (global)
    if lookup_type == 'global'
      catch (:undefined_variable) do
        begin
          value = scope["::#{varname}"]
        rescue Puppet::ParseError => e
          raise unless e.to_s =~ /.Could not look./
        end
      end
      return value if (not value.nil?) && (value != :undefined) && (value != '')
    end

    # TODO: Set the correct classname when params_lookup used in subclasses
    classname = modulename
    # classname = scope.self.resource.name.downcase 

    loaded_classes = closure_scope.catalog.classes

    # TOTEST - legacy params lookup (self::params)
    if loaded_classes.include?("#{classname}::params")
      value = closure_scope["::#{classname}::params::#{varname}"]
      return value if (not value.nil?)
      # return value if (not value.nil?) && (value != :undefined) && (value != '')
    end

    # OK - default params lookup
    if loaded_classes.include?("#{modulename}::params")
      value = closure_scope["::#{modulename}::params::#{varname}"]
      return value if (not value.nil?)
      # return value if (not value.nil?) && (value != :undefined) && (value != '')
    end

    return ''
  end
end