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.
- data/CHANGELOG +57 -0
- data/Rakefile +38 -410
- data/bin/puppet +14 -12
- data/bin/puppetca +1 -3
- data/bin/puppetd +25 -7
- data/bin/puppetdoc +161 -104
- data/bin/puppetmasterd +4 -4
- data/conf/epm.list +8 -0
- data/conf/redhat/client.init +6 -1
- data/conf/redhat/no-chuser-0.15.1.patch +38 -0
- data/conf/redhat/puppet.spec +20 -5
- data/conf/redhat/puppetd.conf +1 -1
- data/conf/redhat/puppetmasterd.conf +1 -1
- data/conf/redhat/server.init +2 -4
- data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
- data/examples/code/snippets/selectorvalues.pp +15 -0
- data/examples/code/snippets/singleselector.pp +22 -0
- data/examples/code/snippets/tag.pp +9 -0
- data/ext/module_puppet +1 -1
- data/install.rb +303 -303
- data/lib/puppet.rb +7 -9
- data/lib/puppet/client.rb +18 -5
- data/lib/puppet/client/dipper.rb +12 -10
- data/lib/puppet/client/master.rb +113 -41
- data/lib/puppet/client/pelement.rb +20 -0
- data/lib/puppet/config.rb +113 -6
- data/lib/puppet/element.rb +1 -3
- data/lib/puppet/event.rb +12 -23
- data/lib/puppet/filetype.rb +93 -5
- data/lib/puppet/inifile.rb +201 -0
- data/lib/puppet/log.rb +18 -6
- data/lib/puppet/parameter.rb +80 -29
- data/lib/puppet/parser/ast.rb +6 -4
- data/lib/puppet/parser/ast/caseopt.rb +13 -4
- data/lib/puppet/parser/ast/casestatement.rb +2 -2
- data/lib/puppet/parser/ast/component.rb +4 -14
- data/lib/puppet/parser/ast/hostclass.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +12 -0
- data/lib/puppet/parser/ast/node.rb +4 -4
- data/lib/puppet/parser/ast/objectdef.rb +5 -51
- data/lib/puppet/parser/ast/selector.rb +2 -0
- data/lib/puppet/parser/ast/tag.rb +26 -0
- data/lib/puppet/parser/interpreter.rb +89 -74
- data/lib/puppet/parser/lexer.rb +4 -3
- data/lib/puppet/parser/parser.rb +440 -378
- data/lib/puppet/parser/scope.rb +844 -887
- data/lib/puppet/server.rb +12 -1
- data/lib/puppet/server/authconfig.rb +166 -0
- data/lib/puppet/server/authstore.rb +8 -6
- data/lib/puppet/server/ca.rb +23 -26
- data/lib/puppet/server/filebucket.rb +24 -23
- data/lib/puppet/server/fileserver.rb +116 -47
- data/lib/puppet/server/master.rb +58 -19
- data/lib/puppet/server/pelement.rb +176 -0
- data/lib/puppet/server/rights.rb +78 -0
- data/lib/puppet/server/servlet.rb +19 -6
- data/lib/puppet/sslcertificates.rb +4 -2
- data/lib/puppet/sslcertificates/ca.rb +66 -34
- data/lib/puppet/storage.rb +20 -26
- data/lib/puppet/transaction.rb +49 -92
- data/lib/puppet/type.rb +142 -35
- data/lib/puppet/type/cron.rb +29 -14
- data/lib/puppet/type/exec.rb +92 -35
- data/lib/puppet/type/group.rb +29 -11
- data/lib/puppet/type/nameservice.rb +50 -1
- data/lib/puppet/type/nameservice/netinfo.rb +68 -1
- data/lib/puppet/type/nameservice/objectadd.rb +1 -0
- data/lib/puppet/type/package.rb +150 -109
- data/lib/puppet/type/package/apple.rb +27 -0
- data/lib/puppet/type/package/apt.rb +1 -0
- data/lib/puppet/type/package/darwinport.rb +97 -0
- data/lib/puppet/type/package/dpkg.rb +10 -2
- data/lib/puppet/type/package/freebsd.rb +19 -0
- data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
- data/lib/puppet/type/package/ports.rb +98 -0
- data/lib/puppet/type/package/rpm.rb +43 -7
- data/lib/puppet/type/package/sun.rb +53 -36
- data/lib/puppet/type/package/yum.rb +5 -16
- data/lib/puppet/type/parsedtype.rb +41 -29
- data/lib/puppet/type/parsedtype/host.rb +13 -5
- data/lib/puppet/type/parsedtype/mount.rb +250 -0
- data/lib/puppet/type/parsedtype/port.rb +8 -6
- data/lib/puppet/type/pfile.rb +284 -30
- data/lib/puppet/type/pfile/checksum.rb +96 -68
- data/lib/puppet/type/pfile/content.rb +16 -13
- data/lib/puppet/type/pfile/ensure.rb +64 -126
- data/lib/puppet/type/pfile/group.rb +12 -5
- data/lib/puppet/type/pfile/mode.rb +16 -4
- data/lib/puppet/type/pfile/source.rb +47 -73
- data/lib/puppet/type/pfile/target.rb +81 -0
- data/lib/puppet/type/pfile/uid.rb +10 -3
- data/lib/puppet/type/pfilebucket.rb +12 -3
- data/lib/puppet/type/schedule.rb +5 -1
- data/lib/puppet/type/service.rb +138 -66
- data/lib/puppet/type/service/debian.rb +9 -3
- data/lib/puppet/type/service/init.rb +51 -56
- data/lib/puppet/type/service/smf.rb +16 -6
- data/lib/puppet/type/state.rb +71 -32
- data/lib/puppet/type/symlink.rb +12 -7
- data/lib/puppet/type/tidy.rb +5 -1
- data/lib/puppet/type/user.rb +116 -20
- data/lib/puppet/type/yumrepo.rb +314 -0
- data/lib/puppet/util.rb +84 -14
- data/test/client/client.rb +41 -18
- data/test/client/master.rb +50 -4
- data/test/executables/puppetbin.rb +31 -4
- data/test/executables/puppetca.rb +18 -2
- data/test/language/ast.rb +201 -31
- data/test/language/interpreter.rb +8 -2
- data/test/{parser → language}/lexer.rb +1 -1
- data/test/language/node.rb +84 -0
- data/test/{parser → language}/parser.rb +1 -1
- data/test/language/scope.rb +101 -2
- data/test/language/snippets.rb +23 -2
- data/test/other/config.rb +99 -1
- data/test/other/filetype.rb +95 -0
- data/test/other/inifile.rb +114 -0
- data/test/other/log.rb +3 -2
- data/test/other/transactions.rb +55 -10
- data/test/puppet/utiltest.rb +25 -1
- data/test/puppettest.rb +140 -46
- data/test/server/authconfig.rb +56 -0
- data/test/server/bucket.rb +32 -18
- data/test/server/fileserver.rb +75 -30
- data/test/server/master.rb +27 -4
- data/test/server/pelement.rb +298 -0
- data/test/server/rights.rb +41 -0
- data/test/server/server.rb +2 -2
- data/test/tagging/tagging.rb +100 -1
- data/test/types/basic.rb +3 -3
- data/test/types/cron.rb +24 -1
- data/test/types/exec.rb +99 -1
- data/test/types/file.rb +298 -2
- data/test/types/filebucket.rb +4 -15
- data/test/types/filesources.rb +43 -14
- data/test/types/group.rb +1 -13
- data/test/types/mount.rb +277 -0
- data/test/types/package.rb +164 -33
- data/test/types/parameter.rb +107 -0
- data/test/types/port.rb +2 -1
- data/test/types/service.rb +37 -2
- data/test/types/state.rb +92 -0
- data/test/types/symlink.rb +30 -2
- data/test/types/tidy.rb +2 -14
- data/test/types/type.rb +35 -1
- data/test/types/user.rb +110 -1
- data/test/types/yumrepo.rb +95 -0
- metadata +316 -290
- data/test/types/filetype.rb +0 -160
data/test/client/master.rb
CHANGED
@@ -10,18 +10,20 @@ require 'puppet/server'
|
|
10
10
|
require 'test/unit'
|
11
11
|
require 'puppettest.rb'
|
12
12
|
|
13
|
-
# $Id: master.rb
|
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
|
-
:
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
89
|
+
# $Id: puppetca.rb 1113 2006-04-17 16:15:33Z luke $
|
data/test/language/ast.rb
CHANGED
@@ -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 '
|
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
|
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
|
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 <<
|
354
|
+
children << nodedef(shortname)
|
238
355
|
|
239
356
|
# And a long-name node
|
240
357
|
longname = "node.domain.com"
|
241
|
-
children <<
|
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 =
|
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.
|
262
|
-
:
|
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.
|
270
|
-
:
|
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 <<
|
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
|
-
|
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.
|
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 <<
|
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 =
|
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 =
|
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
|
403
|
-
objects = scope.
|
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
|