puppet 0.22.4 → 0.23.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 +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
@@ -74,6 +74,10 @@ class EventLoop
|
|
74
74
|
|
75
75
|
@notify_src, @notify_snk = IO.pipe
|
76
76
|
|
77
|
+
# prevent file descriptor leaks
|
78
|
+
@notify_src.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
79
|
+
@notify_snk.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
80
|
+
|
77
81
|
@notify_src.will_block = false
|
78
82
|
@notify_snk.will_block = false
|
79
83
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# rdot.rb
|
2
2
|
#
|
3
|
-
# $Id: rdot.rb
|
3
|
+
# $Id: rdot.rb 1892 2006-11-17 20:15:23Z luke $
|
4
4
|
#
|
5
5
|
# This is a modified version of dot.rb from Dave Thomas's rdoc project. I [Horst Duchene]
|
6
6
|
# renamed it to rdot.rb to avoid collision with an installed rdoc/dot.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Puppet::Util::FactStore.newstore(:yaml) do
|
2
|
+
desc "Store client facts as flat files, serialized using YAML."
|
3
|
+
|
4
|
+
# Get a client's facts.
|
5
|
+
def get(node)
|
6
|
+
file = path(node)
|
7
|
+
|
8
|
+
return nil unless FileTest.exists?(file)
|
9
|
+
|
10
|
+
begin
|
11
|
+
facts = YAML::load(File.read(file))
|
12
|
+
rescue => detail
|
13
|
+
Puppet.err "Could not load facts for %s: %s" % [node, detail]
|
14
|
+
end
|
15
|
+
facts
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
Puppet.config.use(:yamlfacts)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Store the facts to disk.
|
23
|
+
def set(node, facts)
|
24
|
+
File.open(path(node), "w", 0600) do |f|
|
25
|
+
begin
|
26
|
+
f.print YAML::dump(facts)
|
27
|
+
rescue => detail
|
28
|
+
Puppet.err "Could not write facts for %s: %s" % [node, detail]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Return the path to a given node's file.
|
37
|
+
def path(node)
|
38
|
+
File.join(Puppet[:yamlfactdir], node + ".yaml")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# $Id: yaml.rb 2457 2007-05-03 05:24:13Z luke $
|
data/lib/puppet/feature/base.rb
CHANGED
@@ -17,4 +17,7 @@ Puppet.features.add(:libshadow, :libs => ["shadow"])
|
|
17
17
|
# We're running as root.
|
18
18
|
Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 }
|
19
19
|
|
20
|
-
#
|
20
|
+
# We've got mongrel available
|
21
|
+
Puppet.features.add(:mongrel, :libs => %w{rubygems mongrel puppet/network/server/mongrel})
|
22
|
+
|
23
|
+
# $Id: base.rb 2577 2007-06-14 03:39:23Z luke $
|
@@ -307,9 +307,7 @@ class Puppet::Type
|
|
307
307
|
# method on the class.
|
308
308
|
if options[:retrieve]
|
309
309
|
define_method(:retrieve) do
|
310
|
-
|
311
|
-
"@is", provider.send(options[:retrieve])
|
312
|
-
)
|
310
|
+
provider.send(options[:retrieve])
|
313
311
|
end
|
314
312
|
end
|
315
313
|
|
@@ -415,8 +413,8 @@ class Puppet::Type
|
|
415
413
|
# This duplication is here because it might be a transobject.
|
416
414
|
hash = oldhash.dup.to_hash
|
417
415
|
|
418
|
-
if hash.include?(:
|
419
|
-
hash.delete(:
|
416
|
+
if hash.include?(:resource)
|
417
|
+
hash.delete(:resource)
|
420
418
|
end
|
421
419
|
namevar = self.class.namevar
|
422
420
|
|
@@ -458,22 +456,16 @@ class Puppet::Type
|
|
458
456
|
obj = @parameters[:ensure] and obj.should == :absent
|
459
457
|
end
|
460
458
|
|
461
|
-
#
|
462
|
-
#
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
if self.class.validproperty?(param)
|
468
|
-
unless prop = @parameters[param]
|
469
|
-
prop = self.newattr(param)
|
470
|
-
end
|
471
|
-
prop.is = value
|
472
|
-
else
|
473
|
-
self[param] = value
|
459
|
+
# Create a new property if it is valid but doesn't exist
|
460
|
+
# Returns: true if a new parameter was added, false otherwise
|
461
|
+
def add_property_parameter(prop_name)
|
462
|
+
if self.class.validproperty?(prop_name) && !@parameters[prop_name]
|
463
|
+
self.newattr(prop_name)
|
464
|
+
return true
|
474
465
|
end
|
466
|
+
return false
|
475
467
|
end
|
476
|
-
|
468
|
+
|
477
469
|
# abstract accessing parameters and properties, and normalize
|
478
470
|
# access to always be symbols, not strings
|
479
471
|
# This returns a value, not an object. It returns the 'is'
|
@@ -491,8 +483,10 @@ class Puppet::Type
|
|
491
483
|
end
|
492
484
|
|
493
485
|
if obj = @parameters[name]
|
486
|
+
# We throw a failure here, because this method is too
|
487
|
+
# ambiguous when used with properties.
|
494
488
|
if obj.is_a?(Puppet::Type::Property)
|
495
|
-
|
489
|
+
fail "[] called on a property"
|
496
490
|
else
|
497
491
|
return obj.value
|
498
492
|
end
|
@@ -532,17 +526,10 @@ class Puppet::Type
|
|
532
526
|
# when an error has been encountered
|
533
527
|
def delete(attr)
|
534
528
|
attr = symbolize(attr)
|
535
|
-
|
536
|
-
|
537
|
-
if @children.include?(attr)
|
538
|
-
@children.delete(attr)
|
539
|
-
end
|
529
|
+
if @parameters.has_key?(attr)
|
530
|
+
@parameters.delete(attr)
|
540
531
|
else
|
541
|
-
|
542
|
-
@parameters.delete(attr)
|
543
|
-
else
|
544
|
-
raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
|
545
|
-
end
|
532
|
+
raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
|
546
533
|
end
|
547
534
|
end
|
548
535
|
|
@@ -554,16 +541,6 @@ class Puppet::Type
|
|
554
541
|
}
|
555
542
|
end
|
556
543
|
|
557
|
-
# retrieve the 'is' value for a specified property
|
558
|
-
def is(name)
|
559
|
-
name = attr_alias(name)
|
560
|
-
if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
|
561
|
-
return prop.is
|
562
|
-
else
|
563
|
-
return nil
|
564
|
-
end
|
565
|
-
end
|
566
|
-
|
567
544
|
# retrieve the 'should' value for a specified property
|
568
545
|
def should(name)
|
569
546
|
name = attr_alias(name)
|
@@ -598,9 +575,9 @@ class Puppet::Type
|
|
598
575
|
return nil
|
599
576
|
end
|
600
577
|
|
601
|
-
# Add
|
578
|
+
# Add resource information at creation time, so it's available
|
602
579
|
# during validation.
|
603
|
-
options[:
|
580
|
+
options[:resource] = self
|
604
581
|
begin
|
605
582
|
# make sure the parameter doesn't have any errors
|
606
583
|
return @parameters[name] = klass.new(options)
|
@@ -716,4 +693,4 @@ class Puppet::Type
|
|
716
693
|
end
|
717
694
|
end
|
718
695
|
|
719
|
-
# $Id: attributes.rb
|
696
|
+
# $Id: attributes.rb 2513 2007-05-14 17:27:56Z luke $
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class Puppet::Type
|
2
|
-
attr_accessor :children
|
3
2
|
|
4
3
|
# this is a retarded hack method to get around the difference between
|
5
4
|
# component children and file children
|
@@ -31,48 +30,14 @@ class Puppet::Type
|
|
31
30
|
elsif defined? @parent and @parent.parentof?(child)
|
32
31
|
debug "My parent is parent of child"
|
33
32
|
return true
|
34
|
-
elsif @children.include?(child)
|
35
|
-
debug "child is already in children array"
|
36
|
-
return true
|
37
33
|
else
|
38
34
|
return false
|
39
35
|
end
|
40
36
|
end
|
41
37
|
|
42
|
-
def push(*childs)
|
43
|
-
unless defined? @children
|
44
|
-
@children = []
|
45
|
-
end
|
46
|
-
childs.each { |child|
|
47
|
-
# Make sure we don't have any loops here.
|
48
|
-
if parentof?(child)
|
49
|
-
devfail "Already the parent of %s[%s]" % [child.class.name, child.title]
|
50
|
-
end
|
51
|
-
unless child.is_a?(Puppet::Element)
|
52
|
-
self.debug "Got object of type %s" % child.class
|
53
|
-
self.devfail(
|
54
|
-
"Containers can only contain Puppet::Elements, not %s" %
|
55
|
-
child.class
|
56
|
-
)
|
57
|
-
end
|
58
|
-
@children.push(child)
|
59
|
-
child.parent = self
|
60
|
-
}
|
61
|
-
end
|
62
|
-
|
63
38
|
# Remove an object. The argument determines whether the object's
|
64
39
|
# subscriptions get eliminated, too.
|
65
40
|
def remove(rmdeps = true)
|
66
|
-
# Our children remove themselves from our @children array (else the object
|
67
|
-
# we called this on at the top would not be removed), so we duplicate the
|
68
|
-
# array and iterate over that. If we don't do this, only half of the
|
69
|
-
# objects get removed.
|
70
|
-
@children.dup.each { |child|
|
71
|
-
child.remove(rmdeps)
|
72
|
-
}
|
73
|
-
|
74
|
-
@children.clear
|
75
|
-
|
76
41
|
# This is hackish (mmm, cut and paste), but it works for now, and it's
|
77
42
|
# better than warnings.
|
78
43
|
@parameters.each do |name, obj|
|
@@ -91,4 +56,4 @@ class Puppet::Type
|
|
91
56
|
end
|
92
57
|
end
|
93
58
|
|
94
|
-
# $Id: container.rb
|
59
|
+
# $Id: container.rb 2499 2007-05-09 21:30:44Z luke $
|
@@ -20,9 +20,9 @@ class Puppet::Type
|
|
20
20
|
# it's important that we call retrieve() on the type instance,
|
21
21
|
# not directly on the property, because it allows the type to override
|
22
22
|
# the method, like pfile does
|
23
|
-
self.retrieve
|
23
|
+
currentvalues = self.retrieve
|
24
24
|
|
25
|
-
changes = propertychanges().flatten
|
25
|
+
changes = propertychanges(currentvalues).flatten
|
26
26
|
|
27
27
|
# now record how many changes we've resulted in
|
28
28
|
if changes.length > 0
|
@@ -44,19 +44,32 @@ class Puppet::Type
|
|
44
44
|
# if all contained objects are in sync, then we're in sync
|
45
45
|
# FIXME I don't think this is used on the type instances any more,
|
46
46
|
# it's really only used for testing
|
47
|
-
def insync?
|
47
|
+
def insync?(is)
|
48
48
|
insync = true
|
49
|
-
|
49
|
+
|
50
50
|
if property = @parameters[:ensure]
|
51
|
-
|
51
|
+
unless is.include? property
|
52
|
+
raise Puppet::DevError,
|
53
|
+
"The is value is not in the is array for '%s'" %
|
54
|
+
[property.name]
|
55
|
+
end
|
56
|
+
ensureis = is[property]
|
57
|
+
if property.insync?(ensureis) and property.should == :absent
|
52
58
|
return true
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
56
62
|
properties.each { |property|
|
57
|
-
unless
|
63
|
+
unless is.include? property
|
64
|
+
raise Puppet::DevError,
|
65
|
+
"The is value is not in the is array for '%s'" %
|
66
|
+
[property.name]
|
67
|
+
end
|
68
|
+
|
69
|
+
propis = is[property]
|
70
|
+
unless property.insync?(propis)
|
58
71
|
property.debug("Not in sync: %s vs %s" %
|
59
|
-
[
|
72
|
+
[propis.inspect, property.should.inspect])
|
60
73
|
insync = false
|
61
74
|
#else
|
62
75
|
# property.debug("In sync")
|
@@ -66,28 +79,40 @@ class Puppet::Type
|
|
66
79
|
#self.debug("%s sync status is %s" % [self,insync])
|
67
80
|
return insync
|
68
81
|
end
|
69
|
-
|
82
|
+
|
70
83
|
# retrieve the current value of all contained properties
|
71
84
|
def retrieve
|
85
|
+
return currentpropvalues
|
86
|
+
end
|
87
|
+
|
88
|
+
# get a hash of the current properties.
|
89
|
+
def currentpropvalues(override_value = nil)
|
72
90
|
# it's important to use the method here, as it follows the order
|
73
91
|
# in which they're defined in the object
|
74
|
-
properties().
|
75
|
-
|
76
|
-
|
92
|
+
return properties().inject({}) { | prophash, property|
|
93
|
+
prophash[property] = override_value.nil? ?
|
94
|
+
property.retrieve :
|
95
|
+
override_value
|
96
|
+
prophash
|
97
|
+
}
|
77
98
|
end
|
78
|
-
|
99
|
+
|
79
100
|
# Retrieve the changes associated with all of the properties.
|
80
|
-
def propertychanges
|
101
|
+
def propertychanges(currentvalues)
|
81
102
|
# If we are changing the existence of the object, then none of
|
82
103
|
# the other properties matter.
|
83
104
|
changes = []
|
84
|
-
|
105
|
+
ensureparam = @parameters[:ensure]
|
106
|
+
if @parameters.include?(:ensure) && !currentvalues.include?(ensureparam)
|
107
|
+
raise Puppet::DevError, "Parameter ensure defined but missing from current values"
|
108
|
+
end
|
109
|
+
if @parameters.include?(:ensure) and ! ensureparam.insync?(currentvalues[ensureparam])
|
85
110
|
# self.info "ensuring %s from %s" %
|
86
111
|
# [@parameters[:ensure].should, @parameters[:ensure].is]
|
87
|
-
changes
|
112
|
+
changes << Puppet::PropertyChange.new(ensureparam, currentvalues[ensureparam])
|
88
113
|
# Else, if the 'ensure' property is correctly absent, then do
|
89
114
|
# nothing
|
90
|
-
elsif @parameters.include?(:ensure) and
|
115
|
+
elsif @parameters.include?(:ensure) and currentvalues[ensureparam] == :absent
|
91
116
|
# self.info "Object is correctly absent"
|
92
117
|
return []
|
93
118
|
else
|
@@ -98,9 +123,13 @@ class Puppet::Type
|
|
98
123
|
# self.info "no ensure property"
|
99
124
|
# end
|
100
125
|
changes = properties().find_all { |property|
|
101
|
-
|
126
|
+
unless currentvalues.include?(property)
|
127
|
+
raise Puppet::DevError, "Property %s does not have a current value",
|
128
|
+
[property.name]
|
129
|
+
end
|
130
|
+
! property.insync?(currentvalues[property])
|
102
131
|
}.collect { |property|
|
103
|
-
Puppet::PropertyChange.new(property)
|
132
|
+
Puppet::PropertyChange.new(property, currentvalues[property])
|
104
133
|
}
|
105
134
|
end
|
106
135
|
|
@@ -115,4 +144,4 @@ class Puppet::Type
|
|
115
144
|
end
|
116
145
|
end
|
117
146
|
|
118
|
-
# $Id: evaluation.rb
|
147
|
+
# $Id: evaluation.rb 2488 2007-05-09 12:30:03Z ballman $
|
@@ -248,6 +248,40 @@ class Puppet::Type
|
|
248
248
|
return trans
|
249
249
|
end
|
250
250
|
|
251
|
+
# Retrieve all known instances. Either requires providers or must be overridden.
|
252
|
+
def self.instances
|
253
|
+
unless defined?(@providers) and ! @providers.empty?
|
254
|
+
raise Puppet::DevError, "%s has no providers and has not overridden 'instances'" % self.name
|
255
|
+
end
|
256
|
+
|
257
|
+
# Put the default provider first, then the rest of the suitable providers.
|
258
|
+
packages = {}
|
259
|
+
providers_by_source.collect do |provider|
|
260
|
+
provider.instances.collect do |instance|
|
261
|
+
if other = packages[instance.name]
|
262
|
+
Puppet.warning "Package %s found in both %s and %s; skipping the %s version" %
|
263
|
+
[instance.name, other.class.name, instance.class.name, instance.class.name]
|
264
|
+
next
|
265
|
+
end
|
266
|
+
packages[instance.name] = instance
|
267
|
+
|
268
|
+
create(:name => instance.name, :provider => instance, :check => :all)
|
269
|
+
end
|
270
|
+
end.flatten.compact
|
271
|
+
end
|
272
|
+
|
273
|
+
# Return a list of one suitable provider per source, with the default provider first.
|
274
|
+
def self.providers_by_source
|
275
|
+
# Put the default provider first, then the rest of the suitable providers.
|
276
|
+
sources = []
|
277
|
+
[defaultprovider, suitableprovider].flatten.uniq.collect do |provider|
|
278
|
+
next if sources.include?(provider.source)
|
279
|
+
|
280
|
+
sources << provider.source
|
281
|
+
provider
|
282
|
+
end.compact
|
283
|
+
end
|
284
|
+
|
251
285
|
# Create the path for logging and such.
|
252
286
|
def pathbuilder
|
253
287
|
if defined? @parent and @parent
|
@@ -258,4 +292,4 @@ class Puppet::Type
|
|
258
292
|
end
|
259
293
|
end
|
260
294
|
|
261
|
-
# $Id: instances.rb
|
295
|
+
# $Id: instances.rb 2555 2007-06-08 17:20:00Z luke $
|
@@ -16,8 +16,8 @@ class Puppet::Type
|
|
16
16
|
newvalues(:true, :false)
|
17
17
|
munge do |value|
|
18
18
|
case value
|
19
|
-
when true, :true, "true": @
|
20
|
-
when false, :false, "false": @
|
19
|
+
when true, :true, "true": @resource.noop = true
|
20
|
+
when false, :false, "false": @resource.noop = false
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -59,7 +59,7 @@ class Puppet::Type
|
|
59
59
|
munge do |args|
|
60
60
|
# If they've specified all, collect all known properties
|
61
61
|
if args == :all
|
62
|
-
args = @
|
62
|
+
args = @resource.class.properties.collect do |property|
|
63
63
|
property.name
|
64
64
|
end
|
65
65
|
end
|
@@ -68,7 +68,7 @@ class Puppet::Type
|
|
68
68
|
args = [args]
|
69
69
|
end
|
70
70
|
|
71
|
-
unless defined? @
|
71
|
+
unless defined? @resource
|
72
72
|
self.devfail "No parent for %s, %s?" %
|
73
73
|
[self.class, self.name]
|
74
74
|
end
|
@@ -77,14 +77,18 @@ class Puppet::Type
|
|
77
77
|
unless property.is_a?(Symbol)
|
78
78
|
property = property.intern
|
79
79
|
end
|
80
|
-
next if @
|
80
|
+
next if @resource.propertydefined?(property)
|
81
81
|
|
82
|
-
unless propertyklass = @
|
83
|
-
|
84
|
-
|
82
|
+
unless propertyklass = @resource.class.validproperty?(property)
|
83
|
+
if @resource.class.validattr?(property)
|
84
|
+
next
|
85
|
+
else
|
86
|
+
raise Puppet::Error, "%s is not a valid attribute for %s" %
|
87
|
+
[property, self.class.name]
|
88
|
+
end
|
85
89
|
end
|
86
90
|
next unless propertyklass.checkable?
|
87
|
-
@
|
91
|
+
@resource.newattr(property)
|
88
92
|
}
|
89
93
|
end
|
90
94
|
end
|
@@ -191,20 +195,20 @@ class Puppet::Type
|
|
191
195
|
unless aliases.is_a?(Array)
|
192
196
|
aliases = [aliases]
|
193
197
|
end
|
194
|
-
@
|
198
|
+
@resource.info "Adding aliases %s" % aliases.collect { |a|
|
195
199
|
a.inspect
|
196
200
|
}.join(", ")
|
197
201
|
aliases.each do |other|
|
198
|
-
if obj = @
|
199
|
-
unless obj == @
|
202
|
+
if obj = @resource.class[other]
|
203
|
+
unless obj == @resource
|
200
204
|
self.fail(
|
201
205
|
"%s can not create alias %s: object already exists" %
|
202
|
-
[@
|
206
|
+
[@resource.title, other]
|
203
207
|
)
|
204
208
|
end
|
205
209
|
next
|
206
210
|
end
|
207
|
-
@
|
211
|
+
@resource.class.alias(other, @resource)
|
208
212
|
end
|
209
213
|
end
|
210
214
|
end
|
@@ -227,7 +231,7 @@ class Puppet::Type
|
|
227
231
|
tags = [tags] unless tags.is_a? Array
|
228
232
|
|
229
233
|
tags.each do |tag|
|
230
|
-
@
|
234
|
+
@resource.tag(tag)
|
231
235
|
end
|
232
236
|
end
|
233
237
|
end
|
@@ -244,7 +248,7 @@ class Puppet::Type
|
|
244
248
|
end
|
245
249
|
|
246
250
|
def munge(rels)
|
247
|
-
@
|
251
|
+
@resource.store_relationship(self.class.name, rels)
|
248
252
|
end
|
249
253
|
|
250
254
|
# Create edges from each of our relationships. :in
|
@@ -278,9 +282,9 @@ class Puppet::Type
|
|
278
282
|
# for futher info on this.
|
279
283
|
if self.class.direction == :in
|
280
284
|
source = object
|
281
|
-
target = @
|
285
|
+
target = @resource
|
282
286
|
else
|
283
|
-
source = @
|
287
|
+
source = @resource
|
284
288
|
target = object
|
285
289
|
end
|
286
290
|
|
@@ -406,4 +410,4 @@ class Puppet::Type
|
|
406
410
|
end
|
407
411
|
end # Puppet::Type
|
408
412
|
|
409
|
-
# $Id: metaparams.rb
|
413
|
+
# $Id: metaparams.rb 2591 2007-06-15 19:49:26Z luke $
|