puppet 0.9.2 → 0.13.0
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.
- data/CHANGELOG +58 -0
- data/README +21 -18
- data/Rakefile +176 -36
- data/bin/puppet +34 -48
- data/bin/puppetca +41 -28
- data/bin/puppetd +87 -65
- data/bin/puppetdoc +99 -23
- data/bin/puppetmasterd +72 -91
- data/conf/redhat/client.init +80 -0
- data/conf/redhat/client.sysconfig +11 -0
- data/conf/redhat/fileserver.conf +12 -0
- data/conf/redhat/puppet.spec +130 -0
- data/conf/redhat/server.init +89 -0
- data/conf/redhat/server.sysconfig +9 -0
- data/examples/code/allatonce +2 -2
- data/examples/code/assignments +1 -1
- data/examples/code/classing +2 -2
- data/examples/code/components +2 -2
- data/examples/code/file.bl +5 -5
- data/examples/code/filedefaults +2 -2
- data/examples/code/fileparsing +1 -1
- data/examples/code/filerecursion +1 -1
- data/examples/code/functions +1 -1
- data/examples/code/groups +1 -1
- data/examples/code/importing +1 -1
- data/examples/code/nodes +1 -1
- data/examples/code/one +1 -1
- data/examples/code/relationships +2 -2
- data/examples/code/simpletests +5 -5
- data/examples/code/snippets/argumentdefaults +2 -2
- data/examples/code/snippets/casestatement +16 -8
- data/examples/code/snippets/classheirarchy.pp +4 -4
- data/examples/code/snippets/classincludes.pp +4 -4
- data/examples/code/snippets/classpathtest +2 -2
- data/examples/code/snippets/componentmetaparams.pp +11 -0
- data/examples/code/snippets/dirchmod +5 -5
- data/examples/code/snippets/emptyclass.pp +9 -0
- data/examples/code/snippets/failmissingexecpath.pp +1 -1
- data/examples/code/snippets/falsevalues.pp +1 -1
- data/examples/code/snippets/filecreate +5 -5
- data/examples/code/snippets/implicititeration +5 -5
- data/examples/code/snippets/multipleinstances +4 -4
- data/examples/code/snippets/namevartest +3 -3
- data/examples/code/snippets/scopetest +1 -1
- data/examples/code/snippets/selectorvalues.pp +3 -3
- data/examples/code/snippets/simpledefaults +2 -2
- data/examples/code/snippets/simpleselector +5 -5
- data/examples/code/snippets/singleary.pp +19 -0
- data/examples/root/etc/init.d/sleeper +3 -2
- data/ext/emacs/puppet-mode-init.el +6 -0
- data/ext/emacs/puppet-mode.el +189 -0
- data/ext/ldap/puppet.schema +17 -0
- data/ext/{module:puppet → module_puppet} +30 -31
- data/ext/vim/filetype.vim +9 -0
- data/ext/vim/puppet.vim +87 -0
- data/install.rb +63 -30
- data/lib/puppet.rb +216 -122
- data/lib/puppet/client.rb +51 -416
- data/lib/puppet/client/ca.rb +17 -0
- data/lib/puppet/client/dipper.rb +78 -0
- data/lib/puppet/client/file.rb +20 -0
- data/lib/puppet/client/log.rb +17 -0
- data/lib/puppet/client/master.rb +246 -0
- data/lib/puppet/client/proxy.rb +27 -0
- data/lib/puppet/client/status.rb +7 -0
- data/lib/puppet/config.rb +563 -13
- data/lib/puppet/daemon.rb +50 -22
- data/lib/puppet/element.rb +4 -4
- data/lib/puppet/event-loop.rb +1 -0
- data/lib/puppet/event-loop/better-definers.rb +367 -0
- data/lib/puppet/event-loop/event-loop.rb +355 -0
- data/lib/puppet/event-loop/signal-system.rb +220 -0
- data/lib/puppet/event.rb +9 -11
- data/lib/puppet/filetype.rb +195 -0
- data/lib/puppet/log.rb +35 -12
- data/lib/puppet/metric.rb +2 -2
- data/lib/puppet/networkclient.rb +145 -0
- data/lib/puppet/parameter.rb +335 -0
- data/lib/puppet/parser/ast.rb +42 -1453
- data/lib/puppet/parser/ast/astarray.rb +88 -0
- data/lib/puppet/parser/ast/branch.rb +47 -0
- data/lib/puppet/parser/ast/caseopt.rb +66 -0
- data/lib/puppet/parser/ast/casestatement.rb +78 -0
- data/lib/puppet/parser/ast/classdef.rb +78 -0
- data/lib/puppet/parser/ast/compdef.rb +111 -0
- data/lib/puppet/parser/ast/component.rb +105 -0
- data/lib/puppet/parser/ast/hostclass.rb +82 -0
- data/lib/puppet/parser/ast/leaf.rb +86 -0
- data/lib/puppet/parser/ast/node.rb +103 -0
- data/lib/puppet/parser/ast/nodedef.rb +68 -0
- data/lib/puppet/parser/ast/objectdef.rb +336 -0
- data/lib/puppet/parser/ast/objectparam.rb +30 -0
- data/lib/puppet/parser/ast/objectref.rb +76 -0
- data/lib/puppet/parser/ast/selector.rb +60 -0
- data/lib/puppet/parser/ast/typedefaults.rb +45 -0
- data/lib/puppet/parser/ast/vardef.rb +44 -0
- data/lib/puppet/parser/interpreter.rb +31 -14
- data/lib/puppet/parser/lexer.rb +2 -4
- data/lib/puppet/parser/parser.rb +332 -242
- data/lib/puppet/parser/scope.rb +55 -38
- data/lib/puppet/server.rb +43 -44
- data/lib/puppet/server/authstore.rb +3 -6
- data/lib/puppet/server/ca.rb +5 -2
- data/lib/puppet/server/filebucket.rb +2 -4
- data/lib/puppet/server/fileserver.rb +28 -12
- data/lib/puppet/server/logger.rb +15 -4
- data/lib/puppet/server/master.rb +62 -7
- data/lib/puppet/sslcertificates.rb +41 -607
- data/lib/puppet/sslcertificates/ca.rb +291 -0
- data/lib/puppet/sslcertificates/certificate.rb +283 -0
- data/lib/puppet/statechange.rb +6 -1
- data/lib/puppet/storage.rb +67 -56
- data/lib/puppet/transaction.rb +25 -9
- data/lib/puppet/transportable.rb +102 -22
- data/lib/puppet/type.rb +1096 -315
- data/lib/puppet/type/component.rb +30 -21
- data/lib/puppet/type/cron.rb +409 -448
- data/lib/puppet/type/exec.rb +234 -174
- data/lib/puppet/type/group.rb +65 -82
- data/lib/puppet/type/nameservice.rb +247 -3
- data/lib/puppet/type/nameservice/netinfo.rb +29 -40
- data/lib/puppet/type/nameservice/objectadd.rb +52 -66
- data/lib/puppet/type/nameservice/posix.rb +6 -194
- data/lib/puppet/type/package.rb +447 -295
- data/lib/puppet/type/package/apt.rb +51 -50
- data/lib/puppet/type/package/bsd.rb +82 -0
- data/lib/puppet/type/package/dpkg.rb +85 -88
- data/lib/puppet/type/package/rpm.rb +67 -63
- data/lib/puppet/type/package/sun.rb +119 -98
- data/lib/puppet/type/package/yum.rb +41 -37
- data/lib/puppet/type/parsedtype.rb +295 -0
- data/lib/puppet/type/parsedtype/host.rb +143 -0
- data/lib/puppet/type/parsedtype/port.rb +232 -0
- data/lib/puppet/type/parsedtype/sshkey.rb +129 -0
- data/lib/puppet/type/pfile.rb +484 -460
- data/lib/puppet/type/pfile/checksum.rb +237 -181
- data/lib/puppet/type/pfile/content.rb +67 -0
- data/lib/puppet/type/pfile/ensure.rb +212 -0
- data/lib/puppet/type/pfile/group.rb +106 -105
- data/lib/puppet/type/pfile/mode.rb +98 -101
- data/lib/puppet/type/pfile/source.rb +228 -209
- data/lib/puppet/type/pfile/type.rb +18 -21
- data/lib/puppet/type/pfile/uid.rb +127 -130
- data/lib/puppet/type/pfilebucket.rb +68 -63
- data/lib/puppet/type/schedule.rb +341 -0
- data/lib/puppet/type/service.rb +351 -255
- data/lib/puppet/type/service/base.rb +9 -14
- data/lib/puppet/type/service/debian.rb +32 -38
- data/lib/puppet/type/service/init.rb +130 -130
- data/lib/puppet/type/service/smf.rb +48 -20
- data/lib/puppet/type/state.rb +229 -16
- data/lib/puppet/type/symlink.rb +51 -63
- data/lib/puppet/type/tidy.rb +105 -102
- data/lib/puppet/type/user.rb +118 -180
- data/lib/puppet/util.rb +100 -6
- data/test/certmgr/certmgr.rb +0 -1
- data/test/client/client.rb +4 -4
- data/test/executables/puppetbin.rb +7 -14
- data/test/executables/puppetca.rb +18 -24
- data/test/executables/puppetd.rb +7 -16
- data/test/executables/puppetmasterd.rb +7 -9
- data/test/executables/puppetmodule.rb +11 -16
- data/test/language/ast.rb +11 -7
- data/test/language/interpreter.rb +1 -1
- data/test/language/scope.rb +2 -0
- data/test/language/snippets.rb +30 -5
- data/test/language/transportable.rb +77 -0
- data/test/other/config.rb +316 -0
- data/test/other/events.rb +22 -21
- data/test/other/log.rb +14 -14
- data/test/other/metrics.rb +4 -8
- data/test/other/overrides.rb +5 -5
- data/test/other/relationships.rb +4 -2
- data/test/other/storage.rb +64 -3
- data/test/other/transactions.rb +20 -20
- data/test/parser/parser.rb +7 -4
- data/test/puppet/conffiles.rb +12 -12
- data/test/puppet/defaults.rb +13 -11
- data/test/puppet/utiltest.rb +14 -11
- data/test/puppettest.rb +156 -48
- data/test/server/bucket.rb +2 -2
- data/test/server/fileserver.rb +6 -6
- data/test/server/logger.rb +19 -11
- data/test/server/master.rb +33 -4
- data/test/server/server.rb +2 -7
- data/test/types/basic.rb +5 -7
- data/test/types/component.rb +22 -18
- data/test/types/cron.rb +111 -44
- data/test/types/exec.rb +116 -59
- data/test/types/file.rb +262 -137
- data/test/types/filebucket.rb +13 -15
- data/test/types/fileignoresource.rb +12 -16
- data/test/types/filesources.rb +73 -48
- data/test/types/filetype.rb +13 -15
- data/test/types/group.rb +15 -13
- data/test/types/host.rb +146 -0
- data/test/types/package.rb +74 -63
- data/test/types/port.rb +139 -0
- data/test/types/query.rb +8 -8
- data/test/types/schedule.rb +335 -0
- data/test/types/service.rb +137 -21
- data/test/types/sshkey.rb +140 -0
- data/test/types/symlink.rb +3 -5
- data/test/types/tidy.rb +5 -14
- data/test/types/type.rb +67 -11
- data/test/types/user.rb +25 -23
- metadata +186 -122
- data/lib/puppet/type/pfile/create.rb +0 -108
- data/lib/puppet/type/pprocess.rb +0 -97
- data/lib/puppet/type/typegen.rb +0 -149
- data/lib/puppet/type/typegen/filerecord.rb +0 -243
- data/lib/puppet/type/typegen/filetype.rb +0 -316
- data/test/other/state.rb +0 -106
data/test/types/file.rb
CHANGED
@@ -17,7 +17,7 @@ class TestFile < Test::Unit::TestCase
|
|
17
17
|
def mkfile(hash)
|
18
18
|
file = nil
|
19
19
|
assert_nothing_raised {
|
20
|
-
file = Puppet
|
20
|
+
file = Puppet.type(:file).create(hash)
|
21
21
|
}
|
22
22
|
return file
|
23
23
|
end
|
@@ -36,13 +36,14 @@ class TestFile < Test::Unit::TestCase
|
|
36
36
|
begin
|
37
37
|
initstorage
|
38
38
|
rescue
|
39
|
-
system("rm -rf %s" % Puppet[:
|
39
|
+
system("rm -rf %s" % Puppet[:statefile])
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def teardown
|
44
44
|
clearstorage
|
45
45
|
Puppet::Storage.clear
|
46
|
+
system("rm -rf %s" % Puppet[:statefile])
|
46
47
|
super
|
47
48
|
end
|
48
49
|
|
@@ -88,19 +89,14 @@ class TestFile < Test::Unit::TestCase
|
|
88
89
|
us = {}
|
89
90
|
us[uid] = name
|
90
91
|
users.each { |uid, name|
|
91
|
-
|
92
|
-
assert_nothing_raised() {
|
93
|
-
file.sync
|
94
|
-
}
|
92
|
+
assert_apply(file)
|
95
93
|
assert_nothing_raised() {
|
96
94
|
file[:owner] = name
|
97
95
|
}
|
98
96
|
assert_nothing_raised() {
|
99
97
|
file.retrieve
|
100
98
|
}
|
101
|
-
|
102
|
-
file.sync
|
103
|
-
}
|
99
|
+
assert_apply(file)
|
104
100
|
}
|
105
101
|
end
|
106
102
|
|
@@ -125,17 +121,17 @@ class TestFile < Test::Unit::TestCase
|
|
125
121
|
|
126
122
|
file = nil
|
127
123
|
assert_nothing_raised {
|
128
|
-
file = Puppet
|
124
|
+
file = Puppet.type(:file).create(
|
129
125
|
:path => path,
|
130
126
|
:owner => user.name,
|
131
|
-
:
|
127
|
+
:ensure => "file",
|
132
128
|
:mode => "755"
|
133
129
|
)
|
134
130
|
}
|
135
131
|
|
136
132
|
comp = newcomp("createusertest", file)
|
137
133
|
|
138
|
-
assert_events(
|
134
|
+
assert_events([:file_created], comp)
|
139
135
|
end
|
140
136
|
|
141
137
|
def test_ownerasroot
|
@@ -151,6 +147,7 @@ class TestFile < Test::Unit::TestCase
|
|
151
147
|
else
|
152
148
|
count += 1
|
153
149
|
end
|
150
|
+
next if passwd.uid < 0
|
154
151
|
users[passwd.uid] = passwd.name
|
155
152
|
}
|
156
153
|
|
@@ -175,19 +172,14 @@ class TestFile < Test::Unit::TestCase
|
|
175
172
|
changes << file.evaluate
|
176
173
|
}
|
177
174
|
assert(changes.length > 0)
|
178
|
-
|
179
|
-
|
180
|
-
}
|
181
|
-
assert_nothing_raised() {
|
182
|
-
file.evaluate
|
183
|
-
}
|
175
|
+
assert_apply(file)
|
176
|
+
file.retrieve
|
184
177
|
assert(file.insync?())
|
185
178
|
assert_nothing_raised() {
|
186
179
|
file[:owner] = uid
|
187
180
|
}
|
188
|
-
|
189
|
-
|
190
|
-
}
|
181
|
+
assert_apply(file)
|
182
|
+
file.retrieve
|
191
183
|
# make sure changing to number doesn't cause a sync
|
192
184
|
assert(file.insync?())
|
193
185
|
}
|
@@ -211,15 +203,8 @@ class TestFile < Test::Unit::TestCase
|
|
211
203
|
}
|
212
204
|
assert(file.state(:group))
|
213
205
|
assert(file.state(:group).should)
|
214
|
-
|
215
|
-
|
216
|
-
}
|
217
|
-
assert_nothing_raised() {
|
218
|
-
file.sync
|
219
|
-
}
|
220
|
-
assert_nothing_raised() {
|
221
|
-
file.evaluate
|
222
|
-
}
|
206
|
+
assert_apply(file)
|
207
|
+
file.retrieve
|
223
208
|
assert(file.insync?())
|
224
209
|
assert_nothing_raised() {
|
225
210
|
file.delete(:group)
|
@@ -231,47 +216,37 @@ class TestFile < Test::Unit::TestCase
|
|
231
216
|
end
|
232
217
|
|
233
218
|
def test_create
|
234
|
-
%w{a b c d}.collect { |name|
|
219
|
+
%w{a b c d}.collect { |name| tempfile() + name.to_s }.each { |path|
|
235
220
|
file =nil
|
236
221
|
assert_nothing_raised() {
|
237
|
-
file = Puppet
|
222
|
+
file = Puppet.type(:file).create(
|
238
223
|
:name => path,
|
239
|
-
:
|
224
|
+
:ensure => "file"
|
240
225
|
)
|
241
226
|
}
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
assert_nothing_raised() {
|
246
|
-
file.sync
|
247
|
-
}
|
248
|
-
assert_nothing_raised() {
|
249
|
-
file.evaluate
|
250
|
-
}
|
227
|
+
assert_events([:file_created], file)
|
228
|
+
assert_events([], file)
|
229
|
+
assert(FileTest.file?(path), "File does not exist")
|
251
230
|
assert(file.insync?())
|
252
|
-
assert(FileTest.file?(path))
|
253
231
|
@@tmpfiles.push path
|
254
232
|
}
|
255
233
|
end
|
256
234
|
|
257
235
|
def test_create_dir
|
258
|
-
|
236
|
+
basedir = tempfile()
|
237
|
+
Dir.mkdir(basedir)
|
238
|
+
%w{a b c d}.collect { |name| "#{basedir}/%s" % name }.each { |path|
|
259
239
|
file = nil
|
260
240
|
assert_nothing_raised() {
|
261
|
-
file = Puppet
|
241
|
+
file = Puppet.type(:file).create(
|
262
242
|
:name => path,
|
263
|
-
:
|
243
|
+
:ensure => "directory"
|
264
244
|
)
|
265
245
|
}
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
file.sync
|
271
|
-
}
|
272
|
-
assert_nothing_raised() {
|
273
|
-
file.evaluate
|
274
|
-
}
|
246
|
+
assert(! FileTest.directory?(path), "Directory %s already exists" %
|
247
|
+
[path])
|
248
|
+
assert_events([:directory_created], file)
|
249
|
+
assert_events([], file)
|
275
250
|
assert(file.insync?())
|
276
251
|
assert(FileTest.directory?(path))
|
277
252
|
@@tmpfiles.push path
|
@@ -280,20 +255,17 @@ class TestFile < Test::Unit::TestCase
|
|
280
255
|
|
281
256
|
def test_modes
|
282
257
|
file = mktestfile
|
258
|
+
# Set it to something else initially
|
259
|
+
File.chmod(0775, file.name)
|
283
260
|
[0644,0755,0777,0641].each { |mode|
|
284
261
|
assert_nothing_raised() {
|
285
262
|
file[:mode] = mode
|
286
263
|
}
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
assert_nothing_raised() {
|
291
|
-
file.sync
|
292
|
-
}
|
293
|
-
assert_nothing_raised() {
|
294
|
-
file.evaluate
|
295
|
-
}
|
264
|
+
assert_events([:file_changed], file)
|
265
|
+
assert_events([], file)
|
266
|
+
|
296
267
|
assert(file.insync?())
|
268
|
+
|
297
269
|
assert_nothing_raised() {
|
298
270
|
file.delete(:mode)
|
299
271
|
}
|
@@ -311,34 +283,31 @@ class TestFile < Test::Unit::TestCase
|
|
311
283
|
# try it both with files that exist and ones that don't
|
312
284
|
files = [exists, nonexists]
|
313
285
|
initstorage
|
314
|
-
File.open(exists,
|
315
|
-
|
316
|
-
of.puts rand(100)
|
317
|
-
}
|
286
|
+
File.open(exists,File::CREAT|File::TRUNC|File::WRONLY) { |of|
|
287
|
+
of.puts "initial text"
|
318
288
|
}
|
319
289
|
types.each { |type|
|
320
290
|
files.each { |path|
|
321
291
|
if Puppet[:debug]
|
322
|
-
Puppet.
|
292
|
+
Puppet.warning "Testing %s on %s" % [type,path]
|
323
293
|
end
|
324
294
|
file = nil
|
325
295
|
events = nil
|
326
296
|
# okay, we now know that we have a file...
|
327
297
|
assert_nothing_raised() {
|
328
|
-
file = Puppet
|
298
|
+
file = Puppet.type(:file).create(
|
329
299
|
:name => path,
|
330
|
-
:
|
300
|
+
:ensure => "file",
|
331
301
|
:checksum => type
|
332
302
|
)
|
333
303
|
}
|
334
|
-
comp = Puppet
|
335
|
-
:name => "
|
304
|
+
comp = Puppet.type(:component).create(
|
305
|
+
:name => "checksum %s" % type
|
336
306
|
)
|
337
307
|
comp.push file
|
338
308
|
trans = nil
|
339
|
-
|
340
|
-
|
341
|
-
}
|
309
|
+
|
310
|
+
file.retrieve
|
342
311
|
|
343
312
|
if file.name !~ /nonexists/
|
344
313
|
sum = file.state(:checksum)
|
@@ -346,52 +315,67 @@ class TestFile < Test::Unit::TestCase
|
|
346
315
|
assert(sum.insync?)
|
347
316
|
end
|
348
317
|
|
318
|
+
events = assert_apply(comp)
|
319
|
+
|
320
|
+
assert(! events.include?(:file_changed),
|
321
|
+
"File incorrectly changed")
|
322
|
+
assert_events([], comp)
|
323
|
+
|
324
|
+
# We have to sleep because the time resolution of the time-based
|
325
|
+
# mechanisms is greater than one second
|
326
|
+
sleep 1
|
327
|
+
|
349
328
|
assert_nothing_raised() {
|
350
|
-
|
351
|
-
|
352
|
-
# we don't want to kick off an event the first time we
|
353
|
-
# come across a file
|
354
|
-
assert(
|
355
|
-
! events.include?(:file_modified)
|
356
|
-
)
|
357
|
-
assert_nothing_raised() {
|
358
|
-
File.open(path,"w") { |of|
|
359
|
-
of.puts rand(100)
|
329
|
+
File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
|
330
|
+
of.puts "some more text, yo"
|
360
331
|
}
|
361
332
|
}
|
362
|
-
Puppet
|
363
|
-
Puppet
|
364
|
-
sleep 1
|
333
|
+
Puppet.type(:file).clear
|
334
|
+
Puppet.type(:component).clear
|
365
335
|
|
366
336
|
# now recreate the file
|
367
337
|
assert_nothing_raised() {
|
368
|
-
file = Puppet
|
338
|
+
file = Puppet.type(:file).create(
|
369
339
|
:name => path,
|
370
340
|
:checksum => type
|
371
341
|
)
|
372
342
|
}
|
373
|
-
comp = Puppet
|
374
|
-
:name => "
|
343
|
+
comp = Puppet.type(:component).create(
|
344
|
+
:name => "checksum, take 2, %s" % type
|
375
345
|
)
|
376
346
|
comp.push file
|
377
347
|
trans = nil
|
348
|
+
|
349
|
+
# If the file was missing, it should not generate an event
|
350
|
+
# when it gets created.
|
351
|
+
#if path =~ /nonexists/
|
352
|
+
# assert_events([], comp)
|
353
|
+
#else
|
354
|
+
assert_events([:file_changed], comp)
|
355
|
+
#end
|
378
356
|
assert_nothing_raised() {
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
357
|
+
File.unlink(path)
|
358
|
+
File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
|
359
|
+
# We have to put a certain amount of text in here or
|
360
|
+
# the md5-lite test fails
|
361
|
+
2.times {
|
362
|
+
of.puts rand(100)
|
363
|
+
}
|
364
|
+
of.flush
|
365
|
+
}
|
383
366
|
}
|
384
|
-
|
385
|
-
|
367
|
+
#assert_apply(comp)
|
368
|
+
assert_events([:file_changed], comp)
|
386
369
|
|
387
370
|
# verify that we're actually getting notified when a file changes
|
388
|
-
assert(
|
389
|
-
events.include?(:file_modified)
|
390
|
-
)
|
391
371
|
assert_nothing_raised() {
|
392
|
-
Puppet
|
393
|
-
Puppet
|
372
|
+
Puppet.type(:file).clear
|
373
|
+
Puppet.type(:component).clear
|
394
374
|
}
|
375
|
+
|
376
|
+
if path =~ /nonexists/
|
377
|
+
File.unlink(path)
|
378
|
+
end
|
395
379
|
}
|
396
380
|
}
|
397
381
|
end
|
@@ -406,13 +390,13 @@ class TestFile < Test::Unit::TestCase
|
|
406
390
|
|
407
391
|
initstorage
|
408
392
|
assert_nothing_raised {
|
409
|
-
file = Puppet
|
393
|
+
file = Puppet.type(:file).create(
|
410
394
|
param => path,
|
411
395
|
:recurse => true,
|
412
396
|
:checksum => "md5"
|
413
397
|
)
|
414
398
|
}
|
415
|
-
comp = Puppet
|
399
|
+
comp = Puppet.type(:component).create(
|
416
400
|
:name => "component"
|
417
401
|
)
|
418
402
|
comp.push file
|
@@ -422,9 +406,6 @@ class TestFile < Test::Unit::TestCase
|
|
422
406
|
assert_nothing_raised {
|
423
407
|
trans.evaluate
|
424
408
|
}
|
425
|
-
#assert_nothing_raised {
|
426
|
-
# file.sync
|
427
|
-
#}
|
428
409
|
clearstorage
|
429
410
|
Puppet::Type.allclear
|
430
411
|
}
|
@@ -438,7 +419,7 @@ class TestFile < Test::Unit::TestCase
|
|
438
419
|
|
439
420
|
dir = nil
|
440
421
|
assert_nothing_raised {
|
441
|
-
dir = Puppet
|
422
|
+
dir = Puppet.type(:file).create(
|
442
423
|
:path => basedir,
|
443
424
|
:recurse => true,
|
444
425
|
:check => %w{owner mode group}
|
@@ -446,26 +427,26 @@ class TestFile < Test::Unit::TestCase
|
|
446
427
|
}
|
447
428
|
|
448
429
|
assert_nothing_raised {
|
449
|
-
dir.
|
430
|
+
dir.evaluate
|
450
431
|
}
|
451
432
|
|
452
433
|
subobj = nil
|
453
434
|
assert_nothing_raised {
|
454
|
-
subobj = Puppet
|
435
|
+
subobj = Puppet.type(:file)[subdir]
|
455
436
|
}
|
456
437
|
|
457
|
-
assert(subobj, "Could not retrieve
|
438
|
+
assert(subobj, "Could not retrieve %s object" % subdir)
|
458
439
|
|
459
440
|
File.open(tmpfile, "w") { |f| f.puts "yayness" }
|
460
441
|
|
461
|
-
dir.
|
442
|
+
dir.evaluate
|
462
443
|
|
463
444
|
file = nil
|
464
445
|
assert_nothing_raised {
|
465
|
-
file = Puppet
|
446
|
+
file = Puppet.type(:file)[tmpfile]
|
466
447
|
}
|
467
448
|
|
468
|
-
assert(file, "Could not retrieve
|
449
|
+
assert(file, "Could not retrieve %s object" % tmpfile)
|
469
450
|
|
470
451
|
end
|
471
452
|
|
@@ -485,7 +466,7 @@ class TestFile < Test::Unit::TestCase
|
|
485
466
|
file = mkfile(
|
486
467
|
:name => path,
|
487
468
|
:recurse => true,
|
488
|
-
:
|
469
|
+
:ensure => "file"
|
489
470
|
)
|
490
471
|
}
|
491
472
|
|
@@ -506,8 +487,9 @@ class TestFile < Test::Unit::TestCase
|
|
506
487
|
def test_filetype_retrieval
|
507
488
|
file = nil
|
508
489
|
|
490
|
+
# Verify it retrieves files of type directory
|
509
491
|
assert_nothing_raised {
|
510
|
-
file = Puppet
|
492
|
+
file = Puppet.type(:file).create(
|
511
493
|
:name => tmpdir(),
|
512
494
|
:check => :type
|
513
495
|
)
|
@@ -519,28 +501,27 @@ class TestFile < Test::Unit::TestCase
|
|
519
501
|
|
520
502
|
assert_equal("directory", file.state(:type).is)
|
521
503
|
|
504
|
+
# And then check files
|
522
505
|
assert_nothing_raised {
|
523
|
-
file = Puppet
|
524
|
-
:name =>
|
525
|
-
:
|
506
|
+
file = Puppet.type(:file).create(
|
507
|
+
:name => tempfile(),
|
508
|
+
:ensure => "file"
|
526
509
|
)
|
527
510
|
}
|
528
511
|
|
529
|
-
|
530
|
-
|
531
|
-
|
512
|
+
assert_apply(file)
|
513
|
+
file[:check] = "type"
|
514
|
+
assert_apply(file)
|
532
515
|
|
533
516
|
assert_equal("file", file.state(:type).is)
|
534
517
|
|
535
|
-
|
536
|
-
file[:type] = "directory"
|
537
|
-
}
|
518
|
+
file[:type] = "directory"
|
538
519
|
|
539
|
-
|
520
|
+
assert_nothing_raised { file.retrieve }
|
540
521
|
|
541
|
-
|
542
|
-
|
543
|
-
|
522
|
+
# The 'retrieve' method sets @should to @is, so they're never
|
523
|
+
# out of sync. It's a read-only class.
|
524
|
+
assert(file.insync?)
|
544
525
|
end
|
545
526
|
|
546
527
|
def test_remove
|
@@ -550,7 +531,7 @@ class TestFile < Test::Unit::TestCase
|
|
550
531
|
|
551
532
|
dir = nil
|
552
533
|
assert_nothing_raised {
|
553
|
-
dir = Puppet
|
534
|
+
dir = Puppet.type(:file).create(
|
554
535
|
:path => basedir,
|
555
536
|
:recurse => true,
|
556
537
|
:check => %w{owner mode group}
|
@@ -563,7 +544,7 @@ class TestFile < Test::Unit::TestCase
|
|
563
544
|
|
564
545
|
obj = nil
|
565
546
|
assert_nothing_raised {
|
566
|
-
obj = Puppet
|
547
|
+
obj = Puppet.type(:file)[subdir]
|
567
548
|
}
|
568
549
|
|
569
550
|
assert(obj, "Could not retrieve subdir object")
|
@@ -573,13 +554,13 @@ class TestFile < Test::Unit::TestCase
|
|
573
554
|
}
|
574
555
|
|
575
556
|
assert_nothing_raised {
|
576
|
-
obj = Puppet
|
557
|
+
obj = Puppet.type(:file)[subdir]
|
577
558
|
}
|
578
559
|
|
579
560
|
assert_nil(obj, "Retrieved removed object")
|
580
561
|
end
|
581
562
|
|
582
|
-
def
|
563
|
+
def test_path
|
583
564
|
dir = tempfile()
|
584
565
|
|
585
566
|
path = File.join(dir, "and", "a", "sub", "dir")
|
@@ -592,7 +573,7 @@ class TestFile < Test::Unit::TestCase
|
|
592
573
|
file = nil
|
593
574
|
dirobj = nil
|
594
575
|
assert_nothing_raised("Could not make file object") {
|
595
|
-
dirobj = Puppet
|
576
|
+
dirobj = Puppet.type(:file).create(
|
596
577
|
:path => dir,
|
597
578
|
:recurse => true,
|
598
579
|
:check => %w{mode owner group}
|
@@ -600,7 +581,7 @@ class TestFile < Test::Unit::TestCase
|
|
600
581
|
}
|
601
582
|
|
602
583
|
assert_nothing_raised {
|
603
|
-
dirobj.
|
584
|
+
dirobj.evaluate
|
604
585
|
}
|
605
586
|
|
606
587
|
assert_nothing_raised {
|
@@ -611,6 +592,150 @@ class TestFile < Test::Unit::TestCase
|
|
611
592
|
|
612
593
|
assert_equal("file=%s" % file.name, file.path)
|
613
594
|
end
|
595
|
+
|
596
|
+
def test_autorequire
|
597
|
+
basedir = tempfile()
|
598
|
+
subfile = File.join(basedir, "subfile")
|
599
|
+
|
600
|
+
baseobj = Puppet.type(:file).create(
|
601
|
+
:name => basedir,
|
602
|
+
:ensure => "directory"
|
603
|
+
)
|
604
|
+
|
605
|
+
subobj = Puppet.type(:file).create(
|
606
|
+
:name => subfile,
|
607
|
+
:ensure => "file"
|
608
|
+
)
|
609
|
+
|
610
|
+
Puppet::Type.finalize
|
611
|
+
assert(subobj.requires?(baseobj), "File did not require basedir")
|
612
|
+
assert(!subobj.requires?(subobj), "File required itself")
|
613
|
+
comp = newcomp(subobj, baseobj)
|
614
|
+
assert_events([:directory_created, :file_created], comp)
|
615
|
+
end
|
616
|
+
|
617
|
+
def test_content
|
618
|
+
file = tempfile()
|
619
|
+
str = "This is some content"
|
620
|
+
|
621
|
+
obj = nil
|
622
|
+
assert_nothing_raised {
|
623
|
+
obj = Puppet.type(:file).create(
|
624
|
+
:name => file,
|
625
|
+
:content => str
|
626
|
+
)
|
627
|
+
}
|
628
|
+
|
629
|
+
assert(!obj.insync?, "Object is incorrectly in sync")
|
630
|
+
|
631
|
+
assert_events([:file_created], obj)
|
632
|
+
|
633
|
+
obj.retrieve
|
634
|
+
|
635
|
+
assert(obj.insync?, "Object is not in sync")
|
636
|
+
|
637
|
+
text = File.read(file)
|
638
|
+
|
639
|
+
assert_equal(str, text, "Content did not copy correctly")
|
640
|
+
|
641
|
+
newstr = "Another string, yo"
|
642
|
+
|
643
|
+
obj[:content] = newstr
|
644
|
+
|
645
|
+
assert(!obj.insync?, "Object is incorrectly in sync")
|
646
|
+
|
647
|
+
assert_events([:file_changed], obj)
|
648
|
+
|
649
|
+
text = File.read(file)
|
650
|
+
|
651
|
+
assert_equal(newstr, text, "Content did not copy correctly")
|
652
|
+
|
653
|
+
obj.retrieve
|
654
|
+
assert(obj.insync?, "Object is not in sync")
|
655
|
+
end
|
656
|
+
|
657
|
+
# Unfortunately, I know this fails
|
658
|
+
def disabled_test_recursivemkdir
|
659
|
+
path = tempfile()
|
660
|
+
subpath = File.join(path, "this", "is", "a", "dir")
|
661
|
+
file = nil
|
662
|
+
assert_nothing_raised {
|
663
|
+
file = Puppet.type(:file).create(
|
664
|
+
:name => subpath,
|
665
|
+
:ensure => "directory",
|
666
|
+
:recurse => true
|
667
|
+
)
|
668
|
+
}
|
669
|
+
|
670
|
+
comp = newcomp("yay", file)
|
671
|
+
Puppet::Type.finalize
|
672
|
+
assert_apply(comp)
|
673
|
+
#assert_events([:directory_created], comp)
|
674
|
+
|
675
|
+
assert(FileTest.directory?(subpath), "Did not create directory")
|
676
|
+
end
|
677
|
+
|
678
|
+
# Make sure that content updates the checksum on the same run
|
679
|
+
def test_checksumchange_for_content
|
680
|
+
dest = tempfile()
|
681
|
+
File.open(dest, "w") { |f| f.puts "yayness" }
|
682
|
+
|
683
|
+
file = nil
|
684
|
+
assert_nothing_raised {
|
685
|
+
file = Puppet.type(:file).create(
|
686
|
+
:name => dest,
|
687
|
+
:checksum => "md5",
|
688
|
+
:content => "This is some content"
|
689
|
+
)
|
690
|
+
}
|
691
|
+
|
692
|
+
file.retrieve
|
693
|
+
|
694
|
+
assert_events([:file_changed], file)
|
695
|
+
file.retrieve
|
696
|
+
assert_events([], file)
|
697
|
+
end
|
698
|
+
|
699
|
+
# Make sure that content updates the checksum on the same run
|
700
|
+
def test_checksumchange_for_ensure
|
701
|
+
dest = tempfile()
|
702
|
+
|
703
|
+
file = nil
|
704
|
+
assert_nothing_raised {
|
705
|
+
file = Puppet.type(:file).create(
|
706
|
+
:name => dest,
|
707
|
+
:checksum => "md5",
|
708
|
+
:ensure => "file"
|
709
|
+
)
|
710
|
+
}
|
711
|
+
|
712
|
+
file.retrieve
|
713
|
+
|
714
|
+
assert_events([:file_created], file)
|
715
|
+
file.retrieve
|
716
|
+
assert_events([], file)
|
717
|
+
end
|
718
|
+
|
719
|
+
# Make sure that content gets used before ensure
|
720
|
+
def test_contentbeatsensure
|
721
|
+
dest = tempfile()
|
722
|
+
|
723
|
+
file = nil
|
724
|
+
assert_nothing_raised {
|
725
|
+
file = Puppet.type(:file).create(
|
726
|
+
:name => dest,
|
727
|
+
:ensure => "file",
|
728
|
+
:content => "this is some content, yo"
|
729
|
+
)
|
730
|
+
}
|
731
|
+
|
732
|
+
file.retrieve
|
733
|
+
|
734
|
+
assert_events([:file_created], file)
|
735
|
+
file.retrieve
|
736
|
+
assert_events([], file)
|
737
|
+
assert_events([], file)
|
738
|
+
end
|
614
739
|
end
|
615
740
|
|
616
|
-
# $Id: file.rb
|
741
|
+
# $Id: file.rb 884 2006-02-08 17:11:54Z luke $
|