puppet 0.22.4 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +156 -0
- data/README +2 -2
- data/Rakefile +6 -6
- data/bin/filebucket +212 -0
- data/bin/puppet +2 -0
- data/bin/puppetca +2 -4
- data/bin/puppetd +16 -15
- data/bin/puppetdoc +46 -496
- data/bin/puppetmasterd +3 -5
- data/bin/puppetrun +8 -3
- data/bin/ralsh +271 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +13 -2
- data/conf/solaris/pkginfo +1 -1
- data/ext/puppet-test +374 -0
- data/install.rb +40 -31
- data/lib/puppet.rb +39 -4
- data/lib/puppet/config_stores/rest.rb +60 -0
- data/lib/puppet/configuration.rb +312 -17
- data/lib/puppet/external/event-loop/event-loop.rb +4 -0
- data/lib/puppet/external/gratr/rdot.rb +1 -1
- data/lib/puppet/fact_stores/yaml.rb +42 -0
- data/lib/puppet/feature/base.rb +4 -1
- data/lib/puppet/metatype/attributes.rb +20 -43
- data/lib/puppet/metatype/container.rb +1 -36
- data/lib/puppet/metatype/evaluation.rb +48 -19
- data/lib/puppet/metatype/instances.rb +35 -1
- data/lib/puppet/metatype/metaparams.rb +23 -19
- data/lib/puppet/metatype/providers.rb +25 -38
- data/lib/puppet/network/client/ca.rb +8 -5
- data/lib/puppet/network/client/master.rb +59 -17
- data/lib/puppet/network/handler.rb +18 -1
- data/lib/puppet/network/handler/ca.rb +9 -3
- data/lib/puppet/network/handler/facts.rb +70 -0
- data/lib/puppet/network/handler/filebucket.rb +4 -1
- data/lib/puppet/network/handler/fileserver.rb +65 -21
- data/lib/puppet/network/handler/master.rb +6 -3
- data/lib/puppet/network/handler/report.rb +12 -26
- data/lib/puppet/network/handler/resource.rb +14 -2
- data/lib/puppet/network/handler/runner.rb +5 -1
- data/lib/puppet/network/handler/status.rb +5 -1
- data/lib/puppet/network/server/mongrel.rb +4 -4
- data/lib/puppet/network/server/webrick.rb +14 -3
- data/lib/puppet/parameter.rb +30 -25
- data/lib/puppet/parser/ast.rb +1 -6
- data/lib/puppet/parser/ast/component.rb +23 -20
- data/lib/puppet/parser/ast/hostclass.rb +7 -11
- data/lib/puppet/parser/ast/leaf.rb +4 -1
- data/lib/puppet/parser/ast/node.rb +6 -8
- data/lib/puppet/parser/functions.rb +7 -4
- data/lib/puppet/parser/interpreter.rb +155 -205
- data/lib/puppet/parser/lexer.rb +35 -2
- data/lib/puppet/parser/parser.rb +705 -612
- data/lib/puppet/parser/resource.rb +91 -48
- data/lib/puppet/parser/resource/param.rb +52 -29
- data/lib/puppet/parser/scope.rb +28 -23
- data/lib/puppet/pgraph.rb +26 -21
- data/lib/puppet/propertychange.rb +12 -12
- data/lib/puppet/provider.rb +102 -31
- data/lib/puppet/provider/cron/crontab.rb +7 -8
- data/lib/puppet/provider/group/groupadd.rb +4 -4
- data/lib/puppet/provider/group/pw.rb +3 -3
- data/lib/puppet/provider/mount.rb +8 -8
- data/lib/puppet/provider/mount/netinfo.rb +5 -5
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/nameservice.rb +19 -31
- data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
- data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
- data/lib/puppet/provider/nameservice/pw.rb +4 -4
- data/lib/puppet/provider/package.rb +31 -0
- data/lib/puppet/provider/package/appdmg.rb +118 -0
- data/lib/puppet/provider/package/apple.rb +18 -16
- data/lib/puppet/provider/package/apt.rb +13 -15
- data/lib/puppet/provider/package/aptitude.rb +5 -3
- data/lib/puppet/provider/package/aptrpm.rb +9 -11
- data/lib/puppet/provider/package/blastwave.rb +9 -9
- data/lib/puppet/provider/package/darwinport.rb +12 -11
- data/lib/puppet/provider/package/dpkg.rb +20 -12
- data/lib/puppet/provider/package/fink.rb +87 -0
- data/lib/puppet/provider/package/freebsd.rb +10 -11
- data/lib/puppet/provider/package/gem.rb +15 -15
- data/lib/puppet/provider/package/openbsd.rb +12 -17
- data/lib/puppet/provider/package/pkgdmg.rb +90 -16
- data/lib/puppet/provider/package/portage.rb +20 -14
- data/lib/puppet/provider/package/ports.rb +15 -13
- data/lib/puppet/provider/package/rpm.rb +20 -23
- data/lib/puppet/provider/package/rug.rb +6 -8
- data/lib/puppet/provider/package/sun.rb +20 -18
- data/lib/puppet/provider/package/sunfreeware.rb +2 -2
- data/lib/puppet/provider/package/up2date.rb +6 -10
- data/lib/puppet/provider/package/urpmi.rb +51 -0
- data/lib/puppet/provider/package/yum.rb +15 -13
- data/lib/puppet/provider/parsedfile.rb +53 -63
- data/lib/puppet/provider/service/base.rb +13 -15
- data/lib/puppet/provider/service/debian.rb +4 -4
- data/lib/puppet/provider/service/gentoo.rb +4 -4
- data/lib/puppet/provider/service/init.rb +22 -15
- data/lib/puppet/provider/service/redhat.rb +6 -6
- data/lib/puppet/provider/service/smf.rb +6 -6
- data/lib/puppet/provider/user/netinfo.rb +5 -5
- data/lib/puppet/provider/user/pw.rb +10 -5
- data/lib/puppet/provider/user/useradd.rb +9 -14
- data/lib/puppet/provider/zone/solaris.rb +80 -45
- data/lib/puppet/rails.rb +3 -34
- data/lib/puppet/rails/database/schema.rb +45 -24
- data/lib/puppet/rails/fact_value.rb +1 -0
- data/lib/puppet/rails/host.rb +69 -40
- data/lib/puppet/rails/param_name.rb +3 -8
- data/lib/puppet/rails/param_value.rb +2 -1
- data/lib/puppet/rails/puppet_class.rb +0 -2
- data/lib/puppet/rails/puppet_tag.rb +5 -0
- data/lib/puppet/rails/resource.rb +41 -17
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/reference/configuration.rb +149 -0
- data/lib/puppet/reference/function.rb +13 -0
- data/lib/puppet/reference/network.rb +37 -0
- data/lib/puppet/reference/providers.rb +118 -0
- data/lib/puppet/reference/report.rb +21 -0
- data/lib/puppet/reference/type.rb +152 -0
- data/lib/puppet/reports/rrdgraph.rb +21 -7
- data/lib/puppet/reports/tagmail.rb +4 -1
- data/lib/puppet/sslcertificates.rb +1 -49
- data/lib/puppet/sslcertificates/ca.rb +2 -79
- data/lib/puppet/sslcertificates/inventory.rb +0 -10
- data/lib/puppet/transaction.rb +24 -41
- data/lib/puppet/transaction/report.rb +27 -1
- data/lib/puppet/type.rb +7 -43
- data/lib/puppet/type/component.rb +198 -124
- data/lib/puppet/type/cron.rb +51 -42
- data/lib/puppet/type/exec.rb +20 -19
- data/lib/puppet/type/group.rb +6 -55
- data/lib/puppet/type/host.rb +16 -37
- data/lib/puppet/type/mount.rb +30 -17
- data/lib/puppet/type/notify.rb +7 -8
- data/lib/puppet/type/package.rb +44 -80
- data/lib/puppet/type/pfile.rb +50 -41
- data/lib/puppet/type/pfile/checksum.rb +82 -95
- data/lib/puppet/type/pfile/content.rb +21 -25
- data/lib/puppet/type/pfile/ensure.rb +32 -30
- data/lib/puppet/type/pfile/group.rb +21 -26
- data/lib/puppet/type/pfile/mode.rb +25 -32
- data/lib/puppet/type/pfile/owner.rb +23 -27
- data/lib/puppet/type/pfile/source.rb +42 -33
- data/lib/puppet/type/pfile/target.rb +20 -18
- data/lib/puppet/type/pfile/type.rb +6 -7
- data/lib/puppet/type/pfilebucket.rb +3 -3
- data/lib/puppet/type/port.rb +5 -7
- data/lib/puppet/type/property.rb +58 -61
- data/lib/puppet/type/resources.rb +12 -8
- data/lib/puppet/type/schedule.rb +8 -8
- data/lib/puppet/type/service.rb +26 -33
- data/lib/puppet/type/sshkey.rb +6 -7
- data/lib/puppet/type/tidy.rb +41 -35
- data/lib/puppet/type/user.rb +34 -67
- data/lib/puppet/type/yumrepo.rb +27 -12
- data/lib/puppet/type/zone.rb +71 -110
- data/lib/puppet/util.rb +46 -61
- data/lib/puppet/util/autoload.rb +59 -47
- data/lib/puppet/util/config.rb +160 -18
- data/lib/puppet/util/config_store.rb +61 -0
- data/lib/puppet/util/fact_store.rb +60 -0
- data/lib/puppet/util/instance_loader.rb +74 -0
- data/lib/puppet/util/loadedfile.rb +5 -8
- data/lib/puppet/util/metric.rb +17 -25
- data/lib/puppet/util/posix.rb +39 -7
- data/lib/puppet/util/provider_features.rb +9 -1
- data/lib/puppet/util/rails/collection_merger.rb +16 -1
- data/lib/puppet/util/reference.rb +189 -0
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/subclass_loader.rb +9 -2
- data/test/language/ast.rb +4 -148
- data/test/language/ast/component.rb +10 -1
- data/test/language/collector.rb +1 -191
- data/test/language/interpreter.rb +284 -327
- data/test/language/lexer.rb +13 -1
- data/test/language/node.rb +1 -1
- data/test/language/parser.rb +17 -4
- data/test/language/resource.rb +67 -101
- data/test/language/scope.rb +18 -3
- data/test/language/snippets.rb +114 -151
- data/test/lib/puppettest.rb +13 -0
- data/test/lib/puppettest/exetest.rb +7 -0
- data/test/lib/puppettest/fakes.rb +39 -28
- data/test/lib/puppettest/railstesting.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +2 -2
- data/test/lib/puppettest/support/collection.rb +30 -0
- data/test/network/client/ca.rb +27 -1
- data/test/network/client/client.rb +3 -3
- data/test/network/client/master.rb +102 -1
- data/test/network/handler/ca.rb +35 -1
- data/test/network/handler/facts.rb +112 -0
- data/test/network/handler/fileserver.rb +25 -1
- data/test/network/handler/handler.rb +2 -2
- data/test/network/handler/master.rb +2 -49
- data/test/network/handler/resource.rb +5 -6
- data/test/network/server/mongrel_test.rb +65 -0
- data/test/network/server/webrick.rb +2 -2
- data/test/network/xmlrpc/client.rb +2 -1
- data/test/network/xmlrpc/processor.rb +2 -1
- data/test/other/pgraph.rb +6 -5
- data/test/other/propertychange.rb +11 -12
- data/test/other/report.rb +44 -27
- data/test/other/transactions.rb +17 -16
- data/test/puppet/tc_suidmanager.rb +2 -2
- data/test/rails/ast.rb +74 -0
- data/test/rails/collection.rb +214 -0
- data/test/rails/host.rb +49 -24
- data/test/rails/interpreter.rb +91 -0
- data/test/rails/railsparameter.rb +22 -11
- data/test/rails/railsresource.rb +140 -7
- data/test/ral/manager/attributes.rb +37 -13
- data/test/ral/manager/instances.rb +82 -0
- data/test/ral/manager/provider.rb +60 -22
- data/test/ral/manager/type.rb +9 -6
- data/test/ral/providers/cron/crontab.rb +59 -7
- data/test/ral/providers/group.rb +7 -7
- data/test/ral/providers/host/netinfo.rb +5 -6
- data/test/ral/providers/host/parsed.rb +4 -4
- data/test/ral/providers/mount/parsed.rb +11 -6
- data/test/ral/providers/nameservice.rb +2 -2
- data/test/ral/providers/package.rb +39 -14
- data/test/ral/providers/package/apt.rb +72 -3
- data/test/ral/providers/package/aptitude.rb +15 -12
- data/test/ral/providers/package/aptrpm.rb +3 -3
- data/test/ral/providers/package/dpkg.rb +2 -2
- data/test/ral/providers/parsedfile.rb +114 -88
- data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
- data/test/ral/providers/provider.rb +93 -13
- data/test/ral/providers/service.rb +52 -26
- data/test/ral/providers/sshkey/parsed.rb +3 -3
- data/test/ral/providers/user.rb +19 -20
- data/test/ral/providers/user/useradd.rb +1 -5
- data/test/ral/types/cron.rb +49 -36
- data/test/ral/types/file.rb +38 -35
- data/test/ral/types/file/target.rb +4 -4
- data/test/ral/types/filesources.rb +24 -22
- data/test/ral/types/group.rb +4 -2
- data/test/ral/types/host.rb +17 -10
- data/test/ral/types/mount.rb +40 -23
- data/test/ral/types/package.rb +62 -5
- data/test/ral/types/parameter.rb +2 -2
- data/test/ral/types/property.rb +27 -20
- data/test/ral/types/resources.rb +4 -16
- data/test/ral/types/schedule.rb +2 -2
- data/test/ral/types/service.rb +2 -3
- data/test/ral/types/sshkey.rb +3 -3
- data/test/ral/types/tidy.rb +6 -15
- data/test/ral/types/user.rb +17 -17
- data/test/ral/types/yumrepo.rb +2 -2
- data/test/ral/types/zone.rb +71 -87
- data/test/util/autoload.rb +6 -21
- data/test/util/config.rb +201 -101
- data/test/util/fact_store.rb +67 -0
- data/test/util/features.rb +9 -6
- data/test/util/instance_loader.rb +53 -0
- data/test/util/loadedfile.rb +17 -1
- data/test/util/metrics.rb +54 -57
- data/test/util/posixtest.rb +8 -11
- data/test/util/utiltest.rb +31 -2
- metadata +520 -492
- data/TODO +0 -4
- data/lib/puppet/network/client/logger.rb +0 -6
- data/lib/puppet/network/handler/logger.rb +0 -52
- data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
- data/lib/puppet/type/parsedtype.rb +0 -219
- data/test/network/handler/logger.rb +0 -183
|
@@ -29,25 +29,25 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
29
29
|
|
|
30
30
|
# The target should always be a property, not a parameter.
|
|
31
31
|
newproperty(:target) do
|
|
32
|
-
defaultto { @
|
|
32
|
+
defaultto { @resource.class.defaultprovider.default_target }
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# A simple block to skip the complexity of a full transaction.
|
|
37
|
-
def apply(
|
|
37
|
+
def apply(resource)
|
|
38
38
|
[:one, :two, :ensure].each do |st|
|
|
39
39
|
Puppet.info "Setting %s: %s => %s" %
|
|
40
|
-
[
|
|
41
|
-
|
|
40
|
+
[resource[:name], st, resource.should(st)]
|
|
41
|
+
resource.provider.send(st.to_s + "=", resource.should(st))
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
def
|
|
45
|
+
def mkresource(name, options = {})
|
|
46
46
|
options[:one] ||= "a"
|
|
47
47
|
options[:two] ||= "c"
|
|
48
48
|
options[:name] ||= name
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
resource = @type.create(options)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def mkprovider(name = :parsed)
|
|
@@ -76,7 +76,7 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
def
|
|
79
|
+
def test_resource_attributes
|
|
80
80
|
prov = nil
|
|
81
81
|
assert_nothing_raised do
|
|
82
82
|
prov = mkprovider
|
|
@@ -87,11 +87,12 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
# Now make sure they stay around
|
|
90
|
-
|
|
90
|
+
fakeresource = fakeresource(:testparsedfiletype, "yay")
|
|
91
91
|
|
|
92
|
-
file = prov.new(
|
|
92
|
+
file = prov.new(fakeresource)
|
|
93
|
+
assert(file, "Could not make provider")
|
|
93
94
|
|
|
94
|
-
assert_nothing_raised do
|
|
95
|
+
assert_nothing_raised("Could not set provider name") do
|
|
95
96
|
file.name = :yayness
|
|
96
97
|
end
|
|
97
98
|
|
|
@@ -202,35 +203,34 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
202
203
|
|
|
203
204
|
prov.target_object(:default).write "will b d"
|
|
204
205
|
|
|
205
|
-
# Create some
|
|
206
|
-
|
|
207
|
-
default =
|
|
206
|
+
# Create some resources for some of those demo files
|
|
207
|
+
resource = mkresource "bill", :target => :file1
|
|
208
|
+
default = mkresource "will", :target => :default
|
|
209
|
+
|
|
210
|
+
resources = {"bill" => resource, "will" => default}
|
|
208
211
|
|
|
209
212
|
assert_nothing_raised do
|
|
210
|
-
prov.prefetch
|
|
213
|
+
prov.prefetch(resources)
|
|
211
214
|
end
|
|
212
215
|
|
|
213
|
-
# Make sure we prefetched our
|
|
214
|
-
assert_equal("b",
|
|
215
|
-
assert_equal("b", default.provider.one)
|
|
216
|
-
assert_equal("d", default.provider.two)
|
|
216
|
+
# Make sure we prefetched our resources.
|
|
217
|
+
assert_equal("b", resource.provider.one, "did not prefetch resource from file1")
|
|
218
|
+
assert_equal("b", default.provider.one, "did not prefetch resource from default")
|
|
219
|
+
assert_equal("d", default.provider.two, "did not prefetch resource from default")
|
|
217
220
|
|
|
218
221
|
# Now list all of them and make sure we get everything back
|
|
219
|
-
|
|
222
|
+
providers = nil
|
|
220
223
|
assert_nothing_raised do
|
|
221
|
-
|
|
224
|
+
providers = prov.instances
|
|
222
225
|
end
|
|
223
226
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
names = prov.list_by_name
|
|
227
|
+
providers.each do |provider|
|
|
228
|
+
assert_instance_of(prov, provider, "'instances' class method did not return providers")
|
|
227
229
|
end
|
|
228
230
|
|
|
229
231
|
%w{bill jill will}.each do |name|
|
|
230
|
-
assert(
|
|
232
|
+
assert(providers.find { |provider| provider.name == name},
|
|
231
233
|
"Did not return %s in list" % name)
|
|
232
|
-
assert(names.include?(name),
|
|
233
|
-
"Did not return %s in list_by_name" % name)
|
|
234
234
|
end
|
|
235
235
|
end
|
|
236
236
|
|
|
@@ -242,25 +242,27 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
242
242
|
target = :yayness
|
|
243
243
|
prov.target_object(target).write "yay b d"
|
|
244
244
|
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
records = nil
|
|
247
246
|
assert_nothing_raised do
|
|
248
|
-
prov.prefetch_target(:yayness)
|
|
247
|
+
records = prov.prefetch_target(:yayness)
|
|
249
248
|
end
|
|
250
249
|
|
|
251
250
|
# Now make sure we correctly got the hash
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
assert_equal("
|
|
251
|
+
record = records.find { |r| r[:name] == "yay" }
|
|
252
|
+
assert(record, "Did not get record in prefetch_target")
|
|
253
|
+
assert_equal("b", record[:one])
|
|
254
|
+
assert_equal("d", record[:two])
|
|
255
255
|
end
|
|
256
256
|
|
|
257
257
|
def test_prefetch_match
|
|
258
258
|
prov = mkprovider
|
|
259
259
|
|
|
260
|
-
prov.meta_def(:match) do |record|
|
|
260
|
+
prov.meta_def(:match) do |record, resources|
|
|
261
261
|
# Look for matches on :one
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
if res = resources.find { |name, resource| resource.should(:one).to_s == record[:one].to_s }
|
|
263
|
+
res[1]
|
|
264
|
+
else
|
|
265
|
+
nil
|
|
264
266
|
end
|
|
265
267
|
end
|
|
266
268
|
|
|
@@ -268,22 +270,22 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
268
270
|
target = :yayness
|
|
269
271
|
prov.target_object(target).write "foo b d"
|
|
270
272
|
|
|
271
|
-
|
|
273
|
+
resource = mkresource "yay", :target => :yayness, :one => "b"
|
|
272
274
|
|
|
273
275
|
assert_nothing_raised do
|
|
274
|
-
prov.
|
|
276
|
+
prov.prefetch("yay" => resource)
|
|
275
277
|
end
|
|
276
278
|
|
|
277
279
|
# Now make sure we correctly got the hash
|
|
278
|
-
mprov =
|
|
279
|
-
assert_equal("yay",
|
|
280
|
+
mprov = resource.provider
|
|
281
|
+
assert_equal("yay", resource[:name])
|
|
280
282
|
assert_equal("b", mprov.one)
|
|
281
283
|
assert_equal("d", mprov.two)
|
|
282
284
|
end
|
|
283
285
|
|
|
284
286
|
# We need to test that we're retrieving files from all three locations:
|
|
285
287
|
# from any existing target_objects, from the default file location, and
|
|
286
|
-
# from any existing
|
|
288
|
+
# from any existing resource instances.
|
|
287
289
|
def test_targets
|
|
288
290
|
prov = mkprovider
|
|
289
291
|
|
|
@@ -299,24 +301,37 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
299
301
|
files[:inmemory] = inmem
|
|
300
302
|
prov.target_object(inmem).write("inmem yay ness")
|
|
301
303
|
|
|
302
|
-
# Lastly, create a
|
|
304
|
+
# Lastly, create a resource with separate is and should values
|
|
303
305
|
mtarget = tempfile()
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
files[:ismodels] = istarget
|
|
307
|
-
model = mkmodel "yay", :target => mtarget
|
|
308
|
-
model.is = [:target, istarget]
|
|
306
|
+
files[:resources] = mtarget
|
|
307
|
+
resource = mkresource "yay", :target => mtarget
|
|
309
308
|
|
|
310
|
-
assert(
|
|
311
|
-
assert(model.is(:target), "Did not get a value for target")
|
|
309
|
+
assert(resource.should(:target), "Did not get a value for target")
|
|
312
310
|
|
|
313
311
|
list = nil
|
|
312
|
+
|
|
313
|
+
# First run it without the resource
|
|
314
314
|
assert_nothing_raised do
|
|
315
315
|
list = prov.targets
|
|
316
316
|
end
|
|
317
317
|
|
|
318
|
+
# Make sure it got the first two, but not the resources file
|
|
319
|
+
files.each do |name, file|
|
|
320
|
+
if name == :resources
|
|
321
|
+
assert(! list.include?(file), "Provider somehow found resource target when no resource was passed")
|
|
322
|
+
else
|
|
323
|
+
assert(list.include?(file), "Provider did not find %s file" % name)
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
# Now list with the resource passed
|
|
328
|
+
assert_nothing_raised do
|
|
329
|
+
list = prov.targets("yay" => resource)
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
# And make sure we get all three files
|
|
318
333
|
files.each do |name, file|
|
|
319
|
-
assert(list.include?(file), "Provider did not find %s file" % name)
|
|
334
|
+
assert(list.include?(file), "Provider did not find %s file when resource was passed" % name)
|
|
320
335
|
end
|
|
321
336
|
end
|
|
322
337
|
|
|
@@ -328,22 +343,23 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
328
343
|
prov.filetype = :ram
|
|
329
344
|
prov.default_target = :yayness
|
|
330
345
|
|
|
331
|
-
# Create some
|
|
332
|
-
one =
|
|
333
|
-
two =
|
|
346
|
+
# Create some resources.
|
|
347
|
+
one = mkresource "one", :one => "a", :two => "c", :target => :yayness
|
|
348
|
+
two = mkresource "two", :one => "b", :two => "d", :target => :yayness
|
|
349
|
+
resources = {"one" => one, "two" => two}
|
|
334
350
|
|
|
335
351
|
# Write out a file with different data.
|
|
336
352
|
prov.target_object(:yayness).write "one b d\ntwo a c"
|
|
337
353
|
|
|
338
|
-
prov.prefetch
|
|
354
|
+
prov.prefetch(resources)
|
|
339
355
|
|
|
340
|
-
# Apply and flush the first
|
|
356
|
+
# Apply and flush the first resource.
|
|
341
357
|
assert_nothing_raised do
|
|
342
358
|
apply(one)
|
|
343
359
|
end
|
|
344
360
|
assert_nothing_raised { one.flush }
|
|
345
361
|
|
|
346
|
-
# Make sure it
|
|
362
|
+
# Make sure it didn't clear out our property hash
|
|
347
363
|
assert_equal(:a, one.provider.one)
|
|
348
364
|
assert_equal(:c, one.provider.two)
|
|
349
365
|
|
|
@@ -351,56 +367,58 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
351
367
|
assert(prov.target_object(:yayness).read.include?("one a c"),
|
|
352
368
|
"Did not write out correct data")
|
|
353
369
|
|
|
354
|
-
# Make sure the second
|
|
370
|
+
# Make sure the second resource has not been modified
|
|
355
371
|
assert_equal("a", two.provider.one, "Two was flushed early")
|
|
356
372
|
assert_equal("c", two.provider.two, "Two was flushed early")
|
|
357
373
|
|
|
358
374
|
# And on disk
|
|
359
375
|
assert(prov.target_object(:yayness).read.include?("two a c"),
|
|
360
|
-
"Wrote out other
|
|
376
|
+
"Wrote out other resource")
|
|
361
377
|
|
|
362
378
|
# Now fetch the data again and make sure we're still right
|
|
363
|
-
assert_nothing_raised { prov.prefetch }
|
|
379
|
+
assert_nothing_raised { prov.prefetch(resources) }
|
|
364
380
|
assert_equal("a", one.provider.one)
|
|
365
381
|
assert_equal("a", two.provider.one)
|
|
366
382
|
|
|
367
|
-
# Now flush the second
|
|
383
|
+
# Now flush the second resource and make sure it goes well
|
|
368
384
|
assert_nothing_raised { apply(two) }
|
|
369
385
|
assert_nothing_raised { two.flush }
|
|
370
386
|
|
|
387
|
+
# And make sure it didn't clear our hash
|
|
371
388
|
assert_equal(:b, two.provider.one)
|
|
372
389
|
end
|
|
373
390
|
|
|
391
|
+
# Make sure it works even if the file does not currently exist
|
|
374
392
|
def test_creating_file
|
|
375
393
|
prov = mkprovider
|
|
376
394
|
prov.clear
|
|
377
395
|
|
|
378
396
|
prov.default_target = :basic
|
|
379
397
|
|
|
380
|
-
|
|
398
|
+
resource = mkresource "yay", :target => :basic, :one => "a", :two => "c"
|
|
381
399
|
|
|
382
|
-
assert_equal(:present,
|
|
400
|
+
assert_equal(:present, resource.should(:ensure))
|
|
383
401
|
|
|
384
|
-
apply(
|
|
402
|
+
apply(resource)
|
|
385
403
|
|
|
386
404
|
assert_nothing_raised do
|
|
387
|
-
|
|
405
|
+
resource.flush
|
|
388
406
|
end
|
|
389
407
|
|
|
390
|
-
|
|
408
|
+
assert_equal("yay a c\n", prov.target_object(:basic).read,
|
|
391
409
|
"Did not create file")
|
|
392
410
|
|
|
393
411
|
# Make a change
|
|
394
|
-
|
|
412
|
+
resource.provider.one = "b"
|
|
395
413
|
|
|
396
414
|
# Flush it
|
|
397
415
|
assert_nothing_raised do
|
|
398
|
-
|
|
416
|
+
resource.flush
|
|
399
417
|
end
|
|
400
418
|
|
|
401
|
-
# And make sure our
|
|
402
|
-
assert_equal("yay b c\n",
|
|
403
|
-
|
|
419
|
+
# And make sure our resource doesn't appear twice in the file.
|
|
420
|
+
assert_equal("yay b c\n", prov.target_object(:basic).read,
|
|
421
|
+
"Wrote record to file twice")
|
|
404
422
|
end
|
|
405
423
|
|
|
406
424
|
# Make sure a record can switch targets.
|
|
@@ -410,10 +428,10 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
410
428
|
prov.filetype = :ram
|
|
411
429
|
prov.default_target = :first
|
|
412
430
|
|
|
413
|
-
# Make three
|
|
414
|
-
first =
|
|
415
|
-
second =
|
|
416
|
-
mover =
|
|
431
|
+
# Make three resources, one for each target and one to switch
|
|
432
|
+
first = mkresource "first", :target => :first
|
|
433
|
+
second = mkresource "second", :target => :second
|
|
434
|
+
mover = mkresource "mover", :target => :first
|
|
417
435
|
|
|
418
436
|
[first, second, mover].each do |m|
|
|
419
437
|
assert_nothing_raised("Could not apply %s" % m[:name]) do
|
|
@@ -467,12 +485,12 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
467
485
|
prov.filetype = :ram
|
|
468
486
|
prov.default_target = :first
|
|
469
487
|
|
|
470
|
-
# Make two
|
|
471
|
-
ondisk =
|
|
472
|
-
notdisk =
|
|
488
|
+
# Make two resources, one that starts on disk and one that doesn't
|
|
489
|
+
ondisk = mkresource "ondisk", :target => :first
|
|
490
|
+
notdisk = mkresource "notdisk", :target => :first
|
|
473
491
|
|
|
474
492
|
prov.target_object(:first).write "ondisk a c\n"
|
|
475
|
-
prov.prefetch
|
|
493
|
+
prov.prefetch("ondisk" => ondisk, "notdisk" => notdisk)
|
|
476
494
|
|
|
477
495
|
assert_equal(:present, notdisk.should(:ensure),
|
|
478
496
|
"Did not get default ensure value")
|
|
@@ -496,7 +514,7 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
496
514
|
assert(prov.target_object(:first).read =~ /^ondisk/,
|
|
497
515
|
"Lost object on disk")
|
|
498
516
|
|
|
499
|
-
# Make sure our on-disk
|
|
517
|
+
# Make sure our on-disk resource behaves appropriately.
|
|
500
518
|
assert_equal(:present, ondisk.provider.ensure)
|
|
501
519
|
|
|
502
520
|
# Now destroy the object
|
|
@@ -544,7 +562,7 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
544
562
|
|
|
545
563
|
prov.target_object(:yayness).write "bill a c\njill b d"
|
|
546
564
|
|
|
547
|
-
list = @type.
|
|
565
|
+
list = @type.instances
|
|
548
566
|
|
|
549
567
|
bill = list.find { |r| r[:name] == "bill" }
|
|
550
568
|
jill = list.find { |r| r[:name] == "jill" }
|
|
@@ -559,15 +577,23 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
559
577
|
|
|
560
578
|
# First make sure we can retrieve values multiple times from the
|
|
561
579
|
# provider
|
|
562
|
-
|
|
563
|
-
|
|
580
|
+
bills_values = nil
|
|
581
|
+
assert_nothing_raised do
|
|
582
|
+
bills_values = bill.retrieve
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
assert(bills_values[bill.property(:one)],
|
|
586
|
+
"Bill does not have a value for 'one'")
|
|
587
|
+
assert(bills_values[bill.property(:one)],
|
|
588
|
+
"Bill does not have a value for 'one' on second try")
|
|
564
589
|
assert_nothing_raised do
|
|
565
590
|
bill.retrieve
|
|
566
591
|
end
|
|
567
|
-
assert(bill.
|
|
592
|
+
assert(bills_values[bill.property(:one)],
|
|
593
|
+
"bill's value for 'one' disappeared")
|
|
568
594
|
end
|
|
569
595
|
|
|
570
|
-
# Make sure that creating a new
|
|
596
|
+
# Make sure that creating a new resource finds existing records in memory
|
|
571
597
|
def test_initialize_finds_records
|
|
572
598
|
prov = mkprovider
|
|
573
599
|
prov.default_target = :yayness
|
|
@@ -576,7 +602,7 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
576
602
|
|
|
577
603
|
prov.prefetch
|
|
578
604
|
|
|
579
|
-
# Now make a
|
|
605
|
+
# Now make a resource
|
|
580
606
|
bill = nil
|
|
581
607
|
assert_nothing_raised do
|
|
582
608
|
bill = @type.create :name => "bill"
|
|
@@ -603,11 +629,12 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
603
629
|
assert_apply(bill)
|
|
604
630
|
|
|
605
631
|
prov.prefetch
|
|
632
|
+
current_value = nil
|
|
606
633
|
assert_nothing_raised do
|
|
607
|
-
bill.retrieve
|
|
634
|
+
current_value = bill.retrieve
|
|
608
635
|
end
|
|
609
636
|
|
|
610
|
-
assert(bill.insync
|
|
637
|
+
assert(bill.insync?(current_value),
|
|
611
638
|
"An invalid field marked the record out of sync")
|
|
612
639
|
end
|
|
613
640
|
|
|
@@ -630,7 +657,6 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
630
657
|
targeted = {:target => "target"}
|
|
631
658
|
prov.send(:instance_variable_set, "@records", records)
|
|
632
659
|
prov.expects(:retrieve).with(target).returns([targeted])
|
|
633
|
-
prov.expects(:target_records).with(target).returns([targeted])
|
|
634
660
|
|
|
635
661
|
prov.expects(:prefetch_hook).with([targeted]).returns([targeted])
|
|
636
662
|
|
|
@@ -664,5 +690,5 @@ class TestParsedFile < Test::Unit::TestCase
|
|
|
664
690
|
end
|
|
665
691
|
end
|
|
666
692
|
|
|
667
|
-
# $Id: parsedfile.rb
|
|
693
|
+
# $Id: parsedfile.rb 2551 2007-06-04 20:37:14Z luke $
|
|
668
694
|
|
|
@@ -28,6 +28,15 @@ class TestProvider < Test::Unit::TestCase
|
|
|
28
28
|
return provider
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
def setup
|
|
32
|
+
super
|
|
33
|
+
@type = Puppet::Type.newtype(:provider_test) do
|
|
34
|
+
newparam(:name) {}
|
|
35
|
+
ensurable
|
|
36
|
+
end
|
|
37
|
+
cleanup { Puppet::Type.rmtype(:provider_test) }
|
|
38
|
+
end
|
|
39
|
+
|
|
31
40
|
def test_confine
|
|
32
41
|
provider = newprovider
|
|
33
42
|
|
|
@@ -190,14 +199,14 @@ class TestProvider < Test::Unit::TestCase
|
|
|
190
199
|
"Did not receive info wrapper on failure")
|
|
191
200
|
end
|
|
192
201
|
|
|
193
|
-
def
|
|
202
|
+
def test_mk_resource_methods
|
|
194
203
|
prov = newprovider
|
|
195
|
-
|
|
196
|
-
m =
|
|
197
|
-
prov.
|
|
204
|
+
resourcetype = Struct.new(:validproperties, :parameters)
|
|
205
|
+
m = resourcetype.new([:prop1, :prop2], [:param1, :param2])
|
|
206
|
+
prov.resource_type = m
|
|
198
207
|
|
|
199
|
-
assert_nothing_raised("could not call
|
|
200
|
-
prov.
|
|
208
|
+
assert_nothing_raised("could not call mk_resource_methods") do
|
|
209
|
+
prov.mk_resource_methods
|
|
201
210
|
end
|
|
202
211
|
|
|
203
212
|
obj = prov.new(nil)
|
|
@@ -243,6 +252,75 @@ class TestProvider < Test::Unit::TestCase
|
|
|
243
252
|
optional.missing
|
|
244
253
|
end
|
|
245
254
|
end
|
|
255
|
+
|
|
256
|
+
# Disabling, since I might not keep this interface
|
|
257
|
+
def disabled_test_read_and_each
|
|
258
|
+
# Create a new provider
|
|
259
|
+
provider = @type.provide(:testing)
|
|
260
|
+
|
|
261
|
+
assert_raise(Puppet::DevError, "Did not fail when :read was not overridden") do
|
|
262
|
+
provider.read
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
children = [:one, :two]
|
|
266
|
+
provider.meta_def(:read) do
|
|
267
|
+
children
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
result = []
|
|
271
|
+
assert_nothing_raised("could not call 'each' on provider class") do
|
|
272
|
+
provider.each { |i| result << i }
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
assert_equal(children, result, "did not get correct list from each")
|
|
276
|
+
|
|
277
|
+
assert_equal(children, provider.collect { |i| i }, "provider does not include enumerable")
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def test_source
|
|
281
|
+
base = @type.provide(:base)
|
|
282
|
+
|
|
283
|
+
assert_equal(:base, base.source, "source did not default correctly")
|
|
284
|
+
assert_equal(:base, base.source, "source did not default correctly")
|
|
285
|
+
|
|
286
|
+
sub = @type.provide(:sub, :parent => :base)
|
|
287
|
+
|
|
288
|
+
assert_equal(:sub, sub.source, "source did not default correctly for sub class")
|
|
289
|
+
assert_equal(:sub, sub.source, "source did not default correctly for sub class")
|
|
290
|
+
|
|
291
|
+
other = @type.provide(:other, :parent => :base, :source => :base)
|
|
292
|
+
|
|
293
|
+
assert_equal(:base, other.source, "source did not override")
|
|
294
|
+
assert_equal(:base, other.source, "source did not override")
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Make sure we can initialize with either a resource or a hash, or none at all.
|
|
298
|
+
def test_initialize
|
|
299
|
+
test = @type.provide(:test)
|
|
300
|
+
|
|
301
|
+
inst = @type.create :name => "boo"
|
|
302
|
+
prov = nil
|
|
303
|
+
assert_nothing_raised("Could not init with a resource") do
|
|
304
|
+
prov = test.new(inst)
|
|
305
|
+
end
|
|
306
|
+
assert_equal(prov.resource, inst, "did not set resource correctly")
|
|
307
|
+
assert_equal(inst.name, prov.name, "did not get resource name")
|
|
308
|
+
|
|
309
|
+
params = {:name => :one, :ensure => :present}
|
|
310
|
+
assert_nothing_raised("Could not init with a hash") do
|
|
311
|
+
prov = test.new(params)
|
|
312
|
+
end
|
|
313
|
+
assert_equal(params, prov.send(:instance_variable_get, "@property_hash"), "did not set resource correctly")
|
|
314
|
+
assert_equal(:one, prov.name, "did not get name from hash")
|
|
315
|
+
|
|
316
|
+
assert_nothing_raised("Could not init with no argument") do
|
|
317
|
+
prov = test.new()
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
assert_raise(Puppet::DevError, "did not fail when no name is present") do
|
|
321
|
+
prov.name
|
|
322
|
+
end
|
|
323
|
+
end
|
|
246
324
|
end
|
|
247
325
|
|
|
248
326
|
class TestProviderFeatures < Test::Unit::TestCase
|
|
@@ -282,7 +360,7 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
282
360
|
end
|
|
283
361
|
end
|
|
284
362
|
|
|
285
|
-
|
|
363
|
+
resource = @type.create(:name => "foo")
|
|
286
364
|
{:numbers => [:numeric], :letters => [:alpha], :both => [:numeric, :alpha],
|
|
287
365
|
:mixed => [], :neither => []}.each do |name, should|
|
|
288
366
|
should.sort! { |a,b| a.to_s <=> b.to_s }
|
|
@@ -291,7 +369,7 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
291
369
|
assert_equal(should, provider.features,
|
|
292
370
|
"Provider %s has incorrect features" % name)
|
|
293
371
|
|
|
294
|
-
inst = provider.new(
|
|
372
|
+
inst = provider.new(resource)
|
|
295
373
|
# Make sure the boolean methods work on both the provider and
|
|
296
374
|
# instance.
|
|
297
375
|
@features.keys.each do |feature|
|
|
@@ -346,6 +424,8 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
346
424
|
|
|
347
425
|
assert(provider.respond_to?(:has_features),
|
|
348
426
|
"Provider did not get 'has_features' method added")
|
|
427
|
+
assert(provider.respond_to?(:has_feature),
|
|
428
|
+
"Provider did not get the 'has_feature' alias method")
|
|
349
429
|
|
|
350
430
|
# One with the numeric methods and nothing else
|
|
351
431
|
@type.provide(:numbers) do
|
|
@@ -358,17 +438,17 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
358
438
|
define_method(:one) {}
|
|
359
439
|
define_method(:two) {}
|
|
360
440
|
|
|
361
|
-
|
|
441
|
+
has_feature :alpha
|
|
362
442
|
end
|
|
363
443
|
|
|
364
444
|
# And just the declaration
|
|
365
445
|
@type.provide(:letters) do
|
|
366
|
-
|
|
446
|
+
has_feature :alpha
|
|
367
447
|
end
|
|
368
448
|
|
|
369
449
|
# And a provider that declares it has our methodless feature.
|
|
370
450
|
@type.provide(:none) do
|
|
371
|
-
|
|
451
|
+
has_feature :nomeths
|
|
372
452
|
end
|
|
373
453
|
|
|
374
454
|
should = {:nothing => [], :both => [:numeric, :alpha],
|
|
@@ -392,7 +472,7 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
392
472
|
|
|
393
473
|
# and appropriate providers
|
|
394
474
|
nope = @type.provide(:nope) {}
|
|
395
|
-
maybe = @type.provide(:maybe) {
|
|
475
|
+
maybe = @type.provide(:maybe) { has_feature(:alpha) }
|
|
396
476
|
yep = @type.provide(:yep) { has_features(:alpha, :numeric) }
|
|
397
477
|
|
|
398
478
|
# Now make sure our providers answer correctly.
|
|
@@ -420,4 +500,4 @@ class TestProviderFeatures < Test::Unit::TestCase
|
|
|
420
500
|
end
|
|
421
501
|
end
|
|
422
502
|
|
|
423
|
-
# $Id: provider.rb
|
|
503
|
+
# $Id: provider.rb 2551 2007-06-04 20:37:14Z luke $
|