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
@@ -172,6 +172,10 @@ class TestAST < Test::Unit::TestCase
172
172
  scope = nil
173
173
  assert_nothing_raised("Could not evaluate node") {
174
174
  scope = Puppet::Parser::Scope.new()
175
+ scope.name = "nodetest"
176
+ scope.type = "nodetest"
177
+ scope.keyword = "nodetest"
178
+ scope.top = true
175
179
  top.evaluate(scope)
176
180
  }
177
181
 
@@ -289,11 +293,11 @@ class TestAST < Test::Unit::TestCase
289
293
 
290
294
  # And now verify that we got both the top and node objects
291
295
  assert_nothing_raised("Could not find top-declared object") {
292
- assert_equal("/testing", objects[0][:name])
296
+ assert_equal("/testing", objects[0]["name"])
293
297
  }
294
298
 
295
299
  assert_nothing_raised("Could not find node-declared object") {
296
- assert_equal("/%s" % name, objects[1][0][:name])
300
+ assert_equal("/%s" % name, objects[1][0]["name"])
297
301
  }
298
302
  end
299
303
 
@@ -334,12 +338,12 @@ class TestAST < Test::Unit::TestCase
334
338
  assert(objects, "Could not retrieve objects")
335
339
 
336
340
  assert_nothing_raised("Could not find top-declared object") {
337
- assert_equal("/%s" % klassname, objects[0][0][:name])
341
+ assert_equal("/%s" % klassname, objects[0][0]["name"])
338
342
  }
339
343
  end
340
344
 
341
345
  # Test that node inheritance works correctly
342
- def test_znodeinheritance
346
+ def test_nodeinheritance
343
347
  children = []
344
348
 
345
349
  # create the base node
@@ -391,19 +395,19 @@ class TestAST < Test::Unit::TestCase
391
395
  # And now verify that we got the subnode file
392
396
  assert_nothing_raised("Could not find basenode file") {
393
397
  base = inner[0]
394
- assert_equal("/basenode", base[:name])
398
+ assert_equal("/basenode", base["name"])
395
399
  }
396
400
 
397
401
  # and the parent node file
398
402
  assert_nothing_raised("Could not find subnode file") {
399
403
  sub = inner[1]
400
- assert_equal("/subnode", sub[:name])
404
+ assert_equal("/subnode", sub["name"])
401
405
  }
402
406
 
403
407
  inner.each { |obj|
404
408
  %w{basenode subnode}.each { |tag|
405
409
  assert(obj.tags.include?(tag),
406
- "%s did not include %s tag" % [obj[:name], tag]
410
+ "%s did not include %s tag" % [obj["name"], tag]
407
411
  )
408
412
  }
409
413
  }
@@ -22,7 +22,7 @@ class TestInterpreter < Test::Unit::TestCase
22
22
  createdfile = tempfile()
23
23
 
24
24
  File.open(file, "w") { |f|
25
- f.puts "node %s { file { \"%s\": create => true, mode => 755 } }\n" %
25
+ f.puts "node %s { file { \"%s\": ensure => file, mode => 755 } }\n" %
26
26
  [node, createdfile]
27
27
  }
28
28
 
@@ -396,6 +396,8 @@ class TestScope < Test::Unit::TestCase
396
396
  scope = nil
397
397
  assert_nothing_raised("Could not evaluate") {
398
398
  scope = Puppet::Parser::Scope.new()
399
+ scope.name = "topscope"
400
+ scope.type = "topscope"
399
401
  objects = scope.evaluate(top)
400
402
  }
401
403
 
@@ -159,7 +159,7 @@ class TestSnippets < Test::Unit::TestCase
159
159
  %w{a b c d}.each { |letter|
160
160
  file = "/tmp/create%stest" % letter
161
161
  Puppet.info "testing %s" % file
162
- assert(Puppet::Type::PFile[file], "File %s does not exist" % file)
162
+ assert(Puppet.type(:file)[file], "File %s does not exist" % file)
163
163
  assert(FileTest.exists?(file))
164
164
  @@tmpfiles << file
165
165
  }
@@ -196,8 +196,9 @@ class TestSnippets < Test::Unit::TestCase
196
196
  @@tmpfiles += files
197
197
 
198
198
  files.each { |file|
199
- assert(FileTest.exists?(file))
200
- assert(File.stat(file).mode & 007777 == 0755)
199
+ assert(FileTest.exists?(file), "File %s does not exist" % file)
200
+ assert(File.stat(file).mode & 007777 == 0755,
201
+ "File %s is the incorrect mode" % file)
201
202
  @@tmpfiles << file
202
203
  }
203
204
 
@@ -217,7 +218,7 @@ class TestSnippets < Test::Unit::TestCase
217
218
 
