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.

Files changed (213) hide show
  1. data/CHANGELOG +58 -0
  2. data/README +21 -18
  3. data/Rakefile +176 -36
  4. data/bin/puppet +34 -48
  5. data/bin/puppetca +41 -28
  6. data/bin/puppetd +87 -65
  7. data/bin/puppetdoc +99 -23
  8. data/bin/puppetmasterd +72 -91
  9. data/conf/redhat/client.init +80 -0
  10. data/conf/redhat/client.sysconfig +11 -0
  11. data/conf/redhat/fileserver.conf +12 -0
  12. data/conf/redhat/puppet.spec +130 -0
  13. data/conf/redhat/server.init +89 -0
  14. data/conf/redhat/server.sysconfig +9 -0
  15. data/examples/code/allatonce +2 -2
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/classing +2 -2
  18. data/examples/code/components +2 -2
  19. data/examples/code/file.bl +5 -5
  20. data/examples/code/filedefaults +2 -2
  21. data/examples/code/fileparsing +1 -1
  22. data/examples/code/filerecursion +1 -1
  23. data/examples/code/functions +1 -1
  24. data/examples/code/groups +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/nodes +1 -1
  27. data/examples/code/one +1 -1
  28. data/examples/code/relationships +2 -2
  29. data/examples/code/simpletests +5 -5
  30. data/examples/code/snippets/argumentdefaults +2 -2
  31. data/examples/code/snippets/casestatement +16 -8
  32. data/examples/code/snippets/classheirarchy.pp +4 -4
  33. data/examples/code/snippets/classincludes.pp +4 -4
  34. data/examples/code/snippets/classpathtest +2 -2
  35. data/examples/code/snippets/componentmetaparams.pp +11 -0
  36. data/examples/code/snippets/dirchmod +5 -5
  37. data/examples/code/snippets/emptyclass.pp +9 -0
  38. data/examples/code/snippets/failmissingexecpath.pp +1 -1
  39. data/examples/code/snippets/falsevalues.pp +1 -1
  40. data/examples/code/snippets/filecreate +5 -5
  41. data/examples/code/snippets/implicititeration +5 -5
  42. data/examples/code/snippets/multipleinstances +4 -4
  43. data/examples/code/snippets/namevartest +3 -3
  44. data/examples/code/snippets/scopetest +1 -1
  45. data/examples/code/snippets/selectorvalues.pp +3 -3
  46. data/examples/code/snippets/simpledefaults +2 -2
  47. data/examples/code/snippets/simpleselector +5 -5
  48. data/examples/code/snippets/singleary.pp +19 -0
  49. data/examples/root/etc/init.d/sleeper +3 -2
  50. data/ext/emacs/puppet-mode-init.el +6 -0
  51. data/ext/emacs/puppet-mode.el +189 -0
  52. data/ext/ldap/puppet.schema +17 -0
  53. data/ext/{module:puppet → module_puppet} +30 -31
  54. data/ext/vim/filetype.vim +9 -0
  55. data/ext/vim/puppet.vim +87 -0
  56. data/install.rb +63 -30
  57. data/lib/puppet.rb +216 -122
  58. data/lib/puppet/client.rb +51 -416
  59. data/lib/puppet/client/ca.rb +17 -0
  60. data/lib/puppet/client/dipper.rb +78 -0
  61. data/lib/puppet/client/file.rb +20 -0
  62. data/lib/puppet/client/log.rb +17 -0
  63. data/lib/puppet/client/master.rb +246 -0
  64. data/lib/puppet/client/proxy.rb +27 -0
  65. data/lib/puppet/client/status.rb +7 -0
  66. data/lib/puppet/config.rb +563 -13
  67. data/lib/puppet/daemon.rb +50 -22
  68. data/lib/puppet/element.rb +4 -4
  69. data/lib/puppet/event-loop.rb +1 -0
  70. data/lib/puppet/event-loop/better-definers.rb +367 -0
  71. data/lib/puppet/event-loop/event-loop.rb +355 -0
  72. data/lib/puppet/event-loop/signal-system.rb +220 -0
  73. data/lib/puppet/event.rb +9 -11
  74. data/lib/puppet/filetype.rb +195 -0
  75. data/lib/puppet/log.rb +35 -12
  76. data/lib/puppet/metric.rb +2 -2
  77. data/lib/puppet/networkclient.rb +145 -0
  78. data/lib/puppet/parameter.rb +335 -0
  79. data/lib/puppet/parser/ast.rb +42 -1453
  80. data/lib/puppet/parser/ast/astarray.rb +88 -0
  81. data/lib/puppet/parser/ast/branch.rb +47 -0
  82. data/lib/puppet/parser/ast/caseopt.rb +66 -0
  83. data/lib/puppet/parser/ast/casestatement.rb +78 -0
  84. data/lib/puppet/parser/ast/classdef.rb +78 -0
  85. data/lib/puppet/parser/ast/compdef.rb +111 -0
  86. data/lib/puppet/parser/ast/component.rb +105 -0
  87. data/lib/puppet/parser/ast/hostclass.rb +82 -0
  88. data/lib/puppet/parser/ast/leaf.rb +86 -0
  89. data/lib/puppet/parser/ast/node.rb +103 -0
  90. data/lib/puppet/parser/ast/nodedef.rb +68 -0
  91. data/lib/puppet/parser/ast/objectdef.rb +336 -0
  92. data/lib/puppet/parser/ast/objectparam.rb +30 -0
  93. data/lib/puppet/parser/ast/objectref.rb +76 -0
  94. data/lib/puppet/parser/ast/selector.rb +60 -0
  95. data/lib/puppet/parser/ast/typedefaults.rb +45 -0
  96. data/lib/puppet/parser/ast/vardef.rb +44 -0
  97. data/lib/puppet/parser/interpreter.rb +31 -14
  98. data/lib/puppet/parser/lexer.rb +2 -4
  99. data/lib/puppet/parser/parser.rb +332 -242
  100. data/lib/puppet/parser/scope.rb +55 -38
  101. data/lib/puppet/server.rb +43 -44
  102. data/lib/puppet/server/authstore.rb +3 -6
  103. data/lib/puppet/server/ca.rb +5 -2
  104. data/lib/puppet/server/filebucket.rb +2 -4
  105. data/lib/puppet/server/fileserver.rb +28 -12
  106. data/lib/puppet/server/logger.rb +15 -4
  107. data/lib/puppet/server/master.rb +62 -7
  108. data/lib/puppet/sslcertificates.rb +41 -607
  109. data/lib/puppet/sslcertificates/ca.rb +291 -0
  110. data/lib/puppet/sslcertificates/certificate.rb +283 -0
  111. data/lib/puppet/statechange.rb +6 -1
  112. data/lib/puppet/storage.rb +67 -56
  113. data/lib/puppet/transaction.rb +25 -9
  114. data/lib/puppet/transportable.rb +102 -22
  115. data/lib/puppet/type.rb +1096 -315
  116. data/lib/puppet/type/component.rb +30 -21
  117. data/lib/puppet/type/cron.rb +409 -448
  118. data/lib/puppet/type/exec.rb +234 -174
  119. data/lib/puppet/type/group.rb +65 -82
  120. data/lib/puppet/type/nameservice.rb +247 -3
  121. data/lib/puppet/type/nameservice/netinfo.rb +29 -40
  122. data/lib/puppet/type/nameservice/objectadd.rb +52 -66
  123. data/lib/puppet/type/nameservice/posix.rb +6 -194
  124. data/lib/puppet/type/package.rb +447 -295
  125. data/lib/puppet/type/package/apt.rb +51 -50
  126. data/lib/puppet/type/package/bsd.rb +82 -0
  127. data/lib/puppet/type/package/dpkg.rb +85 -88
  128. data/lib/puppet/type/package/rpm.rb +67 -63
  129. data/lib/puppet/type/package/sun.rb +119 -98
  130. data/lib/puppet/type/package/yum.rb +41 -37
  131. data/lib/puppet/type/parsedtype.rb +295 -0
  132. data/lib/puppet/type/parsedtype/host.rb +143 -0
  133. data/lib/puppet/type/parsedtype/port.rb +232 -0
  134. data/lib/puppet/type/parsedtype/sshkey.rb +129 -0
  135. data/lib/puppet/type/pfile.rb +484 -460
  136. data/lib/puppet/type/pfile/checksum.rb +237 -181
  137. data/lib/puppet/type/pfile/content.rb +67 -0
  138. data/lib/puppet/type/pfile/ensure.rb +212 -0
  139. data/lib/puppet/type/pfile/group.rb +106 -105
  140. data/lib/puppet/type/pfile/mode.rb +98 -101
  141. data/lib/puppet/type/pfile/source.rb +228 -209
  142. data/lib/puppet/type/pfile/type.rb +18 -21
  143. data/lib/puppet/type/pfile/uid.rb +127 -130
  144. data/lib/puppet/type/pfilebucket.rb +68 -63
  145. data/lib/puppet/type/schedule.rb +341 -0
  146. data/lib/puppet/type/service.rb +351 -255
  147. data/lib/puppet/type/service/base.rb +9 -14
  148. data/lib/puppet/type/service/debian.rb +32 -38
  149. data/lib/puppet/type/service/init.rb +130 -130
  150. data/lib/puppet/type/service/smf.rb +48 -20
  151. data/lib/puppet/type/state.rb +229 -16
  152. data/lib/puppet/type/symlink.rb +51 -63
  153. data/lib/puppet/type/tidy.rb +105 -102
  154. data/lib/puppet/type/user.rb +118 -180
  155. data/lib/puppet/util.rb +100 -6
  156. data/test/certmgr/certmgr.rb +0 -1
  157. data/test/client/client.rb +4 -4
  158. data/test/executables/puppetbin.rb +7 -14
  159. data/test/executables/puppetca.rb +18 -24
  160. data/test/executables/puppetd.rb +7 -16
  161. data/test/executables/puppetmasterd.rb +7 -9
  162. data/test/executables/puppetmodule.rb +11 -16
  163. data/test/language/ast.rb +11 -7
  164. data/test/language/interpreter.rb +1 -1
  165. data/test/language/scope.rb +2 -0
  166. data/test/language/snippets.rb +30 -5
  167. data/test/language/transportable.rb +77 -0
  168. data/test/other/config.rb +316 -0
  169. data/test/other/events.rb +22 -21
  170. data/test/other/log.rb +14 -14
  171. data/test/other/metrics.rb +4 -8
  172. data/test/other/overrides.rb +5 -5
  173. data/test/other/relationships.rb +4 -2
  174. data/test/other/storage.rb +64 -3
  175. data/test/other/transactions.rb +20 -20
  176. data/test/parser/parser.rb +7 -4
  177. data/test/puppet/conffiles.rb +12 -12
  178. data/test/puppet/defaults.rb +13 -11
  179. data/test/puppet/utiltest.rb +14 -11
  180. data/test/puppettest.rb +156 -48
  181. data/test/server/bucket.rb +2 -2
  182. data/test/server/fileserver.rb +6 -6
  183. data/test/server/logger.rb +19 -11
  184. data/test/server/master.rb +33 -4
  185. data/test/server/server.rb +2 -7
  186. data/test/types/basic.rb +5 -7
  187. data/test/types/component.rb +22 -18
  188. data/test/types/cron.rb +111 -44
  189. data/test/types/exec.rb +116 -59
  190. data/test/types/file.rb +262 -137
  191. data/test/types/filebucket.rb +13 -15
  192. data/test/types/fileignoresource.rb +12 -16
  193. data/test/types/filesources.rb +73 -48
  194. data/test/types/filetype.rb +13 -15
  195. data/test/types/group.rb +15 -13
  196. data/test/types/host.rb +146 -0
  197. data/test/types/package.rb +74 -63
  198. data/test/types/port.rb +139 -0
  199. data/test/types/query.rb +8 -8
  200. data/test/types/schedule.rb +335 -0
  201. data/test/types/service.rb +137 -21
  202. data/test/types/sshkey.rb +140 -0
  203. data/test/types/symlink.rb +3 -5
  204. data/test/types/tidy.rb +5 -14
  205. data/test/types/type.rb +67 -11
  206. data/test/types/user.rb +25 -23
  207. metadata +186 -122
  208. data/lib/puppet/type/pfile/create.rb +0 -108
  209. data/lib/puppet/type/pprocess.rb +0 -97
  210. data/lib/puppet/type/typegen.rb +0 -149
  211. data/lib/puppet/type/typegen/filerecord.rb +0 -243
  212. data/lib/puppet/type/typegen/filetype.rb +0 -316
  213. data/test/other/state.rb +0 -106
