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