Skip to content

Commit 70d543e

Browse files
authored
Merge pull request #614 from DavidS/MODULES-3543-fix-defined_with_params
(MODULES-3543) Fix define_with_params to handle undef properly
2 parents 50cf8bd + af875b1 commit 70d543e

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

lib/puppet/parser/functions/defined_with_params.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
ret = false
2727
if resource = findresource(reference.to_s)
2828
matches = params.collect do |key, value|
29-
resource[key] == value
29+
resource[key] == (value.eql?(:undef) ? nil : value) # eql? avoids bugs caused by monkeypatching in puppet
3030
end
3131
ret = params.empty? || !matches.include?(false)
3232
end

spec/functions/defined_with_params_spec.rb

+9
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,13 @@
2323
it { is_expected.to run.with_params('User[dan]', {'ensure' => 'present', 'managehome' => false}).and_return(true) }
2424
it { is_expected.to run.with_params('User[dan]', {'ensure' => 'absent', 'managehome' => false}).and_return(false) }
2525
end
26+
27+
describe 'when passing undef values' do
28+
let :pre_condition do
29+
'file { "/tmp/a": }'
30+
end
31+
32+
it { is_expected.to run.with_params('File[/tmp/a]', {}).and_return(true) }
33+
it { is_expected.to run.with_params('File[/tmp/a]', { 'owner' => :undef }).and_return(true) }
34+
end
2635
end

spec/functions/ensure_resource_spec.rb

+7
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@
2828
it { expect(lambda { catalogue }).to contain_user('username2').without_ensure }
2929
end
3030

31+
describe 'after running ensure_resource("user", "username1", { "gid" => undef })' do
32+
before { subject.call(['User', 'username1', { "gid" => :undef }]) }
33+
34+
# this lambda is required due to strangeness within rspec-puppet's expectation handling
35+
it { expect(lambda { catalogue }).to contain_user('username1').with_ensure('present') }
36+
end
37+
3138
describe 'after running ensure_resource("user", ["username1", "username2"], {})' do
3239
before { subject.call(['User', ['username1', 'username2'], {}]) }
3340

0 commit comments

Comments
 (0)