@@ -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::Type::PFile.create(hash)
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[:checksumfile])
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
- # just make sure we don't try to manage users
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
- assert_nothing_raised() {
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::Type::PFile.create(
124
+ file = Puppet.type(:file).create(
129
125
  :path => path,
130
126
  :owner => user.name,
131
- :create => true,
127
+ :ensure => "file",
132
128
  :mode => "755"
133
129
  )
134
130
  }
135
131
 
136
132
  comp = newcomp("createusertest", file)
137
133
 
138
- assert_events(comp, [:file_created])
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
- assert_nothing_raised() {
179
- file.sync
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
- assert_nothing_raised() {
189
- file.evaluate
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
- assert_nothing_raised() {
215
- file.evaluate
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| "/tmp/createst%s" % name }.each { |path|
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::Type::PFile.create(
222
+ file = Puppet.type(:file).create(
238
223
  :name => path,
239
- :create => true
224
+ :ensure => "file"
240
225
  )
241
226
  }
242
- assert_nothing_raised() {
243
- file.evaluate
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
- %w{a b c d}.collect { |name| "/tmp/createst%s" % name }.each { |path|
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::Type::PFile.create(
241
+ file = Puppet.type(:file).create(
262
242
  :name => path,
263
- :create => "directory"
243
+ :ensure => "directory"
264
244
  )
265
245
  }
266
- assert_nothing_raised() {
267
- file.evaluate
268
- }
269
- assert_nothing_raised() {
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
- assert_nothing_raised() {
288
- file.evaluate
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,"w") { |of|
315
- 10.times {
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.info "Testing %s on %s" % [type,path]
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::Type::PFile.create(
298
+ file = Puppet.type(:file).create(
329
299
  :name => path,
330
- :create => true,
300
+ :ensure => "file",
331
301
  :checksum => type
332
302
  )
333
303
  }
334
- comp = Puppet::Type::Component.create(
335
- :name => "componentfile"
304
+ comp = Puppet.type(:component).create(
305
+ :name => "checksum %s" % type
336
306
  )
337
307
  comp.push file
338
308
  trans = nil
339
- assert_nothing_raised() {
340
- trans = comp.evaluate
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
- events = trans.evaluate.collect { |e| e.event }
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::Type::PFile.clear
363
- Puppet::Type::Component.clear
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::Type::PFile.create(
338
+ file = Puppet.type(:file).create(
369
339
  :name => path,
370
340
  :checksum => type
371
341
  )
372
342
  }
373
- comp = Puppet::Type::Component.create(
374
- :name => "componentfile"
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
- trans = comp.evaluate
380
- }
381
- assert_nothing_raised() {
382
- events = trans.evaluate.collect { |e| e.event }
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
- sum = file.state(:checksum)
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::Type::PFile.clear
393
- Puppet::Type::Component.clear
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::Type::PFile.create(
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::Type::Component.create(
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::Type::PFile.create(
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.retrieve
430
+ dir.evaluate
450
431
  }
451
432
 
452
433
  subobj = nil
453
434
  assert_nothing_raised {
454
- subobj = Puppet::Type::PFile[subdir]
435
+ subobj = Puppet.type(:file)[subdir]
455
436
  }
456
437
 
457
- assert(subobj, "Could not retrieve subdir object")
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.retrieve
442
+ dir.evaluate
462
443
 
463
444
  file = nil
464
445
  assert_nothing_raised {
465
- file = Puppet::Type::PFile[tmpfile]
446
+ file = Puppet.type(:file)[tmpfile]
466
447
  }
467
448
 
468
- assert(file, "Could not retrieve file object")
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
- :create => true
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::Type::PFile.create(
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::Type::PFile.create(
524
- :name => "/etc/passwd",
525
- :check => :type
506
+ file = Puppet.type(:file).create(
507
+ :name => tempfile(),
508
+ :ensure => "file"
526
509
  )
527
510
  }
528
511
 
529
- assert_nothing_raised {
530
- file.evaluate
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
- assert_raise(Puppet::Error) {
536
- file[:type] = "directory"
537
- }
518
+ file[:type] = "directory"
538
519
 
539
- assert(file.insync?)
520
+ assert_nothing_raised { file.retrieve }
540
521
 
541
- assert_raise(Puppet::Error) {
542
- file.sync
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::Type::PFile.create(
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::Type::PFile[subdir]
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::Type::PFile[subdir]
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 test_zpath
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::Type::PFile.create(
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.retrieve
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 740 2005-11-01 20:22:19Z luke $
741
+ # $Id: file.rb 884 2006-02-08 17:11:54Z luke $