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
69 def data_dig(key, lookup_invocation, location, merge)
70   @backend ||= instantiate_backend(lookup_invocation)
71 
72   # A merge_behavior retrieved from hiera.yaml must not be converted here. Instead, passing the symbol :hash
73   # tells the V3 backend to pick it up from the config.
74   resolution_type = lookup_invocation.hiera_v3_merge_behavior? ? :hash : convert_merge(merge)
75   @backend.lookup(key.to_s, lookup_invocation.scope, lookup_invocation.hiera_v3_location_overrides, resolution_type, {:recurse_guard => nil})
76 end
full_name() click to toggle source
   # File lib/puppet/pops/lookup/data_dig_function_provider.rb
78 def full_name
79   "hiera version 3 backend '#{options[HieraConfig::KEY_BACKEND]}'"
80 end
value_is_validated?() click to toggle source
   # File lib/puppet/pops/lookup/data_dig_function_provider.rb
82 def value_is_validated?
83   false
84 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
108 def convert_merge(merge)
109   case merge
110   when nil
111   when 'first', 'default'
112     # Nil is OK. Defaults to Hiera :priority
113     nil
114   when Puppet::Pops::MergeStrategy
115     convert_merge(merge.configuration)
116   when 'unique'
117     # Equivalent to Hiera :array
118     :array
119   when 'hash'
120     # Equivalent to Hiera :hash with default :native merge behavior. A Hash must be passed here
121     # to override possible Hiera deep merge config settings.
122     { :behavior => :native }
123   when 'deep', 'unconstrained_deep'
124     # Equivalent to Hiera :hash with :deeper merge behavior.
125     { :behavior => :deeper }
126   when 'reverse_deep'
127     # Equivalent to Hiera :hash with :deep merge behavior.
128     { :behavior => :deep }
129   when Hash
130     strategy = merge['strategy']
131     case strategy
132     when 'deep', 'unconstrained_deep', 'reverse_deep'
133       result = { :behavior => strategy == 'reverse_deep' ? :deep : :deeper }
134       # Remaining entries must have symbolic keys
135       merge.each_pair { |k,v| result[k.to_sym] = v unless k == 'strategy' }
136       result
137     else
138       convert_merge(strategy)
139     end
140   else
141     raise Puppet::DataBinding::LookupError, "Unrecognized value for request 'merge' parameter: '#{merge}'"
142   end
143 end
instantiate_backend(lookup_invocation) click to toggle source
    # File lib/puppet/pops/lookup/data_dig_function_provider.rb
 88 def instantiate_backend(lookup_invocation)
 89   backend_name = options[HieraConfig::KEY_BACKEND]
 90   begin
 91     require 'hiera/backend'
 92     require "hiera/backend/#{backend_name.downcase}_backend"
 93     backend = Hiera::Backend.const_get("#{backend_name.capitalize}_backend").new
 94     return backend.method(:lookup).arity == 4 ? Hiera::Backend::Backend1xWrapper.new(backend) : backend
 95   rescue LoadError => e
 96     lookup_invocation.report_text { "Unable to load backend '#{backend_name}': #{e.message}" }
 97     throw :no_such_key
 98   rescue NameError => e
 99     lookup_invocation.report_text { "Unable to instantiate backend '#{backend_name}': #{e.message}" }
100     throw :no_such_key
101   end
102 end