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/types/filebucket.rb
CHANGED
@@ -9,7 +9,7 @@ require 'test/unit'
|
|
9
9
|
require 'fileutils'
|
10
10
|
require 'puppettest'
|
11
11
|
|
12
|
-
# $Id: filebucket.rb
|
12
|
+
# $Id: filebucket.rb 1012 2006-03-12 02:56:23Z luke $
|
13
13
|
|
14
14
|
class TestFileBucket < Test::Unit::TestCase
|
15
15
|
include FileTesting
|
@@ -119,12 +119,12 @@ class TestFileBucket < Test::Unit::TestCase
|
|
119
119
|
|
120
120
|
file = mktestfile()
|
121
121
|
assert_nothing_raised {
|
122
|
-
file[:backup] =
|
122
|
+
file[:backup] = name
|
123
123
|
}
|
124
124
|
|
125
125
|
opath = tempfile()
|
126
126
|
@@tmpfiles << opath
|
127
|
-
|
127
|
+
File.open(opath, "w") { |f| f.puts "yaytest" }
|
128
128
|
|
129
129
|
origmd5 = File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
|
130
130
|
|
@@ -133,16 +133,7 @@ class TestFileBucket < Test::Unit::TestCase
|
|
133
133
|
# file[:backup] = true
|
134
134
|
#}
|
135
135
|
|
136
|
-
|
137
|
-
|
138
|
-
trans = nil
|
139
|
-
assert_nothing_raised {
|
140
|
-
trans = comp.evaluate
|
141
|
-
}
|
142
|
-
events = nil
|
143
|
-
assert_nothing_raised {
|
144
|
-
events = trans.evaluate.collect { |e| e.event }
|
145
|
-
}
|
136
|
+
assert_apply(file)
|
146
137
|
|
147
138
|
# so, we've now replaced the file with the opath file
|
148
139
|
assert_equal(
|
@@ -159,7 +150,5 @@ class TestFileBucket < Test::Unit::TestCase
|
|
159
150
|
origmd5,
|
160
151
|
File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
|
161
152
|
)
|
162
|
-
|
163
|
-
|
164
153
|
end
|
165
154
|
end
|
data/test/types/filesources.rb
CHANGED
@@ -82,16 +82,8 @@ class TestFileSources < Test::Unit::TestCase
|
|
82
82
|
:source => frompath
|
83
83
|
)
|
84
84
|
}
|
85
|
-
|
86
|
-
|
87
|
-
)
|
88
|
-
comp.push tofile
|
89
|
-
assert_nothing_raised {
|
90
|
-
trans = comp.evaluate
|
91
|
-
}
|
92
|
-
assert_nothing_raised {
|
93
|
-
trans.evaluate
|
94
|
-
}
|
85
|
+
|
86
|
+
assert_apply(tofile)
|
95
87
|
|
96
88
|
assert(FileTest.exists?(topath))
|
97
89
|
from = File.open(frompath) { |o| o.read }
|
@@ -333,19 +325,19 @@ class TestFileSources < Test::Unit::TestCase
|
|
333
325
|
list = nil
|
334
326
|
rpath = "/root%s" % tmpfile
|
335
327
|
assert_nothing_raised {
|
336
|
-
list = client.call("fileserver.list", rpath, false, false)
|
328
|
+
list = client.call("fileserver.list", rpath, :skip, false, false)
|
337
329
|
}
|
338
330
|
|
339
331
|
assert_equal("/\tfile", list)
|
340
332
|
|
341
333
|
assert_nothing_raised {
|
342
|
-
list = client.call("fileserver.describe", rpath)
|
334
|
+
list = client.call("fileserver.describe", rpath, :skip)
|
343
335
|
}
|
344
336
|
|
345
337
|
assert_match(/^\d+\tfile\t\d+\t\d+\t.+$/, list)
|
346
338
|
|
347
339
|
assert_nothing_raised {
|
348
|
-
list = client.call("fileserver.retrieve", rpath)
|
340
|
+
list = client.call("fileserver.retrieve", rpath, :skip)
|
349
341
|
}
|
350
342
|
|
351
343
|
contents = File.read(tmpfile)
|
@@ -607,6 +599,43 @@ class TestFileSources < Test::Unit::TestCase
|
|
607
599
|
assert_events([], file)
|
608
600
|
assert_events([], file)
|
609
601
|
end
|
602
|
+
|
603
|
+
def test_sourcewithlinks
|
604
|
+
source = tempfile()
|
605
|
+
link = tempfile()
|
606
|
+
dest = tempfile()
|
607
|
+
|
608
|
+
File.open(source, "w") { |f| f.puts "yay" }
|
609
|
+
File.symlink(source, link)
|
610
|
+
|
611
|
+
file = nil
|
612
|
+
assert_nothing_raised {
|
613
|
+
file = Puppet.type(:file).create(
|
614
|
+
:name => dest,
|
615
|
+
:source => link
|
616
|
+
)
|
617
|
+
}
|
618
|
+
|
619
|
+
# Default to skipping links
|
620
|
+
assert_events([], file)
|
621
|
+
assert(! FileTest.exists?(dest), "Created link")
|
622
|
+
|
623
|
+
# Now follow the links
|
624
|
+
file[:links] = :follow
|
625
|
+
assert_events([:file_created], file)
|
626
|
+
assert(FileTest.file?(dest), "Destination is not a file")
|
627
|
+
|
628
|
+
# Now copy the links
|
629
|
+
assert_raise(Puppet::FileServerError) {
|
630
|
+
file[:links] = :manage
|
631
|
+
comp = newcomp(file)
|
632
|
+
trans = comp.evaluate
|
633
|
+
trans.evaluate
|
634
|
+
}
|
635
|
+
#assert(FileTest.symlink?(dest), "Destination is not a symlink")
|
636
|
+
#assert_equal(File.readlink(link), File.readlink(dest),
|
637
|
+
# "Link did not copy correctly")
|
638
|
+
end
|
610
639
|
end
|
611
640
|
|
612
|
-
# $Id: filesources.rb
|
641
|
+
# $Id: filesources.rb 984 2006-03-06 18:07:41Z luke $
|
data/test/types/group.rb
CHANGED
@@ -4,7 +4,7 @@ if __FILE__ == $0
|
|
4
4
|
$puppetbase = "../../../../language/trunk"
|
5
5
|
end
|
6
6
|
|
7
|
-
# $Id: group.rb
|
7
|
+
# $Id: group.rb 1113 2006-04-17 16:15:33Z luke $
|
8
8
|
|
9
9
|
require 'etc'
|
10
10
|
require 'puppet/type'
|
@@ -234,18 +234,6 @@ class TestGroup < Test::Unit::TestCase
|
|
234
234
|
assert_equal(Process.gid, user.is(:gid), "Retrieved UID does not match")
|
235
235
|
end
|
236
236
|
|
237
|
-
def test_ensurevals
|
238
|
-
gobj = nil
|
239
|
-
assert_nothing_raised {
|
240
|
-
gobj = Puppet.type(:group).create(
|
241
|
-
:name => name,
|
242
|
-
:ensure => :exists
|
243
|
-
)
|
244
|
-
}
|
245
|
-
|
246
|
-
assert_equal(false, gobj.state(:ensure))
|
247
|
-
end
|
248
|
-
|
249
237
|
if Process.uid == 0
|
250
238
|
def test_mkgroup
|
251
239
|
gobj = nil
|
data/test/types/mount.rb
ADDED
@@ -0,0 +1,277 @@
|
|
1
|
+
# Test host job creation, modification, and destruction
|
2
|
+
|
3
|
+
if __FILE__ == $0
|
4
|
+
$:.unshift '..'
|
5
|
+
$:.unshift '../../lib'
|
6
|
+
$puppetbase = "../.."
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'puppettest'
|
10
|
+
require 'puppet'
|
11
|
+
require 'puppet/type/parsedtype/mount'
|
12
|
+
require 'test/unit'
|
13
|
+
require 'facter'
|
14
|
+
|
15
|
+
class TestMounts < Test::Unit::TestCase
|
16
|
+
include TestPuppet
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
@mounttype = Puppet.type(:mount)
|
20
|
+
@oldfiletype = @mounttype.filetype
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
@mounttype.filetype = @oldfiletype
|
25
|
+
Puppet.type(:file).clear
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
# Here we just create a fake host type that answers to all of the methods
|
30
|
+
# but does not modify our actual system.
|
31
|
+
def mkfaketype
|
32
|
+
pfile = tempfile()
|
33
|
+
old = @mounttype.filetype
|
34
|
+
@mounttype.filetype = Puppet::FileType.filetype(:ram)
|
35
|
+
|
36
|
+
cleanup do
|
37
|
+
@mounttype.filetype = old
|
38
|
+
@mounttype.fileobj = nil
|
39
|
+
end
|
40
|
+
|
41
|
+
# Reset this, just in case
|
42
|
+
@mounttype.fileobj = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def mkmount
|
46
|
+
mount = nil
|
47
|
+
|
48
|
+
if defined? @pcount
|
49
|
+
@pcount += 1
|
50
|
+
else
|
51
|
+
@pcount = 1
|
52
|
+
end
|
53
|
+
args = {
|
54
|
+
:path => "/fspuppet%s" % @pcount,
|
55
|
+
:device => "/dev/dsk%s" % @pcount,
|
56
|
+
}
|
57
|
+
|
58
|
+
Puppet.type(:mount).fields.each do |field|
|
59
|
+
unless args.include? field
|
60
|
+
args[field] = "fake%s" % @pcount
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
assert_nothing_raised {
|
65
|
+
mount = Puppet.type(:mount).create(args)
|
66
|
+
}
|
67
|
+
|
68
|
+
return mount
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_simplemount
|
72
|
+
mkfaketype
|
73
|
+
host = nil
|
74
|
+
assert_nothing_raised {
|
75
|
+
assert_nil(Puppet.type(:mount).retrieve)
|
76
|
+
}
|
77
|
+
|
78
|
+
mount = mkmount
|
79
|
+
|
80
|
+
assert_nothing_raised {
|
81
|
+
Puppet.type(:mount).store
|
82
|
+
}
|
83
|
+
|
84
|
+
assert_nothing_raised {
|
85
|
+
assert(
|
86
|
+
Puppet.type(:mount).to_file.include?(
|
87
|
+
Puppet.type(:mount).fileobj.read
|
88
|
+
),
|
89
|
+
"File does not include all of our objects"
|
90
|
+
)
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
unless Facter["operatingsystem"].value == "Darwin"
|
95
|
+
def test_mountsparse
|
96
|
+
assert_nothing_raised {
|
97
|
+
@mounttype.retrieve
|
98
|
+
}
|
99
|
+
|
100
|
+
# Now just make we've got some mounts we know will be there
|
101
|
+
root = @mounttype["/"]
|
102
|
+
assert(root, "Could not retrieve root mount")
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_rootfs
|
106
|
+
fs = nil
|
107
|
+
assert_nothing_raised {
|
108
|
+
Puppet.type(:mount).retrieve
|
109
|
+
}
|
110
|
+
|
111
|
+
assert_nothing_raised {
|
112
|
+
fs = Puppet.type(:mount)["/"]
|
113
|
+
}
|
114
|
+
assert(fs, "Could not retrieve root fs")
|
115
|
+
|
116
|
+
assert_nothing_raised {
|
117
|
+
assert(fs.mounted?, "Root is considered not mounted")
|
118
|
+
}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Make sure it reads and writes correctly.
|
123
|
+
def test_readwrite
|
124
|
+
assert_nothing_raised {
|
125
|
+
Puppet::Type.type(:mount).retrieve
|
126
|
+
}
|
127
|
+
|
128
|
+
oldtype = Puppet::Type.type(:mount).filetype
|
129
|
+
|
130
|
+
# Now switch to storing in ram
|
131
|
+
mkfaketype
|
132
|
+
|
133
|
+
fs = mkmount
|
134
|
+
|
135
|
+
assert(Puppet::Type.type(:mount).filetype != oldtype)
|
136
|
+
|
137
|
+
assert_events([:mount_created], fs)
|
138
|
+
|
139
|
+
text = Puppet::Type.type(:mount).fileobj.read
|
140
|
+
|
141
|
+
assert(text =~ /#{fs[:path]}/, "Text did not include new fs")
|
142
|
+
|
143
|
+
fs[:ensure] = :absent
|
144
|
+
|
145
|
+
assert_events([:mount_removed], fs)
|
146
|
+
text = Puppet::Type.type(:mount).fileobj.read
|
147
|
+
|
148
|
+
assert(text !~ /#{fs[:path]}/, "Text still includes new fs")
|
149
|
+
|
150
|
+
fs[:ensure] = :present
|
151
|
+
|
152
|
+
assert_events([:mount_created], fs)
|
153
|
+
|
154
|
+
text = Puppet::Type.type(:mount).fileobj.read
|
155
|
+
|
156
|
+
assert(text =~ /#{fs[:path]}/, "Text did not include new fs")
|
157
|
+
|
158
|
+
fs[:options] = "rw,noauto"
|
159
|
+
|
160
|
+
assert_events([:mount_changed], fs)
|
161
|
+
end
|
162
|
+
|
163
|
+
if Process.uid == 0
|
164
|
+
def test_mountfs
|
165
|
+
fs = nil
|
166
|
+
case Facter["hostname"].value
|
167
|
+
when "culain": fs = "/ubuntu"
|
168
|
+
when "atalanta": fs = "/mnt"
|
169
|
+
when "figurehead": fs = "/cg4/net/depts"
|
170
|
+
else
|
171
|
+
$stderr.puts "No mount for mount testing; skipping"
|
172
|
+
return
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_nothing_raised {
|
176
|
+
Puppet.type(:mount).retrieve
|
177
|
+
}
|
178
|
+
|
179
|
+
oldtext = Puppet::Type.type(:mount).fileobj.read
|
180
|
+
|
181
|
+
ftype = Puppet::Type.type(:mount).filetype
|
182
|
+
|
183
|
+
# Make sure the original gets reinstalled.
|
184
|
+
if ftype == Puppet::FileType.filetype(:netinfo)
|
185
|
+
cleanup do
|
186
|
+
IO.popen("niload -r /mounts .", "w") do |file|
|
187
|
+
file.puts oldtext
|
188
|
+
end
|
189
|
+
end
|
190
|
+
else
|
191
|
+
cleanup do
|
192
|
+
Puppet::Type.type(:mount).fileobj.write(oldtext)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
obj = Puppet.type(:mount)[fs]
|
197
|
+
|
198
|
+
assert(obj, "Could not retrieve %s object" % fs)
|
199
|
+
|
200
|
+
current = nil
|
201
|
+
|
202
|
+
assert_nothing_raised {
|
203
|
+
current = obj.mounted?
|
204
|
+
}
|
205
|
+
|
206
|
+
if current
|
207
|
+
# Make sure the original gets reinstalled.
|
208
|
+
cleanup do
|
209
|
+
unless obj.mounted?
|
210
|
+
obj.mount
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
unless current
|
216
|
+
assert_nothing_raised {
|
217
|
+
obj.mount
|
218
|
+
}
|
219
|
+
end
|
220
|
+
|
221
|
+
# Now copy all of the states' "is" values to the "should" values
|
222
|
+
obj.each do |state|
|
223
|
+
state.should = state.is
|
224
|
+
end
|
225
|
+
|
226
|
+
# Verify we can remove the mount
|
227
|
+
assert_nothing_raised {
|
228
|
+
obj[:ensure] = :absent
|
229
|
+
}
|
230
|
+
|
231
|
+
assert_events([:mount_removed], obj)
|
232
|
+
assert_events([], obj)
|
233
|
+
|
234
|
+
# And verify it's gone
|
235
|
+
assert(!obj.mounted?, "Object is mounted after being removed")
|
236
|
+
|
237
|
+
text = Puppet.type(:mount).fileobj.read
|
238
|
+
|
239
|
+
assert(text !~ /#{fs}/,
|
240
|
+
"Fstab still contains %s" % fs)
|
241
|
+
|
242
|
+
assert_nothing_raised {
|
243
|
+
obj[:ensure] = :present
|
244
|
+
}
|
245
|
+
|
246
|
+
assert_events([:mount_created], obj)
|
247
|
+
assert_events([], obj)
|
248
|
+
|
249
|
+
text = Puppet::Type.type(:mount).fileobj.read
|
250
|
+
assert(text =~ /#{fs}/, "Fstab does not contain %s" % fs)
|
251
|
+
|
252
|
+
assert(! obj.mounted?, "Object is mounted incorrectly")
|
253
|
+
|
254
|
+
assert_nothing_raised {
|
255
|
+
obj[:ensure] = :mounted
|
256
|
+
}
|
257
|
+
|
258
|
+
assert_events([:mount_mounted], obj)
|
259
|
+
assert_events([], obj)
|
260
|
+
|
261
|
+
text = Puppet::Type.type(:mount).fileobj.read
|
262
|
+
assert(text =~ /#{fs}/,
|
263
|
+
"Fstab does not contain %s" % fs)
|
264
|
+
|
265
|
+
obj.retrieve
|
266
|
+
assert(obj.mounted?, "Object is not mounted")
|
267
|
+
|
268
|
+
unless current
|
269
|
+
assert_nothing_raised {
|
270
|
+
obj.unmount
|
271
|
+
}
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
# $Id: mount.rb 1093 2006-04-06 06:43:43Z luke $
|
data/test/types/package.rb
CHANGED
@@ -43,7 +43,9 @@ class TestPackages < Test::Unit::TestCase
|
|
43
43
|
pkgs = %w{SMCossh}
|
44
44
|
when "Debian": pkgs = %w{ssh openssl}
|
45
45
|
when "Fedora": pkgs = %w{openssh}
|
46
|
-
when "OpenBSD": pkgs = %{vim}
|
46
|
+
when "OpenBSD": pkgs = %w{vim}
|
47
|
+
when "FreeBSD": pkgs = %w{sudo}
|
48
|
+
when "Darwin": pkgs = %w{gettext}
|
47
49
|
else
|
48
50
|
Puppet.notice "No test package for %s" % $platform
|
49
51
|
return []
|
@@ -52,22 +54,29 @@ class TestPackages < Test::Unit::TestCase
|
|
52
54
|
return pkgs
|
53
55
|
end
|
54
56
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
57
|
+
def modpkg(pkg)
|
58
|
+
case $platform
|
59
|
+
when "Solaris":
|
60
|
+
pkg[:adminfile] = "/usr/local/pkg/admin_file"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def mkpkgs(list = nil)
|
65
|
+
list ||= tstpkgs()
|
66
|
+
list.each { |pkg, source|
|
67
|
+
hash = {:name => pkg, :ensure => "latest"}
|
68
|
+
if source
|
69
|
+
source = source[0] if source.is_a? Array
|
70
|
+
hash[:source] = source
|
71
|
+
end
|
72
|
+
if Facter["operatingsystem"].value == "Darwin"
|
73
|
+
hash[:type] = "darwinport"
|
70
74
|
end
|
75
|
+
obj = Puppet.type(:package).create(hash)
|
76
|
+
assert(pkg, "Could not create package")
|
77
|
+
modpkg(obj)
|
78
|
+
|
79
|
+
yield obj
|
71
80
|
}
|
72
81
|
end
|
73
82
|
|
@@ -77,18 +86,32 @@ class TestPackages < Test::Unit::TestCase
|
|
77
86
|
when "Solaris":
|
78
87
|
arch = Facter["hardwareisa"].value + Facter["operatingsystemrelease"].value
|
79
88
|
case arch
|
89
|
+
when "i3865.10":
|
90
|
+
retval = {"SMCrdesk" => [
|
91
|
+
"/usr/local/pkg/rdesktop-1.3.1-sol10-intel-local",
|
92
|
+
"/usr/local/pkg/rdesktop-1.4.1-sol10-x86-local"
|
93
|
+
]}
|
80
94
|
when "sparc5.8":
|
81
|
-
retval =
|
95
|
+
retval = {"SMCarc" => "/usr/local/pkg/arc-5.21e-sol8-sparc-local"}
|
82
96
|
when "i3865.8":
|
83
|
-
retval =
|
97
|
+
retval = {"SMCarc" => "/usr/local/pkg/arc-5.21e-sol8-intel-local"}
|
84
98
|
end
|
85
99
|
when "OpenBSD":
|
86
|
-
retval =
|
100
|
+
retval = {"aalib" => "ftp://ftp.usa.openbsd.org/pub/OpenBSD/3.8/packages/i386/aalib-1.2-no_x11.tgz"}
|
87
101
|
when "Debian":
|
88
|
-
retval =
|
102
|
+
retval = {"zec" => nil}
|
89
103
|
#when "RedHat": type = :rpm
|
90
104
|
when "Fedora":
|
91
|
-
retval =
|
105
|
+
retval = {"wv" => nil}
|
106
|
+
when "CentOS":
|
107
|
+
retval = {"enhost" => [
|
108
|
+
"/home/luke/rpm/RPMS/noarch/enhost-1.0.1-1.noarch.rpm",
|
109
|
+
"/home/luke/rpm/RPMS/noarch/enhost-1.0.2-1.noarch.rpm"
|
110
|
+
]}
|
111
|
+
when "Darwin":
|
112
|
+
retval = {"aop" => nil}
|
113
|
+
when "FreeBSD":
|
114
|
+
retval = {"yahtzee" => nil}
|
92
115
|
else
|
93
116
|
Puppet.notice "No test packages for %s" % $platform
|
94
117
|
end
|
@@ -110,13 +133,7 @@ class TestPackages < Test::Unit::TestCase
|
|
110
133
|
end
|
111
134
|
|
112
135
|
def test_retrievepkg
|
113
|
-
installedpkgs()
|
114
|
-
obj = nil
|
115
|
-
assert_nothing_raised {
|
116
|
-
obj = Puppet.type(:package).create(
|
117
|
-
:name => pkg
|
118
|
-
)
|
119
|
-
}
|
136
|
+
mkpkgs(installedpkgs()) { |obj|
|
120
137
|
|
121
138
|
assert(obj, "could not create package")
|
122
139
|
|
@@ -124,6 +141,7 @@ class TestPackages < Test::Unit::TestCase
|
|
124
141
|
obj.retrieve
|
125
142
|
}
|
126
143
|
|
144
|
+
# Version is a parameter, not a state.
|
127
145
|
assert(obj[:version], "Could not retrieve package version")
|
128
146
|
}
|
129
147
|
end
|
@@ -136,6 +154,8 @@ class TestPackages < Test::Unit::TestCase
|
|
136
154
|
)
|
137
155
|
}
|
138
156
|
|
157
|
+
assert(obj, "Failed to create fake package")
|
158
|
+
|
139
159
|
assert_nothing_raised {
|
140
160
|
obj.retrieve
|
141
161
|
}
|
@@ -145,22 +165,38 @@ class TestPackages < Test::Unit::TestCase
|
|
145
165
|
end
|
146
166
|
|
147
167
|
def test_specifypkgtype
|
168
|
+
pkg = nil
|
148
169
|
assert_nothing_raised {
|
149
170
|
pkg = Puppet.type(:package).create(
|
150
171
|
:name => "mypkg",
|
151
172
|
:type => "yum"
|
152
173
|
)
|
153
174
|
}
|
175
|
+
assert(pkg, "Did not create package")
|
176
|
+
assert_equal(:yum, pkg[:type])
|
154
177
|
end
|
155
178
|
|
156
179
|
def test_latestpkg
|
157
|
-
|
180
|
+
mkpkgs { |pkg|
|
181
|
+
next unless pkg.respond_to? :latest
|
158
182
|
assert_nothing_raised {
|
159
183
|
assert(pkg.latest, "Package did not return value for 'latest'")
|
160
184
|
}
|
161
185
|
}
|
162
186
|
end
|
163
187
|
|
188
|
+
# Make sure our package type supports listing.
|
189
|
+
def test_listing
|
190
|
+
pkgtype = Puppet::Type.type(:package)
|
191
|
+
|
192
|
+
# Heh
|
193
|
+
defaulttype = pkgtype.pkgtype(pkgtype.default)
|
194
|
+
|
195
|
+
assert_nothing_raised("Could not list packages") do
|
196
|
+
defaulttype.list
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
164
200
|
unless Process.uid == 0
|
165
201
|
$stderr.puts "Run as root to perform package installation tests"
|
166
202
|
else
|
@@ -181,12 +217,15 @@ class TestPackages < Test::Unit::TestCase
|
|
181
217
|
|
182
218
|
assert_events([:package_created], comp, "package")
|
183
219
|
|
220
|
+
pkg.retrieve
|
221
|
+
|
222
|
+
assert(pkg.insync?, "Package is not in sync")
|
223
|
+
|
184
224
|
# then uninstall it
|
185
225
|
assert_nothing_raised {
|
186
226
|
pkg[:ensure] = "absent"
|
187
227
|
}
|
188
228
|
|
189
|
-
|
190
229
|
pkg.retrieve
|
191
230
|
|
192
231
|
assert(! pkg.insync?, "Package is in sync")
|
@@ -194,8 +233,6 @@ class TestPackages < Test::Unit::TestCase
|
|
194
233
|
assert_events([:package_removed], comp, "package")
|
195
234
|
|
196
235
|
# and now set install to 'latest' and verify it installs
|
197
|
-
# FIXME this isn't really a very good test -- we should install
|
198
|
-
# a low version, and then upgrade using this. But, eh.
|
199
236
|
if pkg.respond_to?(:latest)
|
200
237
|
assert_nothing_raised {
|
201
238
|
pkg[:ensure] = "latest"
|
@@ -218,8 +255,102 @@ class TestPackages < Test::Unit::TestCase
|
|
218
255
|
end
|
219
256
|
}
|
220
257
|
end
|
258
|
+
|
259
|
+
def test_upgradepkg
|
260
|
+
tstpkgs.each do |name, sources|
|
261
|
+
unless sources and sources.is_a? Array
|
262
|
+
$stderr.puts "Skipping pkg upgrade test for %s" % name
|
263
|
+
next
|
264
|
+
end
|
265
|
+
first, second = sources
|
266
|
+
|
267
|
+
unless FileTest.exists?(first) and FileTest.exists?(second)
|
268
|
+
$stderr.puts "Could not find upgrade test pkgs; skipping"
|
269
|
+
return
|
270
|
+
end
|
271
|
+
|
272
|
+
pkg = nil
|
273
|
+
assert_nothing_raised {
|
274
|
+
pkg = Puppet.type(:package).create(
|
275
|
+
:name => name,
|
276
|
+
:ensure => :latest,
|
277
|
+
:source => first
|
278
|
+
)
|
279
|
+
}
|
280
|
+
|
281
|
+
assert(pkg, "Failed to create package %s" % name)
|
282
|
+
|
283
|
+
modpkg(pkg)
|
284
|
+
|
285
|
+
assert(pkg.latest, "Could not retrieve latest value")
|
286
|
+
|
287
|
+
assert_events([:package_created], pkg)
|
288
|
+
|
289
|
+
assert_nothing_raised {
|
290
|
+
pkg.retrieve
|
291
|
+
}
|
292
|
+
assert(pkg.insync?, "Package is not in sync")
|
293
|
+
pkg.clear
|
294
|
+
assert_nothing_raised {
|
295
|
+
pkg[:source] = second
|
296
|
+
}
|
297
|
+
assert_events([:package_changed], pkg)
|
298
|
+
|
299
|
+
assert_nothing_raised {
|
300
|
+
pkg.retrieve
|
301
|
+
}
|
302
|
+
assert(pkg.insync?, "Package is not in sync")
|
303
|
+
assert_nothing_raised {
|
304
|
+
pkg[:ensure] = :absent
|
305
|
+
}
|
306
|
+
assert_events([:package_removed], pkg)
|
307
|
+
|
308
|
+
assert_nothing_raised {
|
309
|
+
pkg.retrieve
|
310
|
+
}
|
311
|
+
assert(pkg.insync?, "Package is not in sync")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
# Stupid darwin, not supporting package uninstallation
|
316
|
+
if Facter["operatingsystem"].value == "Darwin" and
|
317
|
+
FileTest.exists? "/Users/luke/Documents/Puppet/pkgtesting.pkg"
|
318
|
+
def test_darwinpkgs
|
319
|
+
pkg = nil
|
320
|
+
assert_nothing_raised {
|
321
|
+
pkg = Puppet::Type.type(:package).create(
|
322
|
+
:name => "pkgtesting",
|
323
|
+
:source => "/Users/luke/Documents/Puppet/pkgtesting.pkg",
|
324
|
+
:ensure => :present
|
325
|
+
)
|
326
|
+
}
|
327
|
+
|
328
|
+
assert_nothing_raised {
|
329
|
+
pkg.retrieve
|
330
|
+
}
|
331
|
+
|
332
|
+
if pkg.insync?
|
333
|
+
Puppet.notice "Test package is already installed; please remove it"
|
334
|
+
next
|
335
|
+
end
|
336
|
+
|
337
|
+
# The file installed, and the receipt
|
338
|
+
@@tmpfiles << "/tmp/file"
|
339
|
+
@@tmpfiles << "/Library/Receipts/pkgtesting.pkg"
|
340
|
+
|
341
|
+
assert_events([:package_created], pkg, "package")
|
342
|
+
|
343
|
+
assert_nothing_raised {
|
344
|
+
pkg.retrieve
|
345
|
+
}
|
346
|
+
|
347
|
+
assert(pkg.insync?, "Package is not insync")
|
348
|
+
|
349
|
+
assert(FileTest.exists?("/tmp/pkgtesting/file"), "File did not get created")
|
350
|
+
end
|
351
|
+
end
|
221
352
|
end
|
222
353
|
end
|
223
354
|
end
|
224
355
|
|
225
|
-
# $Id: package.rb
|
356
|
+
# $Id: package.rb 1128 2006-04-21 03:06:54Z luke $
|