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