puppet 0.13.6 → 0.16.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 (149) hide show
  1. data/CHANGELOG +57 -0
  2. data/Rakefile +38 -410
  3. data/bin/puppet +14 -12
  4. data/bin/puppetca +1 -3
  5. data/bin/puppetd +25 -7
  6. data/bin/puppetdoc +161 -104
  7. data/bin/puppetmasterd +4 -4
  8. data/conf/epm.list +8 -0
  9. data/conf/redhat/client.init +6 -1
  10. data/conf/redhat/no-chuser-0.15.1.patch +38 -0
  11. data/conf/redhat/puppet.spec +20 -5
  12. data/conf/redhat/puppetd.conf +1 -1
  13. data/conf/redhat/puppetmasterd.conf +1 -1
  14. data/conf/redhat/server.init +2 -4
  15. data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
  16. data/examples/code/snippets/selectorvalues.pp +15 -0
  17. data/examples/code/snippets/singleselector.pp +22 -0
  18. data/examples/code/snippets/tag.pp +9 -0
  19. data/ext/module_puppet +1 -1
  20. data/install.rb +303 -303
  21. data/lib/puppet.rb +7 -9
  22. data/lib/puppet/client.rb +18 -5
  23. data/lib/puppet/client/dipper.rb +12 -10
  24. data/lib/puppet/client/master.rb +113 -41
  25. data/lib/puppet/client/pelement.rb +20 -0
  26. data/lib/puppet/config.rb +113 -6
  27. data/lib/puppet/element.rb +1 -3
  28. data/lib/puppet/event.rb +12 -23
  29. data/lib/puppet/filetype.rb +93 -5
  30. data/lib/puppet/inifile.rb +201 -0
  31. data/lib/puppet/log.rb +18 -6
  32. data/lib/puppet/parameter.rb +80 -29
  33. data/lib/puppet/parser/ast.rb +6 -4
  34. data/lib/puppet/parser/ast/caseopt.rb +13 -4
  35. data/lib/puppet/parser/ast/casestatement.rb +2 -2
  36. data/lib/puppet/parser/ast/component.rb +4 -14
  37. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  38. data/lib/puppet/parser/ast/leaf.rb +12 -0
  39. data/lib/puppet/parser/ast/node.rb +4 -4
  40. data/lib/puppet/parser/ast/objectdef.rb +5 -51
  41. data/lib/puppet/parser/ast/selector.rb +2 -0
  42. data/lib/puppet/parser/ast/tag.rb +26 -0
  43. data/lib/puppet/parser/interpreter.rb +89 -74
  44. data/lib/puppet/parser/lexer.rb +4 -3
  45. data/lib/puppet/parser/parser.rb +440 -378
  46. data/lib/puppet/parser/scope.rb +844 -887
  47. data/lib/puppet/server.rb +12 -1
  48. data/lib/puppet/server/authconfig.rb +166 -0
  49. data/lib/puppet/server/authstore.rb +8 -6
  50. data/lib/puppet/server/ca.rb +23 -26
  51. data/lib/puppet/server/filebucket.rb +24 -23
  52. data/lib/puppet/server/fileserver.rb +116 -47
  53. data/lib/puppet/server/master.rb +58 -19
  54. data/lib/puppet/server/pelement.rb +176 -0
  55. data/lib/puppet/server/rights.rb +78 -0
  56. data/lib/puppet/server/servlet.rb +19 -6
  57. data/lib/puppet/sslcertificates.rb +4 -2
  58. data/lib/puppet/sslcertificates/ca.rb +66 -34
  59. data/lib/puppet/storage.rb +20 -26
  60. data/lib/puppet/transaction.rb +49 -92
  61. data/lib/puppet/type.rb +142 -35
  62. data/lib/puppet/type/cron.rb +29 -14
  63. data/lib/puppet/type/exec.rb +92 -35
  64. data/lib/puppet/type/group.rb +29 -11
  65. data/lib/puppet/type/nameservice.rb +50 -1
  66. data/lib/puppet/type/nameservice/netinfo.rb +68 -1
  67. data/lib/puppet/type/nameservice/objectadd.rb +1 -0
  68. data/lib/puppet/type/package.rb +150 -109
  69. data/lib/puppet/type/package/apple.rb +27 -0
  70. data/lib/puppet/type/package/apt.rb +1 -0
  71. data/lib/puppet/type/package/darwinport.rb +97 -0
  72. data/lib/puppet/type/package/dpkg.rb +10 -2
  73. data/lib/puppet/type/package/freebsd.rb +19 -0
  74. data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
  75. data/lib/puppet/type/package/ports.rb +98 -0
  76. data/lib/puppet/type/package/rpm.rb +43 -7
  77. data/lib/puppet/type/package/sun.rb +53 -36
  78. data/lib/puppet/type/package/yum.rb +5 -16
  79. data/lib/puppet/type/parsedtype.rb +41 -29
  80. data/lib/puppet/type/parsedtype/host.rb +13 -5
  81. data/lib/puppet/type/parsedtype/mount.rb +250 -0
  82. data/lib/puppet/type/parsedtype/port.rb +8 -6
  83. data/lib/puppet/type/pfile.rb +284 -30
  84. data/lib/puppet/type/pfile/checksum.rb +96 -68
  85. data/lib/puppet/type/pfile/content.rb +16 -13
  86. data/lib/puppet/type/pfile/ensure.rb +64 -126
  87. data/lib/puppet/type/pfile/group.rb +12 -5
  88. data/lib/puppet/type/pfile/mode.rb +16 -4
  89. data/lib/puppet/type/pfile/source.rb +47 -73
  90. data/lib/puppet/type/pfile/target.rb +81 -0
  91. data/lib/puppet/type/pfile/uid.rb +10 -3
  92. data/lib/puppet/type/pfilebucket.rb +12 -3
  93. data/lib/puppet/type/schedule.rb +5 -1
  94. data/lib/puppet/type/service.rb +138 -66
  95. data/lib/puppet/type/service/debian.rb +9 -3
  96. data/lib/puppet/type/service/init.rb +51 -56
  97. data/lib/puppet/type/service/smf.rb +16 -6
  98. data/lib/puppet/type/state.rb +71 -32
  99. data/lib/puppet/type/symlink.rb +12 -7
  100. data/lib/puppet/type/tidy.rb +5 -1
  101. data/lib/puppet/type/user.rb +116 -20
  102. data/lib/puppet/type/yumrepo.rb +314 -0
  103. data/lib/puppet/util.rb +84 -14
  104. data/test/client/client.rb +41 -18
  105. data/test/client/master.rb +50 -4
  106. data/test/executables/puppetbin.rb +31 -4
  107. data/test/executables/puppetca.rb +18 -2
  108. data/test/language/ast.rb +201 -31
  109. data/test/language/interpreter.rb +8 -2
  110. data/test/{parser → language}/lexer.rb +1 -1
  111. data/test/language/node.rb +84 -0
  112. data/test/{parser → language}/parser.rb +1 -1
  113. data/test/language/scope.rb +101 -2
  114. data/test/language/snippets.rb +23 -2
  115. data/test/other/config.rb +99 -1
  116. data/test/other/filetype.rb +95 -0
  117. data/test/other/inifile.rb +114 -0
  118. data/test/other/log.rb +3 -2
  119. data/test/other/transactions.rb +55 -10
  120. data/test/puppet/utiltest.rb +25 -1
  121. data/test/puppettest.rb +140 -46
  122. data/test/server/authconfig.rb +56 -0
  123. data/test/server/bucket.rb +32 -18
  124. data/test/server/fileserver.rb +75 -30
  125. data/test/server/master.rb +27 -4
  126. data/test/server/pelement.rb +298 -0
  127. data/test/server/rights.rb +41 -0
  128. data/test/server/server.rb +2 -2
  129. data/test/tagging/tagging.rb +100 -1
  130. data/test/types/basic.rb +3 -3
  131. data/test/types/cron.rb +24 -1
  132. data/test/types/exec.rb +99 -1
  133. data/test/types/file.rb +298 -2
  134. data/test/types/filebucket.rb +4 -15
  135. data/test/types/filesources.rb +43 -14
  136. data/test/types/group.rb +1 -13
  137. data/test/types/mount.rb +277 -0
  138. data/test/types/package.rb +164 -33
  139. data/test/types/parameter.rb +107 -0
  140. data/test/types/port.rb +2 -1
  141. data/test/types/service.rb +37 -2
  142. data/test/types/state.rb +92 -0
  143. data/test/types/symlink.rb +30 -2
  144. data/test/types/tidy.rb +2 -14
  145. data/test/types/type.rb +35 -1
  146. data/test/types/user.rb +110 -1
  147. data/test/types/yumrepo.rb +95 -0
  148. metadata +316 -290
  149. data/test/types/filetype.rb +0 -160
