puppet 0.9.2 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +58 -0
- data/README +21 -18
- data/Rakefile +176 -36
- data/bin/puppet +34 -48
- data/bin/puppetca +41 -28
- data/bin/puppetd +87 -65
- data/bin/puppetdoc +99 -23
- data/bin/puppetmasterd +72 -91
- data/conf/redhat/client.init +80 -0
- data/conf/redhat/client.sysconfig +11 -0
- data/conf/redhat/fileserver.conf +12 -0
- data/conf/redhat/puppet.spec +130 -0
- data/conf/redhat/server.init +89 -0
- data/conf/redhat/server.sysconfig +9 -0
- data/examples/code/allatonce +2 -2
- data/examples/code/assignments +1 -1
- data/examples/code/classing +2 -2
- data/examples/code/components +2 -2
- data/examples/code/file.bl +5 -5
- data/examples/code/filedefaults +2 -2
- data/examples/code/fileparsing +1 -1
- data/examples/code/filerecursion +1 -1
- data/examples/code/functions +1 -1
- data/examples/code/groups +1 -1
- data/examples/code/importing +1 -1
- data/examples/code/nodes +1 -1
- data/examples/code/one +1 -1
- data/examples/code/relationships +2 -2
- data/examples/code/simpletests +5 -5
- data/examples/code/snippets/argumentdefaults +2 -2
- data/examples/code/snippets/casestatement +16 -8
- data/examples/code/snippets/classheirarchy.pp +4 -4
- data/examples/code/snippets/classincludes.pp +4 -4
- data/examples/code/snippets/classpathtest +2 -2
- data/examples/code/snippets/componentmetaparams.pp +11 -0
- data/examples/code/snippets/dirchmod +5 -5
- data/examples/code/snippets/emptyclass.pp +9 -0
- data/examples/code/snippets/failmissingexecpath.pp +1 -1
- data/examples/code/snippets/falsevalues.pp +1 -1
- data/examples/code/snippets/filecreate +5 -5
- data/examples/code/snippets/implicititeration +5 -5
- data/examples/code/snippets/multipleinstances +4 -4
- data/examples/code/snippets/namevartest +3 -3
- data/examples/code/snippets/scopetest +1 -1
- data/examples/code/snippets/selectorvalues.pp +3 -3
- data/examples/code/snippets/simpledefaults +2 -2
- data/examples/code/snippets/simpleselector +5 -5
- data/examples/code/snippets/singleary.pp +19 -0
- data/examples/root/etc/init.d/sleeper +3 -2
- data/ext/emacs/puppet-mode-init.el +6 -0
- data/ext/emacs/puppet-mode.el +189 -0
- data/ext/ldap/puppet.schema +17 -0
- data/ext/{module:puppet → module_puppet} +30 -31
- data/ext/vim/filetype.vim +9 -0
- data/ext/vim/puppet.vim +87 -0
- data/install.rb +63 -30
- data/lib/puppet.rb +216 -122
- data/lib/puppet/client.rb +51 -416
- data/lib/puppet/client/ca.rb +17 -0
- data/lib/puppet/client/dipper.rb +78 -0
- data/lib/puppet/client/file.rb +20 -0
- data/lib/puppet/client/log.rb +17 -0
- data/lib/puppet/client/master.rb +246 -0
- data/lib/puppet/client/proxy.rb +27 -0
- data/lib/puppet/client/status.rb +7 -0
- data/lib/puppet/config.rb +563 -13
- data/lib/puppet/daemon.rb +50 -22
- data/lib/puppet/element.rb +4 -4
- data/lib/puppet/event-loop.rb +1 -0
- data/lib/puppet/event-loop/better-definers.rb +367 -0
- data/lib/puppet/event-loop/event-loop.rb +355 -0
- data/lib/puppet/event-loop/signal-system.rb +220 -0
- data/lib/puppet/event.rb +9 -11
- data/lib/puppet/filetype.rb +195 -0
- data/lib/puppet/log.rb +35 -12
- data/lib/puppet/metric.rb +2 -2
- data/lib/puppet/networkclient.rb +145 -0
- data/lib/puppet/parameter.rb +335 -0
- data/lib/puppet/parser/ast.rb +42 -1453
- data/lib/puppet/parser/ast/astarray.rb +88 -0
- data/lib/puppet/parser/ast/branch.rb +47 -0
- data/lib/puppet/parser/ast/caseopt.rb +66 -0
- data/lib/puppet/parser/ast/casestatement.rb +78 -0
- data/lib/puppet/parser/ast/classdef.rb +78 -0
- data/lib/puppet/parser/ast/compdef.rb +111 -0
- data/lib/puppet/parser/ast/component.rb +105 -0
- data/lib/puppet/parser/ast/hostclass.rb +82 -0
- data/lib/puppet/parser/ast/leaf.rb +86 -0
- data/lib/puppet/parser/ast/node.rb +103 -0
- data/lib/puppet/parser/ast/nodedef.rb +68 -0
- data/lib/puppet/parser/ast/objectdef.rb +336 -0
- data/lib/puppet/parser/ast/objectparam.rb +30 -0
- data/lib/puppet/parser/ast/objectref.rb +76 -0
- data/lib/puppet/parser/ast/selector.rb +60 -0
- data/lib/puppet/parser/ast/typedefaults.rb +45 -0
- data/lib/puppet/parser/ast/vardef.rb +44 -0
- data/lib/puppet/parser/interpreter.rb +31 -14
- data/lib/puppet/parser/lexer.rb +2 -4
- data/lib/puppet/parser/parser.rb +332 -242
- data/lib/puppet/parser/scope.rb +55 -38
- data/lib/puppet/server.rb +43 -44
- data/lib/puppet/server/authstore.rb +3 -6
- data/lib/puppet/server/ca.rb +5 -2
- data/lib/puppet/server/filebucket.rb +2 -4
- data/lib/puppet/server/fileserver.rb +28 -12
- data/lib/puppet/server/logger.rb +15 -4
- data/lib/puppet/server/master.rb +62 -7
- data/lib/puppet/sslcertificates.rb +41 -607
- data/lib/puppet/sslcertificates/ca.rb +291 -0
- data/lib/puppet/sslcertificates/certificate.rb +283 -0
- data/lib/puppet/statechange.rb +6 -1
- data/lib/puppet/storage.rb +67 -56
- data/lib/puppet/transaction.rb +25 -9
- data/lib/puppet/transportable.rb +102 -22
- data/lib/puppet/type.rb +1096 -315
- data/lib/puppet/type/component.rb +30 -21
- data/lib/puppet/type/cron.rb +409 -448
- data/lib/puppet/type/exec.rb +234 -174
- data/lib/puppet/type/group.rb +65 -82
- data/lib/puppet/type/nameservice.rb +247 -3
- data/lib/puppet/type/nameservice/netinfo.rb +29 -40
- data/lib/puppet/type/nameservice/objectadd.rb +52 -66
- data/lib/puppet/type/nameservice/posix.rb +6 -194
- data/lib/puppet/type/package.rb +447 -295
- data/lib/puppet/type/package/apt.rb +51 -50
- data/lib/puppet/type/package/bsd.rb +82 -0
- data/lib/puppet/type/package/dpkg.rb +85 -88
- data/lib/puppet/type/package/rpm.rb +67 -63
- data/lib/puppet/type/package/sun.rb +119 -98
- data/lib/puppet/type/package/yum.rb +41 -37
- data/lib/puppet/type/parsedtype.rb +295 -0
- data/lib/puppet/type/parsedtype/host.rb +143 -0
- data/lib/puppet/type/parsedtype/port.rb +232 -0
- data/lib/puppet/type/parsedtype/sshkey.rb +129 -0
- data/lib/puppet/type/pfile.rb +484 -460
- data/lib/puppet/type/pfile/checksum.rb +237 -181
- data/lib/puppet/type/pfile/content.rb +67 -0
- data/lib/puppet/type/pfile/ensure.rb +212 -0
- data/lib/puppet/type/pfile/group.rb +106 -105
- data/lib/puppet/type/pfile/mode.rb +98 -101
- data/lib/puppet/type/pfile/source.rb +228 -209
- data/lib/puppet/type/pfile/type.rb +18 -21
- data/lib/puppet/type/pfile/uid.rb +127 -130
- data/lib/puppet/type/pfilebucket.rb +68 -63
- data/lib/puppet/type/schedule.rb +341 -0
- data/lib/puppet/type/service.rb +351 -255
- data/lib/puppet/type/service/base.rb +9 -14
- data/lib/puppet/type/service/debian.rb +32 -38
- data/lib/puppet/type/service/init.rb +130 -130
- data/lib/puppet/type/service/smf.rb +48 -20
- data/lib/puppet/type/state.rb +229 -16
- data/lib/puppet/type/symlink.rb +51 -63
- data/lib/puppet/type/tidy.rb +105 -102
- data/lib/puppet/type/user.rb +118 -180
- data/lib/puppet/util.rb +100 -6
- data/test/certmgr/certmgr.rb +0 -1
- data/test/client/client.rb +4 -4
- data/test/executables/puppetbin.rb +7 -14
- data/test/executables/puppetca.rb +18 -24
- data/test/executables/puppetd.rb +7 -16
- data/test/executables/puppetmasterd.rb +7 -9
- data/test/executables/puppetmodule.rb +11 -16
- data/test/language/ast.rb +11 -7
- data/test/language/interpreter.rb +1 -1
- data/test/language/scope.rb +2 -0
- data/test/language/snippets.rb +30 -5
- data/test/language/transportable.rb +77 -0
- data/test/other/config.rb +316 -0
- data/test/other/events.rb +22 -21
- data/test/other/log.rb +14 -14
- data/test/other/metrics.rb +4 -8
- data/test/other/overrides.rb +5 -5
- data/test/other/relationships.rb +4 -2
- data/test/other/storage.rb +64 -3
- data/test/other/transactions.rb +20 -20
- data/test/parser/parser.rb +7 -4
- data/test/puppet/conffiles.rb +12 -12
- data/test/puppet/defaults.rb +13 -11
- data/test/puppet/utiltest.rb +14 -11
- data/test/puppettest.rb +156 -48
- data/test/server/bucket.rb +2 -2
- data/test/server/fileserver.rb +6 -6
- data/test/server/logger.rb +19 -11
- data/test/server/master.rb +33 -4
- data/test/server/server.rb +2 -7
- data/test/types/basic.rb +5 -7
- data/test/types/component.rb +22 -18
- data/test/types/cron.rb +111 -44
- data/test/types/exec.rb +116 -59
- data/test/types/file.rb +262 -137
- data/test/types/filebucket.rb +13 -15
- data/test/types/fileignoresource.rb +12 -16
- data/test/types/filesources.rb +73 -48
- data/test/types/filetype.rb +13 -15
- data/test/types/group.rb +15 -13
- data/test/types/host.rb +146 -0
- data/test/types/package.rb +74 -63
- data/test/types/port.rb +139 -0
- data/test/types/query.rb +8 -8
- data/test/types/schedule.rb +335 -0
- data/test/types/service.rb +137 -21
- data/test/types/sshkey.rb +140 -0
- data/test/types/symlink.rb +3 -5
- data/test/types/tidy.rb +5 -14
- data/test/types/type.rb +67 -11
- data/test/types/user.rb +25 -23
- metadata +186 -122
- data/lib/puppet/type/pfile/create.rb +0 -108
- data/lib/puppet/type/pprocess.rb +0 -97
- data/lib/puppet/type/typegen.rb +0 -149
- data/lib/puppet/type/typegen/filerecord.rb +0 -243
- data/lib/puppet/type/typegen/filetype.rb +0 -316
- data/test/other/state.rb +0 -106
data/test/language/ast.rb
CHANGED
@@ -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][
|
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][
|
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][
|
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
|
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[
|
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[
|
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[
|
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\":
|
25
|
+
f.puts "node %s { file { \"%s\": ensure => file, mode => 755 } }\n" %
|
26
26
|
[node, createdfile]
|
27
27
|
}
|
28
28
|
|
data/test/language/scope.rb
CHANGED
data/test/language/snippets.rb
CHANGED
@@ -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
|
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
|
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 $
|