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
@@ -56,14 +56,15 @@ class Puppet::Parser::Resource
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
# Add any metaparams defined in our scope.
|
59
|
+
# Add any metaparams defined in our scope. This actually adds any metaparams
|
60
60
|
# from any parent scope, and there's currently no way to turn that off.
|
61
61
|
def addmetaparams
|
62
62
|
Puppet::Type.eachmetaparam do |name|
|
63
63
|
next if self[name]
|
64
64
|
if val = scope.lookupvar(name.to_s, false)
|
65
65
|
unless val == :undefined
|
66
|
-
set Param.new(:name => name, :value => val,
|
66
|
+
set Param.new(:name => name, :value => val,
|
67
|
+
:source => scope.source)
|
67
68
|
end
|
68
69
|
end
|
69
70
|
end
|
@@ -94,6 +95,7 @@ class Puppet::Parser::Resource
|
|
94
95
|
:title => self.title,
|
95
96
|
:arguments => self.to_hash,
|
96
97
|
:scope => self.scope,
|
98
|
+
:virtual => self.virtual,
|
97
99
|
:exported => self.exported
|
98
100
|
)
|
99
101
|
elsif builtin?
|
@@ -171,6 +173,48 @@ class Puppet::Parser::Resource
|
|
171
173
|
end
|
172
174
|
end
|
173
175
|
|
176
|
+
def modify_rails(db_resource)
|
177
|
+
args = rails_args
|
178
|
+
args.each do |param, value|
|
179
|
+
db_resource[param] = value unless db_resource[param] == value
|
180
|
+
end
|
181
|
+
|
182
|
+
# Handle file specially
|
183
|
+
if (self.file and
|
184
|
+
(!db_resource.file or db_resource.file != self.file))
|
185
|
+
db_resource.file = self.file
|
186
|
+
end
|
187
|
+
|
188
|
+
updated_params = @params.inject({}) do |hash, ary|
|
189
|
+
hash[ary[0].to_s] = ary[1]
|
190
|
+
hash
|
191
|
+
end
|
192
|
+
|
193
|
+
db_resource.ar_hash_merge(db_resource.get_params_hash(db_resource.param_values), updated_params,
|
194
|
+
:create => Proc.new { |name, parameter|
|
195
|
+
parameter.to_rails(db_resource)
|
196
|
+
}, :delete => Proc.new { |values|
|
197
|
+
values.each { |value| db_resource.param_values.delete(value) }
|
198
|
+
}, :modify => Proc.new { |db, mem|
|
199
|
+
mem.modify_rails_values(db)
|
200
|
+
})
|
201
|
+
|
202
|
+
updated_tags = tags.inject({}) { |hash, tag|
|
203
|
+
hash[tag] = tag
|
204
|
+
hash
|
205
|
+
}
|
206
|
+
|
207
|
+
db_resource.ar_hash_merge(db_resource.get_tag_hash(),
|
208
|
+
updated_tags,
|
209
|
+
:create => Proc.new { |name, tag|
|
210
|
+
db_resource.add_resource_tag(tag)
|
211
|
+
}, :delete => Proc.new { |rt|
|
212
|
+
rt.each { |tag| db_resource.resource_tags.delete(tag) }
|
213
|
+
}, :modify => Proc.new { |db, mem|
|
214
|
+
# nothing here
|
215
|
+
})
|
216
|
+
end
|
217
|
+
|
174
218
|
# This *significantly* reduces the number of calls to Puppet.[].
|
175
219
|
def paramcheck?
|
176
220
|
unless defined? @@paramcheck
|
@@ -179,13 +223,13 @@ class Puppet::Parser::Resource
|
|
179
223
|
@@paramcheck
|
180
224
|
end
|
181
225
|
|
182
|
-
# Verify that all passed parameters are valid. This throws an error if
|
183
|
-
# a problem, so we don't have to worry about the return value.
|
226
|
+
# Verify that all passed parameters are valid. This throws an error if
|
227
|
+
# there's a problem, so we don't have to worry about the return value.
|
184
228
|
def paramcheck(param)
|
185
229
|
param = param.to_s
|
186
230
|
# Now make sure it's a valid argument to our class. These checks
|
187
|
-
# are organized in order of commonhood -- most types, it's a valid
|
188
|
-
# and paramcheck is enabled.
|
231
|
+
# are organized in order of commonhood -- most types, it's a valid
|
232
|
+
# argument and paramcheck is enabled.
|
189
233
|
if @ref.typeclass.validattr?(param)
|
190
234
|
true
|
191
235
|
elsif %w{name title}.include?(param) # always allow these
|
@@ -227,7 +271,8 @@ class Puppet::Parser::Resource
|
|
227
271
|
if Puppet[:trace]
|
228
272
|
puts caller
|
229
273
|
end
|
230
|
-
msg = "Parameter '%s' is already set on %s" %
|
274
|
+
msg = "Parameter '%s' is already set on %s" %
|
275
|
+
[param.name, self.to_s]
|
231
276
|
if param.source.to_s != ""
|
232
277
|
msg += " by %s" % param.source
|
233
278
|
end
|
@@ -260,53 +305,30 @@ class Puppet::Parser::Resource
|
|
260
305
|
def to_hash
|
261
306
|
@params.inject({}) do |hash, ary|
|
262
307
|
param = ary[1]
|
263
|
-
|
308
|
+
# Skip "undef" values.
|
309
|
+
if param.value != :undef
|
310
|
+
hash[param.name] = param.value
|
311
|
+
end
|
264
312
|
hash
|
265
313
|
end
|
266
314
|
end
|
267
315
|
|
268
|
-
# Turn our parser resource into a Rails resource.
|
269
|
-
def to_rails(host
|
270
|
-
args =
|
271
|
-
[:type, :title, :line, :exported].each do |param|
|
272
|
-
# 'type' isn't a valid column name, so we have to use something else.
|
273
|
-
if param == :type
|
274
|
-
to = :restype
|
275
|
-
else
|
276
|
-
to = param
|
277
|
-
end
|
278
|
-
if value = self.send(param)
|
279
|
-
args[to] = value
|
280
|
-
end
|
281
|
-
end
|
316
|
+
# Turn our parser resource into a Rails resource.
|
317
|
+
def to_rails(host)
|
318
|
+
args = rails_args
|
282
319
|
|
283
|
-
|
284
|
-
if resource
|
285
|
-
# We exist
|
286
|
-
args.each do |param, value|
|
287
|
-
v = resource[param]
|
288
|
-
unless v == value
|
289
|
-
resource[param] = value
|
290
|
-
end
|
291
|
-
end
|
292
|
-
else
|
293
|
-
# Else create it anew
|
294
|
-
resource = host.resources.build(args)
|
295
|
-
end
|
320
|
+
db_resource = host.resources.build(args)
|
296
321
|
|
297
|
-
# Handle file
|
298
|
-
|
299
|
-
if self.send(param) and (!resource.send(param) or resource.send(param) != self.send(param))
|
300
|
-
resource.send(param.to_s + "=", self.send(param))
|
301
|
-
end
|
302
|
-
end
|
322
|
+
# Handle file specially
|
323
|
+
db_resource.file = self.file
|
303
324
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
325
|
+
@params.each { |name, param|
|
326
|
+
param.to_rails(db_resource)
|
327
|
+
}
|
328
|
+
|
329
|
+
tags.each { |tag| db_resource.add_resource_tag(tag) }
|
308
330
|
|
309
|
-
return
|
331
|
+
return db_resource
|
310
332
|
end
|
311
333
|
|
312
334
|
def to_s
|
@@ -334,7 +356,16 @@ class Puppet::Parser::Resource
|
|
334
356
|
av
|
335
357
|
}
|
336
358
|
end
|
337
|
-
|
359
|
+
|
360
|
+
# If the value is an array with only one value, then
|
361
|
+
# convert it to a single value. This is largely so that
|
362
|
+
# the database interaction doesn't have to worry about
|
363
|
+
# whether it returns an array or a string.
|
364
|
+
obj[p.to_s] = if v.is_a?(Array) and v.length == 1
|
365
|
+
v[0]
|
366
|
+
else
|
367
|
+
v
|
368
|
+
end
|
338
369
|
end
|
339
370
|
|
340
371
|
obj.file = self.file
|
@@ -348,6 +379,18 @@ class Puppet::Parser::Resource
|
|
348
379
|
def virtual?
|
349
380
|
self.virtual
|
350
381
|
end
|
382
|
+
|
383
|
+
private
|
384
|
+
def rails_args
|
385
|
+
return [:type, :title, :line, :exported].inject({}) do |hash, param|
|
386
|
+
# 'type' isn't a valid column name, so we have to use another name.
|
387
|
+
to = (param == :type) ? :restype : param
|
388
|
+
if value = self.send(param)
|
389
|
+
hash[to] = value
|
390
|
+
end
|
391
|
+
hash
|
392
|
+
end
|
393
|
+
end
|
351
394
|
end
|
352
395
|
|
353
|
-
# $Id: resource.rb
|
396
|
+
# $Id: resource.rb 2597 2007-06-17 21:41:50Z luke $
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# The parameters we stick in Resources.
|
1
|
+
# The parameters we stick in Resources.
|
2
2
|
class Puppet::Parser::Resource::Param
|
3
3
|
attr_accessor :name, :value, :source, :line, :file
|
4
4
|
include Puppet::Util
|
@@ -15,43 +15,66 @@ class Puppet::Parser::Resource::Param
|
|
15
15
|
"#<#{self.class} @name => #{self.name}, @value => #{self.value}, @source => #{self.source.type}>"
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
def line_to_i
|
19
|
+
return line ? Integer(line) : nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# Store a new parameter in a Rails db.
|
23
|
+
def to_rails(db_resource)
|
20
24
|
values = value.is_a?(Array) ? value : [value]
|
25
|
+
values = values.map { |v| v.to_s }
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
unless pn
|
25
|
-
# We're creating it anew.
|
26
|
-
pn = res.param_names.build(:name => self.name.to_s)
|
27
|
-
end
|
28
|
-
|
29
|
-
value_objects = []
|
27
|
+
param_name = Puppet::Rails::ParamName.find_or_create_by_name(self.name.to_s)
|
28
|
+
line_number = line_to_i()
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
oldvals = []
|
36
|
-
|
37
|
-
if pv = pn.param_values
|
38
|
-
oldvals = pv.collect { |val| val.value }
|
30
|
+
return values.collect do |v|
|
31
|
+
db_resource.param_values.create(:value => v.to_s,
|
32
|
+
:line => line_number,
|
33
|
+
:param_name => param_name)
|
39
34
|
end
|
35
|
+
end
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
objects = values.collect do |v|
|
44
|
-
pn.param_values.build(:value => v.to_s)
|
45
|
-
end
|
46
|
-
pn.param_values = objects
|
47
|
-
end
|
37
|
+
def modify_rails_values(db_values)
|
38
|
+
#dev_warn if db_values.nil? || db_values.empty?
|
48
39
|
|
49
|
-
|
40
|
+
values_to_remove(db_values).each { |remove_me|
|
41
|
+
Puppet::Rails::ParamValue.delete(remove_me)
|
42
|
+
}
|
43
|
+
line_number = line_to_i()
|
44
|
+
values_to_add(db_values).each { |add_me|
|
45
|
+
db_resource = db_values[0].resource
|
46
|
+
db_param_name = db_values[0].param_name
|
47
|
+
db_resource.param_values.create(:value => add_me.to_s,
|
48
|
+
:line => line_number,
|
49
|
+
:param_name => db_param_name)
|
50
|
+
}
|
50
51
|
end
|
51
|
-
|
52
|
+
|
52
53
|
def to_s
|
53
54
|
"%s => %s" % [self.name, self.value]
|
54
55
|
end
|
56
|
+
|
57
|
+
def values_to_remove(db_values)
|
58
|
+
values = value.is_a?(Array) ? value : [value]
|
59
|
+
values = values.map { |v| v.to_s }
|
60
|
+
line_number = line_to_i()
|
61
|
+
db_values.collect do |db|
|
62
|
+
db unless (db.line == line_number &&
|
63
|
+
values.find { |v|
|
64
|
+
v == db.value
|
65
|
+
} )
|
66
|
+
end.compact
|
67
|
+
end
|
68
|
+
|
69
|
+
def values_to_add(db_values)
|
70
|
+
values = value.is_a?(Array) ? value : [value]
|
71
|
+
values = values.map { |v| v.to_s }
|
72
|
+
line_number = line_to_i()
|
73
|
+
values.collect do |v|
|
74
|
+
v unless db_values.find { |db| (v == db.value &&
|
75
|
+
line_number == db.line) }
|
76
|
+
end.compact
|
77
|
+
end
|
55
78
|
end
|
56
79
|
|
57
|
-
# $Id: param.rb
|
80
|
+
# $Id: param.rb 2597 2007-06-17 21:41:50Z luke $
|
data/lib/puppet/parser/scope.rb
CHANGED
@@ -11,21 +11,13 @@ class Puppet::Parser::Scope
|
|
11
11
|
|
12
12
|
AST = Puppet::Parser::AST
|
13
13
|
|
14
|
-
# This doesn't actually work right now.
|
15
|
-
Puppet.config.setdefaults(:puppet,
|
16
|
-
:lexical => [false, "Whether to use lexical scoping (vs. dynamic)."],
|
17
|
-
:templatedir => ["$vardir/templates",
|
18
|
-
"Where Puppet looks for template files."
|
19
|
-
]
|
20
|
-
)
|
21
|
-
|
22
14
|
Puppet::Util.logmethods(self)
|
23
15
|
|
24
16
|
include Enumerable
|
25
17
|
include Puppet::Util::Errors
|
26
18
|
attr_accessor :parent, :level, :interp, :source, :host
|
27
19
|
attr_accessor :name, :type, :topscope, :base, :keyword
|
28
|
-
attr_accessor :top, :translated, :exported
|
20
|
+
attr_accessor :top, :translated, :exported, :virtual
|
29
21
|
|
30
22
|
# Whether we behave declaratively. Note that it's a class variable,
|
31
23
|
# so all scopes behave the same.
|
@@ -56,7 +48,7 @@ class Puppet::Parser::Scope
|
|
56
48
|
# Is the value true? This allows us to control the definition of truth
|
57
49
|
# in one place.
|
58
50
|
def self.true?(value)
|
59
|
-
if value == false or value == ""
|
51
|
+
if value == false or value == "" or value == :undef
|
60
52
|
return false
|
61
53
|
else
|
62
54
|
return true
|
@@ -123,8 +115,8 @@ class Puppet::Parser::Scope
|
|
123
115
|
# that subclasses can set their parent scopes to be the scope of
|
124
116
|
# their parent class.
|
125
117
|
def class_scope(klass)
|
126
|
-
if klass.respond_to?(:
|
127
|
-
@classtable[klass.
|
118
|
+
if klass.respond_to?(:classname)
|
119
|
+
@classtable[klass.classname]
|
128
120
|
else
|
129
121
|
@classtable[klass]
|
130
122
|
end
|
@@ -379,9 +371,7 @@ class Puppet::Parser::Scope
|
|
379
371
|
return values
|
380
372
|
end
|
381
373
|
|
382
|
-
# Look up all of the exported objects of a given type.
|
383
|
-
# lookupobject, this only searches up through parent classes, not
|
384
|
-
# the whole scope tree.
|
374
|
+
# Look up all of the exported objects of a given type.
|
385
375
|
def lookupexported(type)
|
386
376
|
@definedtable.find_all do |name, r|
|
387
377
|
r.type == type and r.exported?
|
@@ -406,7 +396,7 @@ class Puppet::Parser::Scope
|
|
406
396
|
raise Puppet::ParseError, "Could not find class %s" % klassname
|
407
397
|
end
|
408
398
|
unless kscope = class_scope(klass)
|
409
|
-
raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.
|
399
|
+
raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
|
410
400
|
end
|
411
401
|
return kscope.lookupvar(shortname, usestring)
|
412
402
|
end
|
@@ -422,7 +412,11 @@ class Puppet::Parser::Scope
|
|
422
412
|
end
|
423
413
|
# We can't use "if @symtable[name]" here because the value might be false
|
424
414
|
if @symtable.include?(name)
|
425
|
-
|
415
|
+
if usestring and @symtable[name] == :undef
|
416
|
+
return ""
|
417
|
+
else
|
418
|
+
return @symtable[name]
|
419
|
+
end
|
426
420
|
elsif self.parent
|
427
421
|
return @parent.lookupvar(name, usestring)
|
428
422
|
elsif usestring
|
@@ -459,8 +453,8 @@ class Puppet::Parser::Scope
|
|
459
453
|
end
|
460
454
|
|
461
455
|
def setclass?(obj)
|
462
|
-
if obj.respond_to?(:
|
463
|
-
@classtable.has_key?(obj.
|
456
|
+
if obj.respond_to?(:classname)
|
457
|
+
@classtable.has_key?(obj.classname)
|
464
458
|
else
|
465
459
|
@classtable[obj]
|
466
460
|
end
|
@@ -472,11 +466,11 @@ class Puppet::Parser::Scope
|
|
472
466
|
# can support multiple unrelated classes with the same name.
|
473
467
|
def setclass(obj)
|
474
468
|
if obj.is_a?(AST::HostClass)
|
475
|
-
unless obj.
|
469
|
+
unless obj.classname
|
476
470
|
raise Puppet::DevError, "Got a %s with no fully qualified name" %
|
477
471
|
obj.class
|
478
472
|
end
|
479
|
-
@classtable[obj.
|
473
|
+
@classtable[obj.classname] = self
|
480
474
|
else
|
481
475
|
raise Puppet::DevError, "Invalid class %s" % obj.inspect
|
482
476
|
end
|
@@ -496,6 +490,13 @@ class Puppet::Parser::Scope
|
|
496
490
|
|
497
491
|
@children << obj
|
498
492
|
|
493
|
+
# Mark the resource as virtual or exported, as necessary.
|
494
|
+
if self.exported?
|
495
|
+
obj.exported = true
|
496
|
+
elsif self.virtual?
|
497
|
+
obj.virtual = true
|
498
|
+
end
|
499
|
+
|
499
500
|
# The global table
|
500
501
|
@definedtable[obj.ref] = obj
|
501
502
|
|
@@ -633,7 +634,7 @@ class Puppet::Parser::Scope
|
|
633
634
|
Puppet.debug "got told to tag with %s" % tag.inspect
|
634
635
|
next
|
635
636
|
end
|
636
|
-
unless tag =~ /^\w[-\w]
|
637
|
+
unless tag =~ /^\w[-\w]*$/
|
637
638
|
fail Puppet::ParseError, "Invalid tag %s" % tag.inspect
|
638
639
|
end
|
639
640
|
tag = tag.to_s
|
@@ -721,6 +722,10 @@ class Puppet::Parser::Scope
|
|
721
722
|
return ary
|
722
723
|
end
|
723
724
|
end
|
725
|
+
|
726
|
+
def virtual?
|
727
|
+
self.virtual || self.exported?
|
728
|
+
end
|
724
729
|
end
|
725
730
|
|
726
|
-
# $Id: scope.rb
|
731
|
+
# $Id: scope.rb 2562 2007-06-11 21:54:37Z luke $
|
data/lib/puppet/pgraph.rb
CHANGED
@@ -48,26 +48,6 @@ class Puppet::PGraph < GRATR::Digraph
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
# Fail in a somewhat informative way if the graph has become cyclic.
|
52
|
-
def check_cycle(sorted)
|
53
|
-
return true if sorted.size == size()
|
54
|
-
|
55
|
-
bad = []
|
56
|
-
vertices.each do |v|
|
57
|
-
bad << v unless sorted.include?(v)
|
58
|
-
end
|
59
|
-
|
60
|
-
if bad.length > 0
|
61
|
-
raise Puppet::Error,
|
62
|
-
"Found dependency cycle involving %s" % bad.collect do |v|
|
63
|
-
v.to_s
|
64
|
-
end.join(", ")
|
65
|
-
else
|
66
|
-
raise Puppet::Error,
|
67
|
-
"Found dependency cycle but could not find the cause"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
51
|
# Which resources a given resource depends upon.
|
72
52
|
def dependents(resource)
|
73
53
|
tree_from_vertex2(resource).keys
|
@@ -185,6 +165,31 @@ class Puppet::PGraph < GRATR::Digraph
|
|
185
165
|
end
|
186
166
|
end
|
187
167
|
|
168
|
+
# Replace the default method, because we want to throw errors on back edges,
|
169
|
+
# not just skip them.
|
170
|
+
def topsort(start = nil, &block)
|
171
|
+
result = []
|
172
|
+
go = true
|
173
|
+
cycles = []
|
174
|
+
back = Proc.new { |e|
|
175
|
+
cycles << e
|
176
|
+
go = false
|
177
|
+
}
|
178
|
+
push = Proc.new { |v| result.unshift(v) if go}
|
179
|
+
start ||= vertices[0]
|
180
|
+
dfs({:exit_vertex => push, :back_edge => back, :start => start})
|
181
|
+
if block_given?
|
182
|
+
result.each {|v| yield(v) }
|
183
|
+
end
|
184
|
+
|
185
|
+
if cycles.length > 0
|
186
|
+
msg = "Found cycles in the following relationships:"
|
187
|
+
cycles.each { |edge| msg += " %s => %s" % [edge.source, edge.target] }
|
188
|
+
raise Puppet::Error, msg
|
189
|
+
end
|
190
|
+
return result
|
191
|
+
end
|
192
|
+
|
188
193
|
# A different way of walking a tree, and a much faster way than the
|
189
194
|
# one that comes with GRATR.
|
190
195
|
def tree_from_vertex2(start, direction = :out)
|
@@ -205,4 +210,4 @@ class Puppet::PGraph < GRATR::Digraph
|
|
205
210
|
end
|
206
211
|
end
|
207
212
|
|
208
|
-
# $Id: pgraph.rb
|
213
|
+
# $Id: pgraph.rb 2521 2007-05-17 20:57:24Z luke $
|