Class: Puppet::Plugins::DataProviders::PathBasedDataProvider Abstract Private
- Includes:
- DataProvider
- Defined in:
- lib/puppet/plugins/data_providers/data_provider.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
A data provider that is initialized with a set of paths. When performing lookup, each path is search in the order they appear. If a value is found in more than one location it will be merged according to a given (optional) merge strategy.
Direct Known Subclasses
DataProviders::JsonDataProvider, DataProviders::YamlDataProvider
Instance Attribute Summary collapse
- #name ⇒ Object readonly private
Instance Method Summary collapse
-
#initialize(name, paths, parent_data_provider = nil) ⇒ PathBasedDataProvider
constructor
private
A new instance of PathBasedDataProvider.
-
#load_data(path, data_key, lookup_invocation) ⇒ Hash
private
Gets the data from the compiler, or initializes it by calling #initialize_data if not present in the compiler.
-
#unchecked_lookup(key, lookup_invocation, merge) ⇒ Object
private
Performs a lookup by searching all given paths for the given key.
- #validate_data(data, module_name) ⇒ Object private
Methods included from DataProvider
#data_key, #lookup, #post_process
Methods included from Puppet::Pops::Lookup::Interpolation
Methods included from Puppet::Pops::Lookup::SubLookup
Constructor Details
#initialize(name, paths, parent_data_provider = nil) ⇒ PathBasedDataProvider
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of PathBasedDataProvider.
181 182 183 184 185 |
# File 'lib/puppet/plugins/data_providers/data_provider.rb', line 181 def initialize(name, paths, parent_data_provider = nil) @name = name @paths = paths @parent_data_provider = parent_data_provider end |
Instance Attribute Details
#name ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
176 177 178 |
# File 'lib/puppet/plugins/data_providers/data_provider.rb', line 176 def name @name end |
Instance Method Details
#load_data(path, data_key, lookup_invocation) ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Gets the data from the compiler, or initializes it by calling #initialize_data if not present in the compiler. This means, that data is initialized once per compilation, and the data is cached for as long as the compiler lives (which is for one catalog production). This makes it possible to return data that is tailored for the request.
If data is obtained using the #initialize_data method it will be sent to the #validate_data for validation
199 200 201 202 203 |
# File 'lib/puppet/plugins/data_providers/data_provider.rb', line 199 def load_data(path, data_key, lookup_invocation) compiler = lookup_invocation.scope.compiler adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler) adapter.data[path] ||= validate_data(initialize_data(path, lookup_invocation), data_key) end |
#unchecked_lookup(key, lookup_invocation, merge) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Performs a lookup by searching all given paths for the given key. A merge will be performed if the value is found in more than one location and merge is not nil.
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/puppet/plugins/data_providers/data_provider.rb', line 216 def unchecked_lookup(key, lookup_invocation, merge) segments = split_key(key) root_key = segments.shift module_name = @parent_data_provider.nil? ? nil : @parent_data_provider.data_key(key, lookup_invocation) lookup_invocation.with(:data_provider, self) do merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge) lookup_invocation.with(:merge, merge_strategy) do merged_result = merge_strategy.merge_lookup(@paths) do |path| lookup_invocation.with(:path, path) do if path.exists? hash = load_data(path.path, module_name, lookup_invocation) value = hash[root_key] if value || hash.include?(root_key) value = sub_lookup(key, lookup_invocation, segments, value) unless segments.empty? lookup_invocation.report_found(key, post_process(value, lookup_invocation)) else lookup_invocation.report_not_found(key) throw :no_such_key end else lookup_invocation.report_path_not_found throw :no_such_key end end end lookup_invocation.report_result(merged_result) end end end |
#validate_data(data, module_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
206 207 208 |
# File 'lib/puppet/plugins/data_providers/data_provider.rb', line 206 def validate_data(data, module_name) @parent_data_provider.nil? ? data : @parent_data_provider.validate_data(data, module_name) end |