218
219
  obj = nil
219
220
  assert_nothing_raised {
220
- obj = Puppet::Type::PFile[file]
221
+ obj = Puppet.type(:file)[file]
221
222
  }
222
223
 
223
224
  assert_nothing_raised {
@@ -251,6 +252,7 @@ class TestSnippets < Test::Unit::TestCase
251
252
  /tmp/existsfile
252
253
  /tmp/existsfile2
253
254
  /tmp/existsfile3
255
+ /tmp/existsfile4
254
256
  }
255
257
 
256
258
  files.each { |file|
@@ -368,6 +370,14 @@ class TestSnippets < Test::Unit::TestCase
368
370
  }
369
371
  end
370
372
 
373
+ def snippet_singleary(trans)
374
+ [1,2,3,4].each { |num|
375
+ file = "/tmp/singleary%s" % num
376
+ @@tmpfiles << file
377
+ assert(FileTest.file?(file), "File %s does not exist" % file)
378
+ }
379
+ end
380
+
371
381
  def snippet_classincludes(trans)
372
382
  [1,2,3].each { |num|
373
383
  file = "/tmp/classincludes%s" % num
@@ -378,6 +388,16 @@ class TestSnippets < Test::Unit::TestCase
378
388
  }
379
389
  end
380
390
 
391
+ def snippet_componentmetaparams(trans)
392
+ ["/tmp/component1", "/tmp/component2"].each { |file|
393
+ assert(FileTest.file?(file), "File %s does not exist" % file)
394
+ }
395
+ end
396
+
397
+ def snippet_emptyclass(trans)
398
+ # There's nothing to check other than that it works
399
+ end
400
+
381
401
  def disabled_snippet_dirchmod(trans)
