puppet 6.0.0 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -4
- data/lib/puppet/application/apply.rb +99 -59
- data/lib/puppet/application/cert.rb +2 -112
- data/lib/puppet/configurer.rb +2 -3
- data/lib/puppet/defaults.rb +14 -1
- data/lib/puppet/etc.rb +20 -0
- data/lib/puppet/module/task.rb +29 -38
- data/lib/puppet/parser/catalog_compiler.rb +24 -0
- data/lib/puppet/parser/compiler.rb +3 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -0
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +18 -10
- data/lib/puppet/pops/loader/task_instantiator.rb +13 -70
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
- data/lib/puppet/pops/parser/lexer2.rb +1 -1
- data/lib/puppet/pops/pcore.rb +10 -33
- data/lib/puppet/pops/serialization.rb +1 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +9 -1
- data/lib/puppet/provider/exec.rb +57 -57
- data/lib/puppet/provider/group/aix.rb +1 -15
- data/lib/puppet/provider/group/pw.rb +4 -8
- data/lib/puppet/provider/group/windows_adsi.rb +7 -4
- data/lib/puppet/provider/nameservice.rb +1 -25
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -3
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +19 -3
- data/lib/puppet/provider/user/aix.rb +48 -2
- data/lib/puppet/type/group.rb +62 -18
- data/lib/puppet/type/schedule.rb +7 -0
- data/lib/puppet/util/execution.rb +14 -1
- data/lib/puppet/util/posix.rb +15 -0
- data/lib/puppet/util/storage.rb +12 -0
- data/lib/puppet/util/windows/adsi.rb +60 -1
- data/lib/puppet/util/windows/process.rb +16 -1
- data/lib/puppet/util/windows/service.rb +68 -26
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +36 -3
- data/locales/ja/puppet.po +598 -861
- data/locales/puppet.pot +197 -160
- data/man/man5/puppet.conf.5 +12 -1
- data/man/man8/puppet.8 +1 -1
- data/spec/integration/application/apply_spec.rb +4 -1
- data/spec/integration/util/windows/adsi_spec.rb +2 -1
- data/spec/unit/application/apply_spec.rb +14 -0
- data/spec/unit/configurer_spec.rb +11 -0
- data/spec/unit/etc_spec.rb +25 -0
- data/spec/unit/indirector/catalog/json_spec.rb +9 -3
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +22 -4
- data/spec/unit/pops/loaders/loader_spec.rb +3 -10
- data/spec/unit/pops/loaders/loaders_spec.rb +30 -0
- data/spec/unit/pops/loaders/module_loaders_spec.rb +7 -7
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +16 -0
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +9 -0
- data/spec/unit/pops/types/task_spec.rb +42 -116
- data/spec/unit/provider/group/aix_spec.rb +0 -19
- data/spec/unit/provider/group/pw_spec.rb +0 -6
- data/spec/unit/provider/group/windows_adsi_spec.rb +34 -35
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +2 -2
- data/spec/unit/provider/service/launchd_spec.rb +19 -0
- data/spec/unit/provider/user/aix_spec.rb +43 -2
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -4
- data/spec/unit/puppet_pal_2pec.rb +6 -6
- data/spec/unit/puppet_pal_catalog_spec.rb +58 -0
- data/spec/unit/task_spec.rb +50 -5
- data/spec/unit/type/group_spec.rb +111 -13
- data/spec/unit/util/execution_spec.rb +59 -0
- data/spec/unit/util/posix_spec.rb +28 -0
- data/spec/unit/util/storage_spec.rb +107 -0
- data/spec/unit/util/windows/adsi_spec.rb +100 -5
- data/spec/unit/util/windows/service_spec.rb +100 -43
- metadata +2 -2
@@ -54,23 +54,4 @@ describe 'Puppet::Type::Group::Provider::Aix' do
|
|
54
54
|
expect(provider_class.find(1, ia_module_args)).to eql(expected_group)
|
55
55
|
end
|
56
56
|
end
|
57
|
-
|
58
|
-
describe '.users_to_members' do
|
59
|
-
it 'converts the users attribute to the members property' do
|
60
|
-
expect(provider_class.users_to_members('foo,bar'))
|
61
|
-
.to eql(['foo', 'bar'])
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '.members_to_users' do
|
66
|
-
it 'returns the members property as-is if it is not an Array' do
|
67
|
-
expect(provider_class.members_to_users('members'))
|
68
|
-
.to eql('members')
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'returns the members property as a comma-separated string if it is an Array' do
|
72
|
-
expect(provider_class.members_to_users(['user1', 'user2']))
|
73
|
-
.to eql('user1,user2')
|
74
|
-
end
|
75
|
-
end
|
76
57
|
end
|
@@ -71,11 +71,5 @@ describe provider_class do
|
|
71
71
|
provider.expects(:execute).with(all_of(includes("-M"), includes("user2")), has_entry(:custom_environment, {}))
|
72
72
|
provider.members = "user2"
|
73
73
|
end
|
74
|
-
|
75
|
-
it "should use -M with all the given users when the members property is changed with an array" do
|
76
|
-
resource[:members] = ["user1", "user2"]
|
77
|
-
provider.expects(:execute).with(all_of(includes("-M"), includes("user3,user4")), has_entry(:custom_environment, {}))
|
78
|
-
provider.members = ["user3", "user4"]
|
79
|
-
end
|
80
74
|
end
|
81
75
|
end
|
@@ -49,25 +49,25 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
49
49
|
describe "#members_insync?" do
|
50
50
|
it "should return true for same lists of members" do
|
51
51
|
current = [
|
52
|
-
|
53
|
-
|
52
|
+
'user1',
|
53
|
+
'user2'
|
54
54
|
]
|
55
55
|
expect(provider.members_insync?(current, ['user1', 'user2'])).to be_truthy
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should return true for same lists of unordered members" do
|
59
59
|
current = [
|
60
|
-
|
61
|
-
|
60
|
+
'user1',
|
61
|
+
'user2'
|
62
62
|
]
|
63
63
|
expect(provider.members_insync?(current, ['user2', 'user1'])).to be_truthy
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should return true for same lists of members irrespective of duplicates" do
|
67
67
|
current = [
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
'user1',
|
69
|
+
'user2',
|
70
|
+
'user2'
|
71
71
|
]
|
72
72
|
expect(provider.members_insync?(current, ['user2', 'user1', 'user1'])).to be_truthy
|
73
73
|
end
|
@@ -91,9 +91,9 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
91
91
|
|
92
92
|
it "should return true when current and should contain the same users in a different order" do
|
93
93
|
current = [
|
94
|
-
|
95
|
-
|
96
|
-
|
94
|
+
'user1',
|
95
|
+
'user2',
|
96
|
+
'user3'
|
97
97
|
]
|
98
98
|
expect(provider.members_insync?(current, ['user3', 'user1', 'user2'])).to be_truthy
|
99
99
|
end
|
@@ -104,21 +104,21 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
104
104
|
|
105
105
|
it "should return false when should is nil" do
|
106
106
|
current = [
|
107
|
-
|
107
|
+
'user1'
|
108
108
|
]
|
109
109
|
expect(provider.members_insync?(current, nil)).to be_falsey
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should return false when current contains different users than should" do
|
113
113
|
current = [
|
114
|
-
|
114
|
+
'user1'
|
115
115
|
]
|
116
116
|
expect(provider.members_insync?(current, ['user2'])).to be_falsey
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should return false when current contains members and should is empty" do
|
120
120
|
current = [
|
121
|
-
|
121
|
+
'user1'
|
122
122
|
]
|
123
123
|
expect(provider.members_insync?(current, [])).to be_falsey
|
124
124
|
end
|
@@ -129,16 +129,16 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
129
129
|
|
130
130
|
it "should return false when should user(s) are not the only items in the current" do
|
131
131
|
current = [
|
132
|
-
|
133
|
-
|
132
|
+
'user1',
|
133
|
+
'user2'
|
134
134
|
]
|
135
135
|
expect(provider.members_insync?(current, ['user1'])).to be_falsey
|
136
136
|
end
|
137
137
|
|
138
138
|
it "should return false when current user(s) is not empty and should is an empty list" do
|
139
139
|
current = [
|
140
|
-
|
141
|
-
|
140
|
+
'user1',
|
141
|
+
'user2'
|
142
142
|
]
|
143
143
|
expect(provider.members_insync?(current, [])).to be_falsey
|
144
144
|
end
|
@@ -156,21 +156,21 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
156
156
|
|
157
157
|
it "should return true when should is nil" do
|
158
158
|
current = [
|
159
|
-
|
159
|
+
'user1'
|
160
160
|
]
|
161
161
|
expect(provider.members_insync?(current, nil)).to be_truthy
|
162
162
|
end
|
163
163
|
|
164
164
|
it "should return false when current contains different users than should" do
|
165
165
|
current = [
|
166
|
-
|
166
|
+
'user1'
|
167
167
|
]
|
168
168
|
expect(provider.members_insync?(current, ['user2'])).to be_falsey
|
169
169
|
end
|
170
170
|
|
171
171
|
it "should return true when current contains members and should is empty" do
|
172
172
|
current = [
|
173
|
-
|
173
|
+
'user1'
|
174
174
|
]
|
175
175
|
expect(provider.members_insync?(current, [])).to be_truthy
|
176
176
|
end
|
@@ -181,25 +181,25 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
181
181
|
|
182
182
|
it "should return true when current user(s) contains at least the should list" do
|
183
183
|
current = [
|
184
|
-
|
185
|
-
|
184
|
+
'user1',
|
185
|
+
'user2'
|
186
186
|
]
|
187
187
|
expect(provider.members_insync?(current, ['user1'])).to be_truthy
|
188
188
|
end
|
189
189
|
|
190
190
|
it "should return true when current user(s) is not empty and should is an empty list" do
|
191
191
|
current = [
|
192
|
-
|
193
|
-
|
192
|
+
'user1',
|
193
|
+
'user2'
|
194
194
|
]
|
195
195
|
expect(provider.members_insync?(current, [])).to be_truthy
|
196
196
|
end
|
197
197
|
|
198
198
|
it "should return true when current user(s) contains at least the should list, even unordered" do
|
199
199
|
current = [
|
200
|
-
|
201
|
-
|
202
|
-
|
200
|
+
'user3',
|
201
|
+
'user1',
|
202
|
+
'user2'
|
203
203
|
]
|
204
204
|
expect(provider.members_insync?(current, ['user2','user1'])).to be_truthy
|
205
205
|
end
|
@@ -238,13 +238,14 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
238
238
|
|
239
239
|
it "should be able to provide a list of members" do
|
240
240
|
provider.group.stubs(:members).returns ['user1', 'user2', 'user3']
|
241
|
+
Puppet::Util::Windows::ADSI::User.stubs(:name_sid_hash)
|
242
|
+
.with(provider.group.members)
|
243
|
+
.returns({ 'user1' => '', 'user2' => '', 'user3' => '' })
|
241
244
|
|
242
245
|
expect(provider.members).to match_array(['user1', 'user2', 'user3'])
|
243
246
|
end
|
244
247
|
|
245
248
|
it "should be able to set group members" do
|
246
|
-
provider.group.stubs(:members).returns ['user1', 'user2']
|
247
|
-
|
248
249
|
member_sids = [
|
249
250
|
stub(:account => 'user1', :domain => 'testcomputername', :sid => 1),
|
250
251
|
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2),
|
@@ -259,7 +260,7 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
259
260
|
provider.group.expects(:remove_member_sids).with(member_sids[0])
|
260
261
|
provider.group.expects(:add_member_sids).with(member_sids[2])
|
261
262
|
|
262
|
-
provider.members =
|
263
|
+
provider.members = 'user2,user3'
|
263
264
|
end
|
264
265
|
end
|
265
266
|
|
@@ -268,12 +269,13 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
268
269
|
resource[:members] = ['user1', 'user2']
|
269
270
|
|
270
271
|
group = stub 'group'
|
272
|
+
group.stubs(:members).returns([])
|
271
273
|
Puppet::Util::Windows::ADSI::Group.expects(:create).with('testers').returns group
|
272
274
|
|
273
275
|
create = sequence('create')
|
274
276
|
group.expects(:commit).in_sequence(create)
|
275
277
|
# due to PUP-1967, defaultto false will set the default to nil
|
276
|
-
group.expects(:set_members).with(
|
278
|
+
group.expects(:set_members).with('user1,user2', nil).in_sequence(create)
|
277
279
|
|
278
280
|
provider.create
|
279
281
|
end
|
@@ -290,10 +292,7 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet::Util:
|
|
290
292
|
connection.expects(:Create)
|
291
293
|
connection.expects(:SetInfo).raises( WIN32OLERuntimeError.new("(in OLE method `SetInfo': )\n OLE error code:8007089A in Active Directory\n The specified username is invalid.\r\n\n HRESULT error code:0x80020009\n Exception occurred."))
|
292
294
|
|
293
|
-
expect{ provider.create }.to raise_error(
|
294
|
-
Puppet::Error,
|
295
|
-
/not able to create\/delete domain groups/
|
296
|
-
)
|
295
|
+
expect{ provider.create }.to raise_error(Puppet::Error)
|
297
296
|
end
|
298
297
|
|
299
298
|
it 'should commit a newly created group' do
|
@@ -17,13 +17,13 @@ end
|
|
17
17
|
|
18
18
|
it "[#6009] should handle nested arrays of members" do
|
19
19
|
current = ["foo", "bar", "baz"]
|
20
|
-
desired =
|
20
|
+
desired = "foo,quux,qorp"
|
21
21
|
group = 'example'
|
22
22
|
|
23
23
|
@resource.stubs(:[]).with(:name).returns(group)
|
24
24
|
@resource.stubs(:[]).with(:auth_membership).returns(true)
|
25
25
|
@provider.instance_variable_set(:@property_value_cache_hash,
|
26
|
-
{ :members => current })
|
26
|
+
{ :members => current.join(',') })
|
27
27
|
|
28
28
|
%w{bar baz}.each do |del|
|
29
29
|
@provider.expects(:execute).once.
|
@@ -345,4 +345,23 @@ describe 'Puppet::Type::Service::Provider::Launchd', unless: Puppet::Util::Platf
|
|
345
345
|
expect { provider.jobsearch("NOSUCH") }.to raise_error(Puppet::Error)
|
346
346
|
end
|
347
347
|
end
|
348
|
+
|
349
|
+
describe "read_overrides" do
|
350
|
+
before do
|
351
|
+
Kernel.stubs(:sleep)
|
352
|
+
end
|
353
|
+
it "should read overrides" do
|
354
|
+
provider.expects(:read_plist).once.returns({})
|
355
|
+
expect(provider.read_overrides).to eq({})
|
356
|
+
end
|
357
|
+
it "should retry if read_plist fails" do
|
358
|
+
provider.expects(:read_plist).once.returns({})
|
359
|
+
provider.expects(:read_plist).once.returns(nil)
|
360
|
+
expect(provider.read_overrides).to eq({})
|
361
|
+
end
|
362
|
+
it "raises Puppet::Error after 20 attempts" do
|
363
|
+
provider.expects(:read_plist).times(20).returns(nil)
|
364
|
+
expect { provider.read_overrides }.to raise_error(Puppet::Error)
|
365
|
+
end
|
366
|
+
end
|
348
367
|
end
|
@@ -70,11 +70,23 @@ describe 'Puppet::Type::User::Provider::Aix' do
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
describe '.
|
73
|
+
describe '.groups_attribute_to_property' do
|
74
|
+
it "reads the user's groups from the etc/groups file" do
|
75
|
+
groups = ['system', 'adm']
|
76
|
+
Puppet::Util::POSIX.stubs(:groups_of).with(resource[:name]).returns(groups)
|
77
|
+
|
78
|
+
actual_groups = provider_class.groups_attribute_to_property(provider, 'unused_value')
|
79
|
+
expected_groups = groups.join(',')
|
80
|
+
|
81
|
+
expect(actual_groups).to eql(expected_groups)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '.groups_property_to_attribute' do
|
74
86
|
it 'raises an ArgumentError if the groups are space-separated' do
|
75
87
|
groups = "foo bar baz"
|
76
88
|
expect do
|
77
|
-
provider_class.
|
89
|
+
provider_class.groups_property_to_attribute(groups)
|
78
90
|
end.to raise_error do |error|
|
79
91
|
expect(error).to be_a(ArgumentError)
|
80
92
|
|
@@ -84,6 +96,33 @@ describe 'Puppet::Type::User::Provider::Aix' do
|
|
84
96
|
end
|
85
97
|
end
|
86
98
|
|
99
|
+
describe '#gid=' do
|
100
|
+
let(:value) { 'new_pgrp' }
|
101
|
+
|
102
|
+
let(:old_pgrp) { 'old_pgrp' }
|
103
|
+
let(:cur_groups) { 'system,adm' }
|
104
|
+
before(:each) do
|
105
|
+
provider.stubs(:gid).returns(old_pgrp)
|
106
|
+
provider.stubs(:groups).returns(cur_groups)
|
107
|
+
provider.stubs(:set)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'raises a Puppet::Error if it fails to set the groups property' do
|
111
|
+
provider.stubs(:set)
|
112
|
+
.with(:groups, cur_groups)
|
113
|
+
.raises(Puppet::ExecutionFailure, 'failed to reset the groups!')
|
114
|
+
|
115
|
+
expect { provider.gid = value }.to raise_error do |error|
|
116
|
+
expect(error).to be_a(Puppet::Error)
|
117
|
+
|
118
|
+
expect(error.message).to match('groups')
|
119
|
+
expect(error.message).to match(cur_groups)
|
120
|
+
expect(error.message).to match(old_pgrp)
|
121
|
+
expect(error.message).to match(value)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
87
126
|
describe '#parse_password' do
|
88
127
|
def call_parse_password
|
89
128
|
File.open(my_fixture('aix_passwd_file.out')) do |f|
|
@@ -163,9 +202,11 @@ describe 'Puppet::Type::User::Provider::Aix' do
|
|
163
202
|
describe '#create' do
|
164
203
|
it 'should create the user' do
|
165
204
|
provider.resource.stubs(:should).with(anything).returns(nil)
|
205
|
+
provider.resource.stubs(:should).with(:groups).returns('g1,g2')
|
166
206
|
provider.resource.stubs(:should).with(:password).returns('password')
|
167
207
|
|
168
208
|
provider.expects(:execute)
|
209
|
+
provider.expects(:groups=).with('g1,g2')
|
169
210
|
provider.expects(:password=).with('password')
|
170
211
|
|
171
212
|
provider.create
|
@@ -259,10 +259,7 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet::Util::
|
|
259
259
|
connection.expects(:Put).with('UserFlags', true)
|
260
260
|
connection.expects(:SetInfo).raises( WIN32OLERuntimeError.new("(in OLE method `SetInfo': )\n OLE error code:8007089A in Active Directory\n The specified username is invalid.\r\n\n HRESULT error code:0x80020009\n Exception occurred."))
|
261
261
|
|
262
|
-
expect{ provider.create }.to raise_error(
|
263
|
-
Puppet::Error,
|
264
|
-
/not able to create\/delete domain users/
|
265
|
-
)
|
262
|
+
expect{ provider.create }.to raise_error(Puppet::Error)
|
266
263
|
end
|
267
264
|
end
|
268
265
|
|
@@ -767,13 +767,13 @@ describe 'Puppet Pal' do
|
|
767
767
|
[ signature.runnable_with?('string_param' => 'foo', 'int_param' => 10),
|
768
768
|
signature.runnable_with?('anything_goes' => 'foo'),
|
769
769
|
signature.task_hash['name'],
|
770
|
-
signature.task_hash['parameters']['string_param']['description'],
|
771
|
-
signature.
|
772
|
-
signature.
|
770
|
+
signature.task_hash['metadata']['parameters']['string_param']['description'],
|
771
|
+
signature.task_hash['metadata']['description'],
|
772
|
+
signature.task_hash['metadata']['parameters']['int_param']['type'],
|
773
773
|
]
|
774
774
|
end
|
775
775
|
end
|
776
|
-
expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask',
|
776
|
+
expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask', 'Integer'])
|
777
777
|
end
|
778
778
|
|
779
779
|
it '"TaskSignature#runnable_with?" calls a given lambda if there is an error' do
|
@@ -802,7 +802,7 @@ describe 'Puppet Pal' do
|
|
802
802
|
signature.task_hash
|
803
803
|
end
|
804
804
|
end
|
805
|
-
expect(result['input_method']).to be_nil
|
805
|
+
expect(result['metadata']['input_method']).to be_nil
|
806
806
|
end
|
807
807
|
|
808
808
|
it 'task input_method is parsed from task metadata' do
|
@@ -812,7 +812,7 @@ describe 'Puppet Pal' do
|
|
812
812
|
signature.task_hash
|
813
813
|
end
|
814
814
|
end
|
815
|
-
expect(result['input_method']).to eq('stdin')
|
815
|
+
expect(result['metadata']['input_method']).to eq('stdin')
|
816
816
|
end
|
817
817
|
|
818
818
|
it '"list_tasks" returns an array with all tasks that can be loaded' do
|
@@ -463,6 +463,64 @@ describe 'Puppet Pal' do
|
|
463
463
|
end.to raise_error(/does not represent a literal value/)
|
464
464
|
end
|
465
465
|
|
466
|
+
it 'the "evaluate" method evaluates but does not evaluate lazy constructs' do
|
467
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
468
|
+
ctx.with_catalog_compiler do |c|
|
469
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
|
470
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
471
|
+
end
|
472
|
+
end
|
473
|
+
parsed = JSON.parse(result)
|
474
|
+
expect(parsed['resources']).to_not include(include('type' => 'Notify'))
|
475
|
+
end
|
476
|
+
|
477
|
+
it 'an "evaluate" followed by "compile_additions" evaluates lazy constructs' do
|
478
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
479
|
+
ctx.with_catalog_compiler do |c|
|
480
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
|
481
|
+
c.compile_additions
|
482
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
483
|
+
end
|
484
|
+
end
|
485
|
+
parsed = JSON.parse(result)
|
486
|
+
expect(parsed['resources']).to include(include('type' => 'Notify'))
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'an "evaluate" followed by "compile_additions" validates the result' do
|
490
|
+
expect do
|
491
|
+
Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
492
|
+
ctx.with_catalog_compiler do |c|
|
493
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
494
|
+
c.compile_additions
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
|
498
|
+
end
|
499
|
+
|
500
|
+
it 'an "evaluate" followed by "evaluate_additions" does not validate the result' do
|
501
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
502
|
+
ctx.with_catalog_compiler do |c|
|
503
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
504
|
+
c.evaluate_additions
|
505
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
506
|
+
end
|
507
|
+
end
|
508
|
+
parsed = JSON.parse(result)
|
509
|
+
expect(parsed['resources']).to include(include('type' => 'Notify'))
|
510
|
+
end
|
511
|
+
|
512
|
+
it 'an "evaluate" followed by "evaluate_additions" and "validate" validates the result' do
|
513
|
+
expect do
|
514
|
+
Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
515
|
+
ctx.with_catalog_compiler do |c|
|
516
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
517
|
+
c.compile_additions
|
518
|
+
c.validate
|
519
|
+
end
|
520
|
+
end
|
521
|
+
end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
|
522
|
+
end
|
523
|
+
|
466
524
|
end
|
467
525
|
end
|
468
526
|
|