class Puppet::Pops::Lookup::V3BackendFunctionProvider

@api private

Constants

TAG

Public Instance Methods

data_dig(key, lookup_invocation, location, merge) click to toggle source
   # File lib/puppet/pops/lookup/data_dig_function_provider.rb
68 def data_dig(key, lookup_invocation, location, merge)
69   @backend ||= instantiate_backend(lookup_invocation)
70 
71   # A merge_behavior retrieved from hiera.yaml must not be converted here. Instead, passing the symbol :hash
72   # tells the V3 backend to pick it up from the config.
73   resolution_type = lookup_invocation.hiera_v3_merge_behavior? ? :hash : convert_merge(merge)
74   @backend.lookup(key.to_s, lookup_invocation.scope, lookup_invocation.hiera_v3_location_overrides, resolution_type, {:recurse_guard => nil})
75 end
full_name() click to toggle source
   # File lib/puppet/pops/lookup/data_dig_function_provider.rb
77 def full_name
78   "hiera version 3 backend '#{options[HieraConfig::KEY_BACKEND]}'"
79 end
value_is_validated?() click to toggle source
   # File lib/puppet/pops/lookup/data_dig_function_provider.rb
81 def value_is_validated?
82   false
83 end

Private Instance Methods

convert_merge(merge) click to toggle source

Converts a lookup 'merge' parameter argument into a Hiera 'resolution_type' argument.

@param merge [String,Hash,nil] The lookup 'merge' argument @return [Symbol,Hash,nil] The Hiera 'resolution_type'

    # File lib/puppet/pops/lookup/data_dig_function_provider.rb
107 def convert_merge(merge)
108   case merge
109   when nil
110   when 'first', 'default'
111     # Nil is OK. Defaults to Hiera :priority
112     nil
113   when Puppet::Pops::MergeStrategy
114     convert_merge(merge.configuration)
115   when 'unique'
116     # Equivalent to Hiera :array
117     :array
118   when 'hash'
119     # Equivalent to Hiera :hash with default :native merge behavior. A Hash must be passed here
120     # to override possible Hiera deep merge config settings.
121     { :behavior => :native }
122   when 'deep', 'unconstrained_deep'
123     # Equivalent to Hiera :hash with :deeper merge behavior.
124     { :behavior => :deeper }
125   when 'reverse_deep'
126     # Equivalent to Hiera :hash with :deep merge behavior.
127     { :behavior => :deep }
128   when Hash
129     strategy = merge['strategy']
130     case strategy
131     when 'deep', 'unconstrained_deep', 'reverse_deep'
132       result = { :behavior => strategy == 'reverse_deep' ? :deep : :deeper }
133       # Remaining entries must have symbolic keys
134       merge.each_pair { |k,v| result[k.to_sym] = v unless k == 'strategy' }
135       result
136     else
137       convert_merge(strategy)
138     end
139   else
140     raise Puppet::DataBinding::LookupError, "Unrecognized value for request 'merge' parameter: '#{merge}'"
141   end
142 end
instantiate_backend(lookup_invocation) click to toggle source
    # File lib/puppet/pops/lookup/data_dig_function_provider.rb
 87 def instantiate_backend(lookup_invocation)
 88   backend_name = options[HieraConfig::KEY_BACKEND]
 89   begin
 90     require 'hiera/backend'
 91     require "hiera/backend/#{backend_name.downcase}_backend"
 92     backend = Hiera::Backend.const_get("#{backend_name.capitalize}_backend").new
 93     return backend.method(:lookup).arity == 4 ? Hiera::Backend::Backend1xWrapper.new(backend) : backend
 94   rescue LoadError => e
 95     lookup_invocation.report_text { "Unable to load backend '#{backend_name}': #{e.message}" }
 96     throw :no_such_key
 97   rescue NameError => e
 98     lookup_invocation.report_text { "Unable to instantiate backend '#{backend_name}': #{e.message}" }
 99     throw :no_such_key
100   end
101 end