382
402
  dirs = %w{a b}.collect { |letter|
383
403
  "/tmp/dirchmodtest%s" % letter
@@ -428,10 +448,15 @@ class TestSnippets < Test::Unit::TestCase
428
448
 
429
449
  Puppet::Type.eachtype { |type|
430
450
  type.each { |obj|
431
- unless obj.name == "puppet[top]"
451
+ unless obj.name == "puppet[top]" or
452
+ obj.is_a?(Puppet.type(:schedule))
432
453
  assert(obj.parent, "%s has no parent" % obj.name)
433
454
  end
434
455
  assert(obj.name)
456
+
457
+ if obj.is_a?(Puppet.type(:file))
458
+ @@tmpfiles << obj.name
459
+ end
435
460
  }
436
461
  }
437
462
  assert_nothing_raised {
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/ruby
2
+
3
+ if __FILE__ == $0
4
+ $:.unshift '../../lib'
5
+ $:.unshift '..'
6
+ $puppetbase = "../.."
7
+ end
8
+
9
+ require 'puppet'
10
+ require 'puppet/transportable'
11
+ require 'test/unit'
12
+ require 'puppettest'
13
+ require 'yaml'
14
+
15
+ class TestTransportable < Test::Unit::TestCase
16
+ include TestPuppet
17
+
18
+ def mkobj(file = "/etc/passwd")
19
+ obj = nil
20
+ assert_nothing_raised {
21
+ obj = Puppet::TransObject.new("file", file)
22
+ obj["owner"] = "root"
23
+ obj["mode"] = "644"
24
+ }
25
+
26
+ return obj
27
+ end
28
+
29
+ def mkbucket(*objects)
30
+ bucket = nil
31
+ assert_nothing_raised {
32
+ bucket = Puppet::TransBucket.new
33
+ bucket.name = "yayname"
34
+ bucket.type = "yaytype"
35
+ }
36
+
37
+ objects.each { |o| bucket << o }
38
+
39
+ return bucket
40
+ end
41
+
42
+ def test_yamldumpobject
43
+ obj = mkobj
44
+ obj.to_yaml_properties
45
+ str = nil
46
+ assert_nothing_raised {
47
+ str = YAML.dump(obj)
48
+ }
49
+
50
+ newobj = nil
51
+ assert_nothing_raised {
52
+ newobj = YAML.load(str)
53
+ }
54
+
55
+ assert(newobj.name, "Object has no name")
56
+ assert(newobj.type, "Object has no type")
57
+ end
58
+
59
+ def test_yamldumpbucket
60
+ objects = %w{/etc/passwd /etc /tmp /var /dev}.collect { |d|
61
+ mkobj(d)
62
+ }
63
+ bucket = mkbucket(*objects)
64
+ str = nil
65
+ assert_nothing_raised {
66
+ str = YAML.dump(bucket)
67
+ }
68
+
69
+ newobj = nil
70
+ assert_nothing_raised {
71
+ newobj = YAML.load(str)
72
+ }
73
+
74
+ assert(newobj.name, "Bucket has no name")
75
+ assert(newobj.type, "Bucket has no type")
76
+ end
77
+ end
@@ -0,0 +1,316 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppet/config'
9
+ require 'puppettest'
10
+ require 'test/unit'
11
+
12
+ class TestConfig < Test::Unit::TestCase
13
+ include TestPuppet
14
+
15
+ def check_to_transportable(config)
16
+ trans = nil
17
+ assert_nothing_raised("Could not convert to a transportable") {
18
+ trans = config.to_transportable
19
+ }
20
+
21
+ comp = nil
22
+ assert_nothing_raised("Could not convert transportable to component") {
23
+ comp = trans.to_type
24
+ }
25
+
26
+ assert_nothing_raised("Could not retrieve transported config") {
27
+ comp.retrieve
28
+ }
29
+ end
30
+
31
+ def check_to_manifest(config)
32
+ manifest = nil
33
+ assert_nothing_raised("Could not convert to a manifest") {
34
+ manifest = config.to_manifest
35
+ }
36
+
37
+ Puppet[:parseonly] = true
38
+ parser = Puppet::Parser::Parser.new()
39
+
40
+ assert_nothing_raised("Could not parse generated manifest") {
41
+ parser.string = manifest
42
+ parser.parse
43
+ }
44
+ end
45
+
46
+ def check_to_comp(config)
47
+ comp = nil
48
+ assert_nothing_raised("Could not convert to a component") {
49
+ comp = config.to_component
50
+ }
51
+
52
+ assert_nothing_raised("Could not retrieve component") {
53
+ comp.retrieve
54
+ }
55
+ end
56
+
57
+ def check_to_config(config)
58
+ newc = config.dup
59
+
60
+ newfile = tempfile()
61
+ File.open(newfile, "w") { |f| f.print config.to_config }
62
+ assert_nothing_raised("Could not parse generated configuration") {
63
+ newc.parse(newfile)
64
+ }
65
+
66
+ assert_equal(config, newc, "Configurations are not equal")
67
+ end
68
+
69
+ def mkconfig
70
+ c = nil
71
+ assert_nothing_raised {
72
+ c = Puppet::Config.new
73
+ }
74
+ return c
75
+ end
76
+
77
+ def test_addbools
78
+ c = mkconfig
79
+
80
+ assert_nothing_raised {
81
+ c.setdefaults(:testing, [:booltest, true, "testing"])
82
+ }
83
+
84
+ assert(c[:booltest])
85
+ c = mkconfig
86
+
87
+ assert_nothing_raised {
88
+ c.setdefaults(:testing, [:booltest, "true", "testing"])
89
+ }
90
+
91
+ assert(c[:booltest])
92
+
93
+ assert_nothing_raised {
94
+ c[:booltest] = false
95
+ }
96
+
97
+ assert(! c[:booltest], "Booltest is not false")
98
+
99
+ assert_nothing_raised {
100
+ c[:booltest] = "false"
101
+ }
102
+
103
+ assert(! c[:booltest], "Booltest is not false")
104
+
105
+ assert_raise(Puppet::Error) {
106
+ c[:booltest] = "yayness"
107
+ }
108
+
109
+ assert_raise(Puppet::Error) {
110
+ c[:booltest] = "/some/file"
111
+ }
112
+ end
113
+
114
+ def test_strings
115
+ c = mkconfig
116
+ val = "this is a string"
117
+ assert_nothing_raised {
118
+ c.setdefaults(:testing, [:strtest, val, "testing"])
119
+ }
120
+
121
+ assert_equal(val, c[:strtest])
122
+ end
123
+
124
+ def test_files
125
+ c = mkconfig
126
+
127
+ parent = "/puppet"
128
+ assert_nothing_raised {
129
+ c.setdefaults(:testing, [:parentdir, parent, "booh"])
130
+ }
131
+
132
+ assert_nothing_raised {
133
+ c.setdefaults(:testing, [:child, "$parent/child", "rah"])
134
+ }
135
+
136
+ assert_equal(parent, c[:parentdir])
137
+ assert_equal("/puppet/child", File.join(c[:parentdir], "child"))
138
+ end
139
+
140
+ def test_getset
141
+ c = mkconfig
142
+ initial = "an initial value"
143
+ assert_raise(Puppet::Error) {
144
+ c[:yayness] = initial
145
+ }
146
+
147
+ default = "this is a default"
148
+ assert_nothing_raised {
149
+ c.setdefaults(:testing, [:yayness, default, "rah"])
150
+ }
151
+
152
+ assert_equal(default, c[:yayness])
153
+
154
+ assert_nothing_raised {
155
+ c[:yayness] = initial
156
+ }
157
+
158
+ assert_equal(initial, c[:yayness])
159
+
160
+ assert_nothing_raised {
161
+ c.clear
162
+ }
163
+
164
+ assert_equal(default, c[:yayness])
165
+
166
+ assert_nothing_raised {
167
+ c[:yayness] = "not default"
168
+ }
169
+ assert_equal("not default", c[:yayness])
170
+ end
171
+
172
+ def test_parse
173
+ text = %{
174
+ one = this is a test
175
+ two = another test
176
+ owner = root
177
+ group = root
178
+ yay = /a/path
179
+
180
+ [section1]
181
+ attr = value
182
+ owner = puppet
183
+ group = puppet
184
+ attrdir = /some/dir
185
+ attr3 = $attrdir/other
186
+ }
187
+
188
+ file = tempfile()
189
+ File.open(file, "w") { |f| f.puts text }
190
+
191
+ c = mkconfig
192
+ assert_nothing_raised {
193
+ c.setdefaults("puppet",
194
+ [:one, "a", "one"],
195
+ [:two, "a", "two"],
196
+ [:yay, "/default/path", "boo"]
197
+ )
198
+ }
199
+
200
+ assert_nothing_raised {
201
+ c.setdefaults("section1",
202
+ [:attr, "a", "one"],
203
+ [:attrdir, "/another/dir", "two"],
204
+ [:attr3, "$attrdir/maybe", "boo"]
205
+ )
206
+ }
207
+
208
+ assert_nothing_raised {
209
+ c.parse(file)
210
+ }
211
+
212
+ assert_equal("value", c[:attr])
213
+ assert_equal("/some/dir", c[:attrdir])
214
+ assert_equal(:directory, c.element(:attrdir).type)
215
+ assert_equal("/some/dir/other", c[:attr3])
216
+
217
+ elem = nil
218
+ assert_nothing_raised {
219
+ elem = c.element(:attr3)
220
+ }
221
+
222
+ assert(elem)
223
+ assert_equal("puppet", elem.owner)
224
+
225
+ config = nil
226
+ assert_nothing_raised {
227
+ config = c.to_config
228
+ }
229
+
230
+ assert_nothing_raised("Could not create transportable config") {
231
+ c.to_transportable
232
+ }
233
+
234
+ check_to_comp(c)
235
+ Puppet::Type.allclear
236
+ check_to_manifest(c)
237
+ Puppet::Type.allclear
238
+ check_to_config(c)
239
+ Puppet::Type.allclear
240
+ check_to_transportable(c)
241
+ end
242
+
243
+ def test_arghandling
244
+ c = mkconfig
245
+
246
+ assert_nothing_raised {
247
+ c.setdefaults("testing",
248
+ [:onboolean, true, "An on bool"],
249
+ [:offboolean, false, "An off bool"],
250
+ [:string, "a string", "A string arg"],
251
+ [:file, "/path/to/file", "A file arg"]
252
+ )
253
+ }
254
+
255
+ data = {
256
+ :onboolean => [true, false],
257
+ :offboolean => [true, false],
258
+ :string => ["one string", "another string"],
259
+ :file => %w{/a/file /another/file}
260
+ }
261
+ data.each { |param, values|
262
+ values.each { |val|
263
+ opt = nil
264
+ arg = nil
265
+ if c.boolean?(param)
266
+ if val
267
+ opt = "--%s" % param
268
+ else
269
+ opt = "--no-%s" % param
270
+ end
271
+ else
272
+ opt = "--%s" % param
273
+ arg = val
274
+ end
275
+
276
+ assert_nothing_raised("Could not handle arg %s with value %s" %
277
+ [opt, val]) {
278
+
279
+ c.handlearg(opt, arg)
280
+ }
281
+ }
282
+ }
283
+ end
284
+
285
+ def test_argadding
286
+ c = mkconfig
287
+
288
+ assert_nothing_raised {
289
+ c.setdefaults("testing",
290
+ [:onboolean, true, "An on bool"],
291
+ [:offboolean, false, "An off bool"],
292
+ [:string, "a string", "A string arg"],
293
+ [:file, "/path/to/file", "A file arg"]
294
+ )
295
+ }
296
+ options = []
297
+
298
+ c.addargs(options)
299
+
300
+ c.each { |param, obj|
301
+ opt = "--%s" % param
302
+ assert(options.find { |ary|
303
+ ary[0] == opt
304
+ }, "Argument %s was not added" % opt)
305
+
306
+ if c.boolean?(param)
307
+ o = "--no-%s" % param
308
+ assert(options.find { |ary|
309
+ ary[0] == o
310
+ }, "Boolean off %s was not added" % o)
311
+ end
312
+ }
313
+ end
314
+ end
315
+
316
+ # $Id: config.rb 873 2006-02-07 23:12:33Z luke $