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
@@ -48,6 +48,32 @@ class Puppet::Transaction::Report
|
|
48
48
|
def record(metric, object)
|
49
49
|
@records[metric] << object
|
50
50
|
end
|
51
|
+
|
52
|
+
# Provide a summary of this report.
|
53
|
+
def summary
|
54
|
+
ret = ""
|
55
|
+
|
56
|
+
@metrics.sort { |a,b| a[1].label <=> b[1].label }.each do |name, metric|
|
57
|
+
ret += "%s:\n" % metric.label
|
58
|
+
metric.values.sort { |a,b|
|
59
|
+
# sort by label
|
60
|
+
if a[0] == :total
|
61
|
+
1
|
62
|
+
elsif b[0] == :total
|
63
|
+
-1
|
64
|
+
else
|
65
|
+
a[1] <=> b[1]
|
66
|
+
end
|
67
|
+
}.each do |name, label, value|
|
68
|
+
next if value == 0
|
69
|
+
if value.is_a?(Float)
|
70
|
+
value = "%0.2f" % value
|
71
|
+
end
|
72
|
+
ret += " %15s %s\n" % [label + ":", value]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
return ret
|
76
|
+
end
|
51
77
|
end
|
52
78
|
|
53
|
-
# $Id: report.rb
|
79
|
+
# $Id: report.rb 2459 2007-05-04 05:04:29Z luke $
|
data/lib/puppet/type.rb
CHANGED
@@ -106,40 +106,6 @@ class Type < Puppet::Element
|
|
106
106
|
define_method(:validate, &block)
|
107
107
|
#@validate = block
|
108
108
|
end
|
109
|
-
|
110
|
-
# iterate across all children, and then iterate across properties
|
111
|
-
# we do children first so we're sure that all dependent objects
|
112
|
-
# are checked first
|
113
|
-
# we ignore parameters here, because they only modify how work gets
|
114
|
-
# done, they don't ever actually result in work specifically
|
115
|
-
def each
|
116
|
-
# we want to return the properties in the order that each type
|
117
|
-
# specifies it, because it may (as in the case of File#create)
|
118
|
-
# be important
|
119
|
-
if self.class.depthfirst?
|
120
|
-
@children.each { |child|
|
121
|
-
yield child
|
122
|
-
}
|
123
|
-
end
|
124
|
-
self.eachproperty { |property|
|
125
|
-
yield property
|
126
|
-
}
|
127
|
-
unless self.class.depthfirst?
|
128
|
-
@children.each { |child|
|
129
|
-
yield child
|
130
|
-
}
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
# Recurse deeply through the tree, but only yield types, not properties.
|
135
|
-
def delve(&block)
|
136
|
-
self.each do |obj|
|
137
|
-
if obj.is_a? Puppet::Type
|
138
|
-
obj.delve(&block)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
block.call(self)
|
142
|
-
end
|
143
109
|
|
144
110
|
# create a log at specified level
|
145
111
|
def log(msg)
|
@@ -157,7 +123,6 @@ class Type < Puppet::Element
|
|
157
123
|
public
|
158
124
|
|
159
125
|
def initvars
|
160
|
-
@children = []
|
161
126
|
@evalcount = 0
|
162
127
|
@tags = []
|
163
128
|
|
@@ -381,20 +346,19 @@ class Type < Puppet::Element
|
|
381
346
|
|
382
347
|
# Convert to a transportable object
|
383
348
|
def to_trans(ret = true)
|
384
|
-
# Retrieve the object, if they tell use to.
|
385
|
-
if ret
|
386
|
-
retrieve()
|
387
|
-
end
|
388
|
-
|
389
349
|
trans = TransObject.new(self.title, self.class.name)
|
390
350
|
|
391
|
-
|
392
|
-
|
351
|
+
values = retrieve()
|
352
|
+
values.each do |name, value|
|
353
|
+
trans[name.name] = value
|
393
354
|
end
|
394
355
|
|
395
356
|
@parameters.each do |name, param|
|
396
357
|
# Avoid adding each instance name as both the name and the namevar
|
397
358
|
next if param.class.isnamevar? and param.value == self.title
|
359
|
+
|
360
|
+
# We've already got property values
|
361
|
+
next if param.is_a?(Puppet::Property)
|
398
362
|
trans[name] = param.value
|
399
363
|
end
|
400
364
|
|
@@ -417,4 +381,4 @@ require 'puppet/type/tidy'
|
|
417
381
|
|
418
382
|
|
419
383
|
|
420
|
-
# $Id: type.rb
|
384
|
+
# $Id: type.rb 2577 2007-06-14 03:39:23Z luke $
|
@@ -7,153 +7,227 @@ require 'puppet/type'
|
|
7
7
|
require 'puppet/transaction'
|
8
8
|
require 'puppet/pgraph'
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
Puppet::Type.newtype(:component) do
|
11
|
+
include Enumerable
|
12
|
+
attr_accessor :children
|
13
|
+
|
14
|
+
newparam(:name) do
|
15
|
+
desc "The name of the component. Generally optional."
|
16
|
+
isnamevar
|
17
|
+
end
|
18
|
+
|
19
|
+
newparam(:type) do
|
20
|
+
desc "The type that this component maps to. Generally some kind of
|
21
|
+
class from the language."
|
22
|
+
|
23
|
+
defaultto "component"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Remove a child from the component.
|
27
|
+
def delete(child)
|
28
|
+
if @children.include?(child)
|
29
|
+
@children.delete(child)
|
30
|
+
return true
|
31
|
+
else
|
32
|
+
return super
|
17
33
|
end
|
34
|
+
end
|
18
35
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
36
|
+
# Recurse deeply through the tree, but only yield types, not properties.
|
37
|
+
def delve(&block)
|
38
|
+
self.each do |obj|
|
39
|
+
if obj.is_a?(self.class)
|
40
|
+
obj.delve(&block)
|
41
|
+
end
|
24
42
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
43
|
+
block.call(self)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return each child in turn.
|
47
|
+
def each
|
48
|
+
@children.each { |child| yield child }
|
49
|
+
end
|
50
|
+
|
51
|
+
# flatten all children, sort them, and evaluate them in order
|
52
|
+
# this is only called on one component over the whole system
|
53
|
+
# this also won't work with scheduling, but eh
|
54
|
+
def evaluate
|
55
|
+
self.finalize unless self.finalized?
|
56
|
+
transaction = Puppet::Transaction.new(self)
|
57
|
+
transaction.component = self
|
58
|
+
return transaction
|
59
|
+
end
|
60
|
+
|
61
|
+
# Do all of the polishing off, mostly doing autorequires and making
|
62
|
+
# dependencies. This will get run once on the top-level component,
|
63
|
+
# and it will do everything necessary.
|
64
|
+
def finalize
|
65
|
+
started = {}
|
66
|
+
finished = {}
|
67
|
+
|
68
|
+
# First do all of the finish work, which mostly involves
|
69
|
+
self.delve do |object|
|
70
|
+
# Make sure we don't get into loops
|
71
|
+
if started.has_key?(object)
|
72
|
+
debug "Already finished %s" % object.title
|
73
|
+
next
|
31
74
|
else
|
32
|
-
|
75
|
+
started[object] = true
|
76
|
+
end
|
77
|
+
unless finished.has_key?(object)
|
78
|
+
object.finish
|
79
|
+
finished[object] = true
|
33
80
|
end
|
34
81
|
end
|
35
82
|
|
36
|
-
|
37
|
-
|
38
|
-
@children.each { |child| yield child }
|
39
|
-
end
|
83
|
+
@finalized = true
|
84
|
+
end
|
40
85
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
transaction = Puppet::Transaction.new(self)
|
47
|
-
transaction.component = self
|
48
|
-
return transaction
|
86
|
+
def finalized?
|
87
|
+
if defined? @finalized
|
88
|
+
return @finalized
|
89
|
+
else
|
90
|
+
return false
|
49
91
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
unless finished.has_key?(object)
|
68
|
-
object.finish
|
69
|
-
finished[object] = true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
@finalized = true
|
92
|
+
end
|
93
|
+
|
94
|
+
# Initialize a new component
|
95
|
+
def initialize(args)
|
96
|
+
@children = []
|
97
|
+
super(args)
|
98
|
+
end
|
99
|
+
|
100
|
+
def initvars
|
101
|
+
super
|
102
|
+
@children = []
|
103
|
+
end
|
104
|
+
|
105
|
+
def parent=(parent)
|
106
|
+
if self.parentof?(parent)
|
107
|
+
devfail "%s[%s] is already the parent of %s[%s]" %
|
108
|
+
[self.class.name, self.title, parent.class.name, parent.title]
|
74
109
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
110
|
+
@parent = parent
|
111
|
+
end
|
112
|
+
|
113
|
+
# Add a hook for testing for recursion.
|
114
|
+
def parentof?(child)
|
115
|
+
if super(child)
|
116
|
+
return true
|
117
|
+
elsif @children.include?(child)
|
118
|
+
debug "child is already in children array"
|
119
|
+
return true
|
120
|
+
else
|
121
|
+
return false
|
82
122
|
end
|
123
|
+
end
|
83
124
|
|
84
|
-
|
85
|
-
|
125
|
+
def push(*childs)
|
126
|
+
unless defined? @children
|
86
127
|
@children = []
|
87
|
-
super(args)
|
88
128
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
129
|
+
childs.each { |child|
|
130
|
+
# Make sure we don't have any loops here.
|
131
|
+
if parentof?(child)
|
132
|
+
devfail "Already the parent of %s[%s]" % [child.class.name, child.title]
|
133
|
+
end
|
134
|
+
unless child.is_a?(Puppet::Element)
|
135
|
+
self.debug "Got object of type %s" % child.class
|
136
|
+
self.devfail(
|
137
|
+
"Containers can only contain Puppet::Elements, not %s" %
|
138
|
+
child.class
|
139
|
+
)
|
140
|
+
end
|
141
|
+
@children.push(child)
|
142
|
+
child.parent = self
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
# Component paths are special because they function as containers.
|
147
|
+
def pathbuilder
|
148
|
+
tmp = []
|
149
|
+
if defined? @parent and @parent
|
150
|
+
tmp += [@parent.pathbuilder, self.title]
|
151
|
+
else
|
152
|
+
# The top-level name is always main[top], so we don't bother with
|
153
|
+
# that.
|
154
|
+
if self.title == "main[top]"
|
155
|
+
tmp << "" # This empty field results in "//" in the path
|
95
156
|
else
|
96
|
-
|
97
|
-
# that.
|
98
|
-
if self.title == "main[top]"
|
99
|
-
tmp << "" # This empty field results in "//" in the path
|
100
|
-
else
|
101
|
-
tmp << self.title
|
102
|
-
end
|
157
|
+
tmp << self.title
|
103
158
|
end
|
104
|
-
|
105
|
-
tmp
|
106
159
|
end
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
160
|
+
|
161
|
+
tmp
|
162
|
+
end
|
163
|
+
|
164
|
+
# Remove an object. The argument determines whether the object's
|
165
|
+
# subscriptions get eliminated, too.
|
166
|
+
def remove(rmdeps = true)
|
167
|
+
# Our children remove themselves from our @children array (else the object
|
168
|
+
# we called this on at the top would not be removed), so we duplicate the
|
169
|
+
# array and iterate over that. If we don't do this, only half of the
|
170
|
+
# objects get removed.
|
171
|
+
@children.dup.each { |child|
|
172
|
+
child.remove(rmdeps)
|
173
|
+
}
|
174
|
+
|
175
|
+
@children.clear
|
176
|
+
|
177
|
+
# Get rid of params and provider, too.
|
178
|
+
super
|
179
|
+
|
180
|
+
@parent = nil
|
181
|
+
end
|
182
|
+
|
183
|
+
# We have a different way of setting the title
|
184
|
+
def title
|
185
|
+
unless defined? @title
|
186
|
+
if self[:type] == self[:name] # this is the case for classes
|
187
|
+
@title = self[:type]
|
188
|
+
elsif self[:name] =~ /\[.+\]/ # most components already have ref info in the name
|
189
|
+
@title = self[:name]
|
190
|
+
else # else, set it up
|
191
|
+
@title = "%s[%s]" % [self[:type].capitalize, self[:name]]
|
118
192
|
end
|
119
|
-
return @title
|
120
|
-
end
|
121
|
-
|
122
|
-
def refresh
|
123
|
-
@children.collect { |child|
|
124
|
-
if child.respond_to?(:refresh)
|
125
|
-
child.refresh
|
126
|
-
child.log "triggering %s" % :refresh
|
127
|
-
end
|
128
|
-
}
|
129
193
|
end
|
194
|
+
return @title
|
195
|
+
end
|
196
|
+
|
197
|
+
def refresh
|
198
|
+
@children.collect { |child|
|
199
|
+
if child.respond_to?(:refresh)
|
200
|
+
child.refresh
|
201
|
+
child.log "triggering %s" % :refresh
|
202
|
+
end
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
# Convert to a graph object with all of the container info.
|
207
|
+
def to_graph
|
208
|
+
graph = Puppet::PGraph.new
|
130
209
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
obj.each do |child|
|
137
|
-
if child.is_a?(Puppet::Type)
|
138
|
-
graph.add_edge!(obj, child)
|
139
|
-
delver.call(child)
|
140
|
-
end
|
210
|
+
delver = proc do |obj|
|
211
|
+
obj.each do |child|
|
212
|
+
graph.add_edge!(obj, child)
|
213
|
+
if child.is_a?(self.class)
|
214
|
+
delver.call(child)
|
141
215
|
end
|
142
216
|
end
|
143
|
-
|
144
|
-
delver.call(self)
|
145
|
-
|
146
|
-
return graph
|
147
217
|
end
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
218
|
+
|
219
|
+
delver.call(self)
|
220
|
+
|
221
|
+
return graph
|
222
|
+
end
|
223
|
+
|
224
|
+
def to_s
|
225
|
+
if self.title =~ /\[/
|
226
|
+
return self.title
|
227
|
+
else
|
228
|
+
return "component(%s)" % self.title
|
155
229
|
end
|
156
|
-
|
230
|
+
end
|
157
231
|
end
|
158
232
|
|
159
|
-
# $Id: component.rb
|
233
|
+
# $Id: component.rb 2499 2007-05-09 21:30:44Z luke $
|