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
data/lib/puppet/util.rb
CHANGED
|
@@ -295,72 +295,57 @@ module Util
|
|
|
295
295
|
@@os ||= Facter.value(:operatingsystem)
|
|
296
296
|
output = nil
|
|
297
297
|
child_pid, child_status = nil
|
|
298
|
+
# There are problems with read blocking with badly behaved children
|
|
299
|
+
# read.partialread doesn't seem to capture either stdout or stderr
|
|
300
|
+
# We hack around this using a temporary file
|
|
301
|
+
|
|
298
302
|
# The idea here is to avoid IO#read whenever possible.
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
$stderr.reopen("/dev/null")
|
|
310
|
-
if arguments[:gid]
|
|
311
|
-
Process.egid = arguments[:gid]
|
|
312
|
-
Process.gid = arguments[:gid] unless @@os == "Darwin"
|
|
313
|
-
end
|
|
314
|
-
if arguments[:uid]
|
|
315
|
-
Process.euid = arguments[:uid]
|
|
316
|
-
Process.uid = arguments[:uid] unless @@os == "Darwin"
|
|
317
|
-
end
|
|
318
|
-
if command.is_a?(Array)
|
|
319
|
-
Kernel.exec(*command)
|
|
320
|
-
else
|
|
321
|
-
Kernel.exec(command)
|
|
322
|
-
end
|
|
323
|
-
rescue => detail
|
|
324
|
-
puts detail.to_s
|
|
325
|
-
exit!(1)
|
|
326
|
-
end # begin; rescue
|
|
327
|
-
end # if child_pid; else
|
|
303
|
+
output_file="/dev/null"
|
|
304
|
+
if ! arguments[:squelch]
|
|
305
|
+
require "tempfile"
|
|
306
|
+
output_file = Tempfile.new("puppet")
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
child_pid = Kernel.fork
|
|
310
|
+
if child_pid
|
|
311
|
+
# Parent process executes this
|
|
312
|
+
child_status = Process.waitpid2(child_pid)[1]
|
|
328
313
|
else
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
314
|
+
# Child process executes this
|
|
315
|
+
begin
|
|
316
|
+
$stdin.reopen("/dev/null")
|
|
317
|
+
$stdout.reopen(output_file)
|
|
318
|
+
$stderr.reopen(output_file)
|
|
319
|
+
if arguments[:gid]
|
|
320
|
+
Process.egid = arguments[:gid]
|
|
321
|
+
Process.gid = arguments[:gid] unless @@os == "Darwin"
|
|
322
|
+
end
|
|
323
|
+
if arguments[:uid]
|
|
324
|
+
Process.euid = arguments[:uid]
|
|
325
|
+
Process.uid = arguments[:uid] unless @@os == "Darwin"
|
|
326
|
+
end
|
|
327
|
+
ENV['LANG'] = ENV['LC_ALL'] = ENV['LC_MESSAGES'] = ENV['LANGUAGE'] = 'C'
|
|
328
|
+
if command.is_a?(Array)
|
|
329
|
+
Kernel.exec(*command)
|
|
333
330
|
else
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
Kernel.exec(*command)
|
|
349
|
-
else
|
|
350
|
-
Kernel.exec(command)
|
|
351
|
-
end
|
|
352
|
-
rescue => detail
|
|
353
|
-
puts detail.to_s
|
|
354
|
-
exit!(1)
|
|
355
|
-
end # begin; rescue
|
|
356
|
-
end # if f; else
|
|
357
|
-
end # IO.popen do |f|
|
|
358
|
-
child_status = $?
|
|
359
|
-
end # if arguments[:squelch]; else
|
|
331
|
+
Kernel.exec(command)
|
|
332
|
+
end
|
|
333
|
+
rescue => detail
|
|
334
|
+
puts detail.to_s
|
|
335
|
+
exit!(1)
|
|
336
|
+
end # begin; rescue
|
|
337
|
+
end # if child_pid
|
|
338
|
+
|
|
339
|
+
# read output in if required
|
|
340
|
+
if ! arguments[:squelch]
|
|
341
|
+
output = output_file.open.read
|
|
342
|
+
output_file.close
|
|
343
|
+
output_file.delete
|
|
344
|
+
end
|
|
360
345
|
|
|
361
346
|
if arguments[:failonfail]
|
|
362
347
|
unless child_status == 0
|
|
363
|
-
raise ExecutionFailure, "Execution of '%s' returned %s: %s" % [str, child_status
|
|
348
|
+
raise ExecutionFailure, "Execution of '%s' returned %s: %s" % [str, child_status, output]
|
|
364
349
|
end
|
|
365
350
|
end
|
|
366
351
|
|
|
@@ -451,4 +436,4 @@ require 'puppet/util/logging'
|
|
|
451
436
|
require 'puppet/util/package'
|
|
452
437
|
require 'puppet/util/warnings'
|
|
453
438
|
|
|
454
|
-
# $Id: util.rb
|
|
439
|
+
# $Id: util.rb 2605 2007-06-18 18:13:23Z luke $
|
data/lib/puppet/util/autoload.rb
CHANGED
|
@@ -18,14 +18,11 @@ class Puppet::Util::Autoload
|
|
|
18
18
|
|
|
19
19
|
Puppet::Util.proxy self, :loaded, :clear
|
|
20
20
|
|
|
21
|
-
def handle_libdir
|
|
22
|
-
dir = Puppet[:libdir]
|
|
23
|
-
|
|
24
|
-
$: << dir unless $:.include?(dir)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
21
|
def initialize(obj, path, options = {})
|
|
28
22
|
@path = path.to_s
|
|
23
|
+
if @path !~ /^\w/
|
|
24
|
+
raise ArgumentError, "Autoload paths cannot be fully qualified"
|
|
25
|
+
end
|
|
29
26
|
@object = obj
|
|
30
27
|
|
|
31
28
|
self.class[obj] = self
|
|
@@ -46,62 +43,77 @@ class Puppet::Util::Autoload
|
|
|
46
43
|
@loaded = {}
|
|
47
44
|
end
|
|
48
45
|
|
|
46
|
+
# Load a single plugin by name.
|
|
49
47
|
def load(name)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
path = name.to_s + ".rb"
|
|
49
|
+
|
|
50
|
+
eachdir do |dir|
|
|
51
|
+
file = File.join(dir, path)
|
|
52
|
+
next unless FileTest.exists?(file)
|
|
53
|
+
begin
|
|
54
|
+
Kernel.load file, @wrap
|
|
55
|
+
name = symbolize(name)
|
|
56
|
+
@loaded[name] = true
|
|
57
|
+
return true
|
|
58
|
+
rescue LoadError => detail
|
|
59
|
+
# I have no idea what's going on here, but different versions
|
|
60
|
+
# of ruby are raising different errors on missing files.
|
|
61
|
+
unless detail.to_s =~ /^no such file/i
|
|
62
|
+
warn "Could not autoload %s: %s" % [name, detail]
|
|
63
|
+
if Puppet[:trace]
|
|
64
|
+
puts detail.backtrace
|
|
65
|
+
end
|
|
66
66
|
end
|
|
67
|
+
return false
|
|
67
68
|
end
|
|
68
|
-
return false
|
|
69
69
|
end
|
|
70
|
+
return false
|
|
70
71
|
end
|
|
71
72
|
|
|
73
|
+
# Indicate whether the specfied plugin has been loaded.
|
|
72
74
|
def loaded?(name)
|
|
73
|
-
|
|
74
|
-
@loaded[name]
|
|
75
|
+
@loaded[symbolize(name)]
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def loadall
|
|
78
|
-
handle_libdir()
|
|
79
79
|
# Load every instance of everything we can find.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if Puppet[:trace]
|
|
97
|
-
puts detail.backtrace
|
|
98
|
-
end
|
|
99
|
-
warn "Could not autoload %s: %s" % [file.inspect, detail]
|
|
80
|
+
eachdir do |dir|
|
|
81
|
+
Dir.glob("#{dir}/*.rb").each do |file|
|
|
82
|
+
# Load here, rather than require, so that facts
|
|
83
|
+
# can be reloaded. This has some short-comings, I
|
|
84
|
+
# believe, but it works as long as real classes
|
|
85
|
+
# aren't used.
|
|
86
|
+
name = File.basename(file).sub(".rb", '').intern
|
|
87
|
+
next if @loaded.include? name
|
|
88
|
+
next if $".include?(File.join(@path, name.to_s + ".rb"))
|
|
89
|
+
filepath = File.join(@path, name.to_s + ".rb")
|
|
90
|
+
begin
|
|
91
|
+
Kernel.require filepath
|
|
92
|
+
@loaded[name] = true
|
|
93
|
+
rescue => detail
|
|
94
|
+
if Puppet[:trace]
|
|
95
|
+
puts detail.backtrace
|
|
100
96
|
end
|
|
97
|
+
warn "Could not autoload %s: %s" % [file.inspect, detail]
|
|
101
98
|
end
|
|
102
99
|
end
|
|
103
100
|
end
|
|
104
101
|
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
# Yield each subdir in turn.
|
|
106
|
+
def eachdir
|
|
107
|
+
searchpath.each do |dir|
|
|
108
|
+
subdir = File.join(dir, @path)
|
|
109
|
+
yield subdir if FileTest.directory?(subdir)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# The list of directories to search through for loadable plugins.
|
|
114
|
+
def searchpath
|
|
115
|
+
[Puppet[:libdir], $:].flatten
|
|
116
|
+
end
|
|
105
117
|
end
|
|
106
118
|
|
|
107
|
-
# $Id: autoload.rb
|
|
119
|
+
# $Id: autoload.rb 2518 2007-05-16 00:00:47Z luke $
|
data/lib/puppet/util/config.rb
CHANGED
|
@@ -167,7 +167,7 @@ class Puppet::Util::Config
|
|
|
167
167
|
|
|
168
168
|
# Handle a command-line argument.
|
|
169
169
|
def handlearg(opt, value = nil)
|
|
170
|
-
value =
|
|
170
|
+
value = munge_value(value) if value
|
|
171
171
|
str = opt.sub(/^--/,'')
|
|
172
172
|
bool = true
|
|
173
173
|
newstr = str.sub(/^no-/, '')
|
|
@@ -221,18 +221,6 @@ class Puppet::Util::Config
|
|
|
221
221
|
end
|
|
222
222
|
end
|
|
223
223
|
|
|
224
|
-
# Convert arguments appropriately.
|
|
225
|
-
def mungearg(value)
|
|
226
|
-
# Handle different data types correctly
|
|
227
|
-
return case value
|
|
228
|
-
when /^false$/i: false
|
|
229
|
-
when /^true$/i: true
|
|
230
|
-
when /^\d+$/i: Integer(value)
|
|
231
|
-
else
|
|
232
|
-
value.gsub(/^["']|["']$/,'').sub(/\s+$/, '')
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
|
|
236
224
|
# Return all of the parameters associated with a given section.
|
|
237
225
|
def params(section)
|
|
238
226
|
section = section.intern if section.is_a? String
|
|
@@ -243,8 +231,24 @@ class Puppet::Util::Config
|
|
|
243
231
|
}
|
|
244
232
|
end
|
|
245
233
|
|
|
246
|
-
# Parse
|
|
234
|
+
# Parse the configuration file.
|
|
247
235
|
def parse(file)
|
|
236
|
+
configmap = parse_file(file)
|
|
237
|
+
|
|
238
|
+
# We know we want the 'main' section
|
|
239
|
+
if main = configmap[:main]
|
|
240
|
+
set_parameter_hash(main)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Otherwise, we only want our named section
|
|
244
|
+
if @config.include?(:name) and named = configmap[symbolize(self[:name])]
|
|
245
|
+
set_parameter_hash(named)
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# Parse the configuration file. As of May 2007, this is a backward-compatibility method and
|
|
250
|
+
# will be deprecated soon.
|
|
251
|
+
def old_parse(file)
|
|
248
252
|
text = nil
|
|
249
253
|
|
|
250
254
|
if file.is_a? Puppet::Util::LoadedFile
|
|
@@ -253,8 +257,8 @@ class Puppet::Util::Config
|
|
|
253
257
|
@file = Puppet::Util::LoadedFile.new(file)
|
|
254
258
|
end
|
|
255
259
|
|
|
256
|
-
#
|
|
257
|
-
settimer()
|
|
260
|
+
# Don't create a timer for the old style parsing.
|
|
261
|
+
# settimer()
|
|
258
262
|
|
|
259
263
|
begin
|
|
260
264
|
text = File.read(@file.file)
|
|
@@ -284,7 +288,7 @@ class Puppet::Util::Config
|
|
|
284
288
|
if var == :mode
|
|
285
289
|
value = $2
|
|
286
290
|
else
|
|
287
|
-
value =
|
|
291
|
+
value = munge_value($2)
|
|
288
292
|
end
|
|
289
293
|
|
|
290
294
|
# Only warn if we don't know what this config var is. This
|
|
@@ -706,6 +710,144 @@ Generated on #{Time.now}.
|
|
|
706
710
|
end
|
|
707
711
|
end
|
|
708
712
|
|
|
713
|
+
private
|
|
714
|
+
|
|
715
|
+
# Extra extra setting information for files.
|
|
716
|
+
def extract_fileinfo(string)
|
|
717
|
+
paramregex = %r{(\w+)\s*=\s*([\w\d]+)}
|
|
718
|
+
result = {}
|
|
719
|
+
string.scan(/\{\s*([^}]+)\s*\}/) do
|
|
720
|
+
params = $1
|
|
721
|
+
params.split(/\s*,\s*/).each do |str|
|
|
722
|
+
if str =~ /^\s*(\w+)\s*=\s*([\w\w]+)\s*$/
|
|
723
|
+
param, value = $1.intern, $2
|
|
724
|
+
result[param] = value
|
|
725
|
+
unless [:owner, :mode, :group].include?(param)
|
|
726
|
+
raise Puppet::Error, "Invalid file option '%s'" % param
|
|
727
|
+
end
|
|
728
|
+
|
|
729
|
+
if param == :mode and value !~ /^\d+$/
|
|
730
|
+
raise Puppet::Error, "File modes must be numbers"
|
|
731
|
+
end
|
|
732
|
+
else
|
|
733
|
+
raise Puppet::Error, "Could not parse '%s'" % string
|
|
734
|
+
end
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
return result
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
return nil
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
# Convert arguments into booleans, integers, or whatever.
|
|
744
|
+
def munge_value(value)
|
|
745
|
+
# Handle different data types correctly
|
|
746
|
+
return case value
|
|
747
|
+
when /^false$/i: false
|
|
748
|
+
when /^true$/i: true
|
|
749
|
+
when /^\d+$/i: Integer(value)
|
|
750
|
+
else
|
|
751
|
+
value.gsub(/^["']|["']$/,'').sub(/\s+$/, '')
|
|
752
|
+
end
|
|
753
|
+
end
|
|
754
|
+
|
|
755
|
+
# This is an abstract method that just turns a file in to a hash of hashes.
|
|
756
|
+
# We mostly need this for backward compatibility -- as of May 2007 we need to
|
|
757
|
+
# support parsing old files with any section, or new files with just two
|
|
758
|
+
# valid sections.
|
|
759
|
+
def parse_file(file)
|
|
760
|
+
text = nil
|
|
761
|
+
|
|
762
|
+
if file.is_a? Puppet::Util::LoadedFile
|
|
763
|
+
@file = file
|
|
764
|
+
else
|
|
765
|
+
@file = Puppet::Util::LoadedFile.new(file)
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
# Create a timer so that this file will get checked automatically
|
|
769
|
+
# and reparsed if necessary.
|
|
770
|
+
settimer()
|
|
771
|
+
|
|
772
|
+
begin
|
|
773
|
+
text = File.read(@file.file)
|
|
774
|
+
rescue Errno::ENOENT
|
|
775
|
+
raise Puppet::Error, "No such file %s" % file
|
|
776
|
+
rescue Errno::EACCES
|
|
777
|
+
raise Puppet::Error, "Permission denied to file %s" % file
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
result = Hash.new { |names, name|
|
|
781
|
+
names[name] = {}
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
count = 0
|
|
785
|
+
|
|
786
|
+
# Default to 'main' for the section.
|
|
787
|
+
section = :main
|
|
788
|
+
result[section][:_meta] = {}
|
|
789
|
+
text.split(/\n/).each { |line|
|
|
790
|
+
count += 1
|
|
791
|
+
case line
|
|
792
|
+
when /^\[(\w+)\]$/:
|
|
793
|
+
section = $1.intern # Section names
|
|
794
|
+
# Add a meta section
|
|
795
|
+
result[section][:_meta] ||= {}
|
|
796
|
+
when /^\s*#/: next # Skip comments
|
|
797
|
+
when /^\s*$/: next # Skip blanks
|
|
798
|
+
when /^\s*(\w+)\s*=\s*(.+)$/: # settings
|
|
799
|
+
var = $1.intern
|
|
800
|
+
|
|
801
|
+
# We don't want to munge modes, because they're specified in octal, so we'll
|
|
802
|
+
# just leave them as a String, since Puppet handles that case correctly.
|
|
803
|
+
if var == :mode
|
|
804
|
+
value = $2
|
|
805
|
+
else
|
|
806
|
+
value = munge_value($2)
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
# Check to see if this is a file argument and it has extra options
|
|
810
|
+
begin
|
|
811
|
+
if value.is_a?(String) and options = extract_fileinfo(value)
|
|
812
|
+
result[section][:_meta][var] = options
|
|
813
|
+
end
|
|
814
|
+
result[section][var] = value
|
|
815
|
+
rescue Puppet::Error => detail
|
|
816
|
+
detail.file = file
|
|
817
|
+
detail.line = line
|
|
818
|
+
raise
|
|
819
|
+
end
|
|
820
|
+
else
|
|
821
|
+
error = Puppet::Error.new("Could not match line %s" % line)
|
|
822
|
+
error.file = file
|
|
823
|
+
error.line = line
|
|
824
|
+
raise error
|
|
825
|
+
end
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
return result
|
|
829
|
+
end
|
|
830
|
+
|
|
831
|
+
# Take all members of a hash and assign their values appropriately.
|
|
832
|
+
def set_parameter_hash(params)
|
|
833
|
+
params.each do |param, value|
|
|
834
|
+
next if param == :_meta
|
|
835
|
+
unless @config.include?(param)
|
|
836
|
+
Puppet.warning "Discarded unknown configuration parameter %s" % param
|
|
837
|
+
next
|
|
838
|
+
end
|
|
839
|
+
self[param] = value
|
|
840
|
+
end
|
|
841
|
+
|
|
842
|
+
if meta = params[:_meta]
|
|
843
|
+
meta.each do |var, values|
|
|
844
|
+
values.each do |param, value|
|
|
845
|
+
@config[var].send(param.to_s + "=", value)
|
|
846
|
+
end
|
|
847
|
+
end
|
|
848
|
+
end
|
|
849
|
+
end
|
|
850
|
+
|
|
709
851
|
# The base element type.
|
|
710
852
|
class CElement
|
|
711
853
|
attr_accessor :name, :section, :default, :parent, :setbycli
|
|
@@ -964,4 +1106,4 @@ Generated on #{Time.now}.
|
|
|
964
1106
|
end
|
|
965
1107
|
end
|
|
966
1108
|
|
|
967
|
-
# $Id: config.rb
|
|
1109
|
+
# $Id: config.rb 2464 2007-05-06 05:42:53Z luke $
|