Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update validate_data_hash to return modified hash #9326

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 9 additions & 9 deletions lib/puppet/pops/lookup/module_data_provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,16 @@ def key_lookup_in_default(key, lookup_invocation, merge)
def validate_data_hash(data_hash)
super
module_prefix = "#{module_name}::"
data_hash.each_key.reduce(data_hash) do |memo, k|
next memo if k == LOOKUP_OPTIONS || k.start_with?(module_prefix)

msg = "#{yield} must use keys qualified with the name of the module"
memo = memo.clone if memo.equal?(data_hash)
memo.delete(k)
Puppet.warning("Module '#{module_name}': #{msg}")
memo
data_hash_to_return = {}
data_hash.keys.each do |k|
if k == LOOKUP_OPTIONS || k.start_with?(module_prefix)
data_hash_to_return[k] = data_hash[k]
else
msg = "#{yield} must use keys qualified with the name of the module"
Puppet.warning("Module '#{module_name}': #{msg}; got #{k}")
end
end
data_hash
data_hash_to_return
end

protected
Expand Down
18 changes: 9 additions & 9 deletions spec/unit/functions/lookup_fixture_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def compile_and_get_notifications(code)
Puppet[:code] = code
node.environment.check_for_reparse
catalog = block_given? ? compiler.compile { |cat| yield(compiler.topscope); cat } : compiler.compile
catalog.resources.map(&:ref).select { |r| r.start_with?('Notify[') }.map { |r| r[7..-2] }
catalog.resources.map(&:ref).filter_map { |r| r[7..-2] if r.start_with?('Notify[') }
end

# There is a fully configured 'production' environment in fixtures at this location
Expand Down Expand Up @@ -376,8 +376,8 @@ def compile_and_get_notifications(code)
Puppet[:code] = "include bad_data\nlookup('bad_data::b')"
expect { compiler.compile }.to raise_error(Puppet::ParseError, /did not find a value for the name 'bad_data::b'/)
end
warnings = logs.select { |log| log.level == :warning }.map { |log| log.message }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module")
warnings = logs.filter_map { |log| log.message if log.level == :warning }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module; got b")
end

it 'will succeed finding prefixed keys even when a key in the function provided module data is not prefixed' do
Expand All @@ -390,8 +390,8 @@ def compile_and_get_notifications(code)
PUPPET
expect(resources).to include('module_c')
end
warnings = logs.select { |log| log.level == :warning }.map { |log| log.message }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module")
warnings = logs.filter_map { |log| log.message if log.level == :warning }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module; got b")
end

it 'will resolve global, environment, and module correctly' do
Expand Down Expand Up @@ -422,8 +422,8 @@ def compile_and_get_notifications(code)
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
compiler.compile
end
warnings = logs.select { |log| log.level == :warning }.map { |log| log.message }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module")
warnings = logs.filter_map { |log| log.message if log.level == :warning }
expect(warnings).to include("Module 'bad_data': Value returned from deprecated API function 'bad_data::data' must use keys qualified with the name of the module; got b")
end

it 'a warning will be logged when key in the hiera provided module data is not prefixed' do
Expand All @@ -432,8 +432,8 @@ def compile_and_get_notifications(code)
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
compiler.compile
end
warnings = logs.select { |log| log.level == :warning }.map { |log| log.message }
expect(warnings).to include("Module 'hieraprovider': Value returned from data_hash function 'json_data', when using location '#{environmentpath}/production/modules/hieraprovider/data/first.json', must use keys qualified with the name of the module")
warnings = logs.filter_map { |log| log.message if log.level == :warning }
expect(warnings).to include("Module 'hieraprovider': Value returned from data_hash function 'json_data', when using location '#{environmentpath}/production/modules/hieraprovider/data/first.json', must use keys qualified with the name of the module; got test::param_b")
end
end

Expand Down