require_relative 'hiera_config'
require_relative 'data_provider'
module Puppet::Pops
module Lookup
# @api private
class ConfiguredDataProvider
include DataProvider
# @param config [HieraConfig,nil] the configuration
def initialize(config = nil)
@config = config.nil? ? nil : assert_config_version(config)
end
def config(lookup_invocation)
@config ||= assert_config_version(HieraConfig.create(lookup_invocation, configuration_path(lookup_invocation), self))
end
# Needed to assign generated version 4 config
# @deprecated
def config=(config)
@config = config
end
# @return [Pathname] the path to the configuration
def config_path
@config.nil? ? nil : @config.config_path
end
# @return [String] the name of this provider
def name
n = "#{place} "
n << '"' << module_name << '" ' unless module_name.nil?
n << 'Data Provider'
n << " (#{@config.name})" unless @config.nil?
n
end
# Performs a lookup by searching all configured locations for the given _key_. A merge will be performed if
# the value is found in more than one location.
#
# @param key [String] The key to lookup
# @param lookup_invocation [Invocation] The current lookup invocation
# @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
# @return [Object] the found object
# @throw :no_such_key when the object is not found
def unchecked_key_lookup(key, lookup_invocation, merge)
lookup_invocation.with(:data_provider, self) do
merge_strategy = MergeStrategy.strategy(merge)
dps = data_providers(lookup_invocation)
if dps.empty?
lookup_invocation.report_not_found(key)
throw :no_such_key
end
merge_strategy.lookup(dps, lookup_invocation) do |data_provider|
data_provider.unchecked_key_lookup(key, lookup_invocation, merge_strategy)
end
end
end
protected
# Assert that the given config version is accepted by this data provider.
#
# @param config [HieraConfig] the configuration to check
# @return [HieraConfig] the argument
# @raise [Puppet::DataBinding::LookupError] if the configuration version is unacceptable
def assert_config_version(config)
config
end
# Return the root of the configured entity
#
# @param lookup_invocation [Invocation] The current lookup invocation
# @return [Pathname] Path to root of the module
# @raise [Puppet::DataBinding::LookupError] if the given module is can not be found
#
def provider_root(lookup_invocation)
raise NotImplementedError, "#{self.class.name} must implement method '#provider_root'"
end
def configuration_path(lookup_invocation)
provider_root(lookup_invocation) + HieraConfig::CONFIG_FILE_NAME
end
private
def data_providers(lookup_invocation)
config(lookup_invocation).configured_data_providers(lookup_invocation, self)
end
end
end
end
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]