@@ -10,18 +10,20 @@ require 'puppet/server'
10
10
  require 'test/unit'
11
11
  require 'puppettest.rb'
12
12
 
13
- # $Id: master.rb 908 2006-02-14 00:14:56Z luke $
13
+ # $Id: master.rb 1107 2006-04-11 23:00:29Z luke $
14
14
 
15
15
  class TestMasterClient < Test::Unit::TestCase
16
16
  include ServerTest
17
17
 
18
- def mkmaster(file)
18
+ def mkmaster(file = nil)
19
19
  master = nil
20
+
21
+ file ||= mktestmanifest()
20
22
  # create our master
21
23
  assert_nothing_raised() {
22
24
  # this is the default server setup
23
25
  master = Puppet::Server::Master.new(
24
- :File => file,
26
+ :Manifest => file,
25
27
  :UseNodes => false,
26
28
  :Local => true
27
29
  )
@@ -29,7 +31,8 @@ class TestMasterClient < Test::Unit::TestCase
29
31
  return master
30
32
  end
31
33
 
32
- def mkclient(master)
34
+ def mkclient(master = nil)
35
+ master ||= mkmaster()
33
36
  client = nil
34
37
  assert_nothing_raised() {
35
38
  client = Puppet::Client::MasterClient.new(
@@ -69,4 +72,47 @@ class TestMasterClient < Test::Unit::TestCase
69
72
 
70
73
  assert(FileTest.exists?(@createdfile), "Enabled client did not run")
71
74
  end
75
+
76
+ # Make sure we're getting the client version in our list of facts
77
+ def test_clientversionfact
78
+ facts = nil
79
+ assert_nothing_raised {
80
+ facts = Puppet::Client::MasterClient.facts
81
+ }
82
+
83
+ assert_equal(Puppet.version.to_s, facts["clientversion"])
84
+
85
+ end
86
+
87
+ # Make sure the client correctly locks itself
88
+ def test_locking
89
+ manifest = mktestmanifest
90
+
91
+ master = nil
92
+
93
+ # First test with a networked master
94
+ client = Puppet::Client::MasterClient.new(
95
+ :Server => "localhost"
96
+ )
97
+
98
+ assert_nothing_raised do
99
+ client.lock do
100
+ pid = nil
101
+ assert(pid = client.locked?, "Client is not locked")
102
+ assert(pid =~ /^\d+$/, "PID is, um, not a pid")
103
+ end
104
+ end
105
+ assert(! client.locked?)
106
+
107
+ # Now test with a local client
108
+ client = mkclient
109
+
110
+ assert_nothing_raised do
111
+ client.lock do
112
+ pid = nil
113
+ assert(! client.locked?, "Local client is locked")
114
+ end
115
+ end
116
+ assert(! client.locked?)
117
+ end
72
118
  end
@@ -17,12 +17,11 @@ class TestPuppetBin < Test::Unit::TestCase
17
17
  assert_nothing_raised {
18
18
  output = %x{puppet --version}.chomp
19
19
  }
20
- assert(output == Puppet.version)
20
+ assert_equal(Puppet.version, output)
21
21
  end
22
22
 
23
23
  def test_execution
24
24
  file = mktestmanifest()
25
- @@tmpfiles << tempfile()
26
25
 
27
26
  output = nil
28
27
  cmd = "puppet"
@@ -32,7 +31,9 @@ class TestPuppetBin < Test::Unit::TestCase
32
31
  #cmd += " --fqdn %s" % fqdn
33
32
  cmd += " --confdir %s" % Puppet[:confdir]
34
33
  cmd += " --vardir %s" % Puppet[:vardir]
35
- cmd += " --logdest %s" % "/dev/null"
34
+ unless Puppet[:debug]
35
+ cmd += " --logdest %s" % "/dev/null"
36
+ end
36
37
 
37
38
  assert_nothing_raised {
38
39
  system(cmd + " " + file)
@@ -41,6 +42,32 @@ class TestPuppetBin < Test::Unit::TestCase
41
42
 
42
43
  assert(FileTest.exists?(@createdfile), "Failed to create config'ed file")
43
44
  end
45
+
46
+ def test_inlineexecution
47
+ path = tempfile()
48
+ code = "file { '#{path}': ensure => file }"
49
+
50
+ output = nil
51
+ cmd = "puppet"
52
+ if Puppet[:debug]
53
+ cmd += " --debug"
54
+ end
55
+ #cmd += " --fqdn %s" % fqdn
56
+ cmd += " --confdir %s" % Puppet[:confdir]
57
+ cmd += " --vardir %s" % Puppet[:vardir]
58
+ unless Puppet[:debug]
59
+ cmd += " --logdest %s" % "/dev/null"
60
+ end
61
+
62
+ cmd += " -e \"#{code}\""
63
+
64
+ assert_nothing_raised {
65
+ system(cmd)
66
+ }
67
+ assert($? == 0, "Puppet exited with code %s" % $?.to_i)
68
+
69
+ assert(FileTest.exists?(path), "Failed to create config'ed file")
70
+ end
44
71
  end
45
72
 
46
- # $Id: $
73
+ # $Id: puppetbin.rb 1065 2006-04-04 22:23:08Z luke $
@@ -25,7 +25,11 @@ class TestPuppetCA < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  def runca(args)
28
- return %x{puppetca --confdir=#{Puppet[:confdir]} --user #{Process.uid} --group #{Process.gid} #{args} 2>&1}
28
+ debug = ""
29
+ if Puppet[:debug]
30
+ debug = "-d "
31
+ end
32
+ return %x{puppetca --user=#{Puppet[:user]} #{debug} --group=#{Puppet[:group]} --confdir=#{Puppet[:confdir]} #{args} 2>&1}
29
33
 
30
34
  end
31
35
 
@@ -60,8 +64,20 @@ class TestPuppetCA < Test::Unit::TestCase
60
64
  assert_nothing_raised {
61
65
  output = runca("--sign -a").chomp.split("\n")
62
66
  }
67
+
68
+
63
69
  assert_equal($?,0)
64
70
  assert_equal(["Signed host.test.com"], output)
71
+
72
+ signedfile = File.join(Puppet[:signeddir], "host.test.com.pem")
73
+ assert(FileTest.exists?(signedfile), "cert does not exist")
74
+ assert(! FileTest.executable?(signedfile), "cert is executable")
75
+
76
+ uid = Puppet::Util.uid(Puppet[:user])
77
+
78
+ if Process.uid == 0
79
+ assert(! FileTest.owned?(signedfile), "cert is owned by root")
80
+ end
65
81
  assert_nothing_raised {
66
82
  output = runca("--list").chomp.split("\n")
67
83
  }
@@ -70,4 +86,4 @@ class TestPuppetCA < Test::Unit::TestCase
70
86
  end
71
87
  end
72
88
 
73
- # $Id: puppetca.rb 873 2006-02-07 23:12:33Z luke $
89
+ # $Id: puppetca.rb 1113 2006-04-17 16:15:33Z luke $
@@ -29,6 +29,7 @@ class TestAST < Test::Unit::TestCase
29
29
 
30
30
  # Create child class two
31
31
  children << classobj("child2", :parentclass => nameobj("parent"))
32
+ classes = %w{parent child1 child2}
32
33
 
33
34
  # Now call the two classes
34
35
  assert_nothing_raised("Could not add AST nodes for calling") {
@@ -60,11 +61,13 @@ class TestAST < Test::Unit::TestCase
60
61
  assert_equal(1, scope.find_all { |child|
61
62
  child.lookupobject(:name => "/parent", :type => "file")
62
63
  }.length, "Found incorrect number of '/parent' objects")
64
+
65
+ assert_equal(classes.sort, scope.classlist.sort)
63
66
  end
64
67
 
65
- # Test that 'setobject' collects all of an object's parameters and stores
68
+ # Test that 'tagobject' collects all of an object's parameters and stores
66
69
  # them in one TransObject, rather than many. This is probably a bad idea.
67
- def test_setobject
70
+ def test_tagobject
68
71
  top = nil
69
72
  children = [
70
73
  fileobj("/etc", "owner" => "root"),
@@ -128,8 +131,122 @@ class TestAST < Test::Unit::TestCase
128
131
  }
129
132
  end
130
133
 
134
+ # Verify that nodes don't evaluate code in other node scopes but that their
135
+ # facts work outside their scopes.
136
+ def test_nodescopes
137
+ parent = child1 = nil
138
+ topchildren = []
139
+
140
+ # create the parent class
141
+ topchildren << classobj("everyone")
142
+
143
+ topchildren << classobj("parent")
144
+
145
+
146
+ classes = %w{everyone parent}
147
+
148
+ # And a variable, so we verify the facts get set at the top
149
+ assert_nothing_raised {
150
+ children = []
151
+ children << varobj("yaytest", "$hostname")
152
+ }
153
+
154
+ nodes = []
155
+
156
+ 3.times do |i|
157
+ children = []
158
+
159
+ # Create a child class
160
+ topchildren << classobj("perchild#{i}", :parentclass => nameobj("parent"))
161
+ classes << "perchild%s"
162
+
163
+ # Create a child class
164
+ children << classobj("child", :parentclass => nameobj("parent"))
165
+
166
+ classes << "child"
167
+
168
+ ["child", "everyone", "perchild#{i}"].each do |name|
169
+ # Now call our child class
170
+ assert_nothing_raised {
171
+ children << AST::ObjectDef.new(
172
+ :type => nameobj(name),
173
+ :params => astarray()
174
+ )
175
+ }
176
+ end
177
+
178
+ # and another variable
179
+ assert_nothing_raised {
180
+ children << varobj("rahtest", "$hostname")
181
+ }
182
+
183
+ # create the node
184
+ nodename = "node#{i}"
185
+ nodes << nodename
186
+ assert_nothing_raised("Could not create parent object") {
187
+ topchildren << AST::NodeDef.new(
188
+ :names => nameobj(nodename),
189
+ :code => AST::ASTArray.new(
190
+ :children => children
191
+ )
192
+ )
193
+ }
194
+ end
195
+
196
+ # Create the wrapper object
197
+ top = nil
198
+ assert_nothing_raised("Could not create top object") {
199
+ top = AST::ASTArray.new(
200
+ :children => topchildren
201
+ )
202
+ }
203
+
204
+ nodes.each_with_index do |node, i|
205
+ # Evaluate the parse tree
206
+ scope = Puppet::Parser::Scope.new()
207
+ args = {:names => [node], :facts => {"hostname" => node}, :ast => top}
208
+
209
+ # verify that we can evaluate it okay
210
+ trans = nil
211
+ assert_nothing_raised("Could not retrieve node definition") {
212
+ trans = scope.evaluate(args)
213
+ }
214
+
215
+ assert_equal(node, scope.lookupvar("hostname"))
216
+
217
+ assert(trans, "Could not retrieve trans objects")
218
+
219
+ # and that we can convert them to type objects
220
+ objects = nil
221
+ assert_nothing_raised("Could not retrieve node definition") {
222
+ objects = trans.to_type
223
+ }
224
+
225
+ assert(objects, "Could not retrieve trans objects")
226
+
227
+ count = 0
228
+ # Make sure the node name gets into the path correctly.
229
+ Puppet.type(:file).each { |obj|
230
+ count += 1
231
+ assert(obj.path !~ /#{node}\[#{node}\]/,
232
+ "Node name appears twice")
233
+ }
234
+
235
+ assert(count > 0, "Did not create any files")
236
+
237
+ classes.each do |name|
238
+ if name =~ /%s/
239
+ name = name % i
240
+ end
241
+ assert(Puppet::Type.type(:file)["/#{name}"], "Could not find '#{name}'")
242
+ end
243
+
244
+ Puppet::Type.type(:file).clear
245
+ end
246
+ end
247
+
131
248
  # Verify that classes are correctly defined in node scopes.
132
- def test_nodeclasslookup
249
+ def disabled_test_nodeclasslookup
133
250
  parent = child1 = nil
134
251
  children = []
135
252
 
@@ -234,11 +351,11 @@ class TestAST < Test::Unit::TestCase
234
351
 
235
352
  # create a short-name node
236
353
  shortname = "mynodename"
237
- children << nodeobj(shortname)
354
+ children << nodedef(shortname)
238
355
 
239
356
  # And a long-name node
240
357
  longname = "node.domain.com"
241
- children << nodeobj(longname)
358
+ children << nodedef(longname)
242
359
 
243
360
  # Create the wrapper object
244
361
  top = nil
@@ -249,25 +366,25 @@ class TestAST < Test::Unit::TestCase
249
366
  }
250
367
 
251
368
  # Evaluate the parse tree
252
- scope = nil
253
- assert_nothing_raised("Could not evaluate node") {
254
- scope = Puppet::Parser::Scope.new()
255
- top.evaluate(:scope => scope)
256
- }
369
+ scope = Puppet::Parser::Scope.new()
257
370
 
258
371
  # Verify we can find the node via a search list
259
372
  objects = nil
260
373
  assert_nothing_raised("Could not retrieve short node definition") {
261
- objects = scope.evalnode(
262
- :name => ["%s.domain.com" % shortname, shortname], :facts => {}
374
+ objects = scope.evaluate(
375
+ :names => ["%s.domain.com" % shortname, shortname], :facts => {},
376
+ :ast => top
263
377
  )
264
378
  }
265
379
  assert(objects, "Could not retrieve short node definition")
266
380
 
381
+ scope = Puppet::Parser::Scope.new()
382
+
267
383
  # and then look for the long name
268
384
  assert_nothing_raised("Could not retrieve long node definition") {
269
- objects = scope.evalnode(
270
- :name => [longname.sub(/\..+/, ''), longname], :facts => {}
385
+ objects = scope.evaluate(
386
+ :names => [longname.sub(/\..+/, ''), longname], :facts => {},
387
+ :ast => top
271
388
  )
272
389
  }
273
390
  assert(objects, "Could not retrieve long node definition")
@@ -282,7 +399,7 @@ class TestAST < Test::Unit::TestCase
282
399
 
283
400
  # create a short-name node
284
401
  name = "mynodename"
285
- children << nodeobj(name)
402
+ children << nodedef(name)
286
403
 
287
404
  # Create the wrapper object
288
405
  top = nil
@@ -292,17 +409,12 @@ class TestAST < Test::Unit::TestCase
292
409
  )
293
410
  }
294
411
 
295
- # Evaluate the parse tree
296
- scope = nil
297
- assert_nothing_raised("Could not evaluate node") {
298
- scope = Puppet::Parser::Scope.new()
299
- top.evaluate(:scope => scope)
300
- }
412
+ scope = Puppet::Parser::Scope.new()
301
413
 
302
414
  # Verify we can find the node via a search list
303
415
  objects = nil
304
416
  assert_nothing_raised("Could not retrieve short node definition") {
305
- objects = scope.evalnode(:name => [name], :facts => {})
417
+ objects = scope.evaluate(:names => [name], :facts => {}, :ast => top)
306
418
  }
307
419
  assert(objects, "Could not retrieve short node definition")
308
420
 
@@ -319,10 +431,12 @@ class TestAST < Test::Unit::TestCase
319
431
  # Test that we can 'include' variables, not just normal strings.
320
432
  def test_includevars
321
433
  children = []
434
+ classes = []
322
435
 
323
436
  # Create our class for testin
324
437
  klassname = "include"
325
438
  children << classobj(klassname)
439
+ classes << klassname
326
440
 
327
441
  # Then add our variable assignment
328
442
  children << varobj("klassvar", klassname)
@@ -345,6 +459,9 @@ class TestAST < Test::Unit::TestCase
345
459
  top.evaluate(:scope => scope)
346
460
  }
347
461
 
462
+ # Verify we get the right classlist back
463
+ assert_equal(classes.sort, scope.classlist.sort)
464
+
348
465
  # Verify we can find the node via a search list
349
466
  objects = nil
350
467
  assert_nothing_raised("Could not retrieve objects") {
@@ -363,7 +480,7 @@ class TestAST < Test::Unit::TestCase
363
480
 
364
481
  # create the base node
365
482
  name = "basenode"
366
- children << nodeobj(name)
483
+ children << nodedef(name)
367
484
 
368
485
  # and the sub node
369
486
  name = "subnode"
@@ -377,7 +494,7 @@ class TestAST < Test::Unit::TestCase
377
494
  ]
378
495
  )
379
496
  )
380
- #subnode = nodeobj(name)
497
+ #subnode = nodedef(name)
381
498
  #subnode.parentclass = "basenode"
382
499
 
383
500
  #children << subnode
@@ -391,16 +508,12 @@ class TestAST < Test::Unit::TestCase
391
508
  }
392
509
 
393
510
  # Evaluate the parse tree
394
- scope = nil
395
- assert_nothing_raised("Could not evaluate node") {
396
- scope = Puppet::Parser::Scope.new()
397
- top.evaluate(:scope => scope)
398
- }
511
+ scope = Puppet::Parser::Scope.new()
399
512
 
400
513
  # Verify we can find the node via a search list
401
514
  objects = nil
402
- assert_nothing_raised("Could not retrieve node definition") {
403
- objects = scope.evalnode(:name => [name], :facts => {})
515
+ assert_nothing_raised("Could not evaluate node") {
516
+ objects = scope.evaluate(:names => [name], :facts => {}, :ast => top)
404
517
  }
405
518
  assert(objects, "Could not retrieve node definition")
406
519
 
@@ -531,4 +644,61 @@ class TestAST < Test::Unit::TestCase
531
644
  objects = top.evaluate(:scope => scope)
532
645
  }
533
646
  end
647
+
648
+ def test_setclass
649
+ type = "yay"
650
+ classes = [type]
651
+ children = []
652
+ # Create child class one
653
+ children << varobj("variable", "aclass")
654
+ children << tagobj(type, varref("variable"))
655
+ children << tagobj(type)
656
+
657
+ classes << "aclass"
658
+
659
+ top = nil
660
+ assert_nothing_raised("Could not create top object") {
661
+ top = AST::ASTArray.new(
662
+ :children => children
663
+ )
664
+ }
665
+
666
+ scope = nil
667
+ assert_nothing_raised("Could not evaluate") {
668
+ scope = Puppet::Parser::Scope.new()
669
+ objects = top.evaluate(:scope => scope)
670
+ }
671
+
672
+
673
+ classes.each do |tag|
674
+ assert(scope.classlist.include?(tag), "Did not set class %s" % tag)
675
+ end
676
+
677
+ end
678
+
679
+ # Test that we strip the domain off of host names before they are set as classes
680
+ def test_nodenamestrip
681
+ children = []
682
+
683
+ longname = "node.domain.com"
684
+ children << nodedef(longname)
685
+
686
+ # Create the wrapper object
687
+ top = nil
688
+ assert_nothing_raised("Could not create top object") {
689
+ top = AST::ASTArray.new(
690
+ :children => children
691
+ )
692
+ }
693
+
694
+ scope = Puppet::Parser::Scope.new()
695
+
696
+ assert_nothing_raised("Could not evaluate node") {
697
+ objects = scope.evaluate(:names => [longname], :facts => {}, :ast => top)
698
+ }
699
+
700
+ assert(!scope.classlist.include?("node.domain.com"),
701
+ "Node's long name got set")
702
+ assert(scope.classlist.include?("node"), "Node's name did not get set")
703
+ end
534
704
  end