puppet 0.24.5 → 0.24.6
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 +206 -0
- data/Rakefile +53 -0
- data/bin/filebucket +0 -0
- data/bin/puppet +32 -11
- data/bin/puppetca +1 -0
- data/bin/puppetd +0 -0
- data/bin/puppetdoc +0 -0
- data/bin/puppetmasterd +0 -0
- data/bin/puppetrun +16 -8
- data/bin/ralsh +0 -0
- data/conf/debian/rules +0 -0
- data/conf/gentoo/init.d/puppetmaster +0 -0
- data/conf/osx/PackageInfo.plist +36 -0
- data/conf/osx/createpackage.sh +167 -0
- data/conf/osx/preflight +12 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +34 -6
- data/conf/redhat/server.init +42 -7
- data/conf/redhat/server.sysconfig +22 -0
- data/conf/solaris/smf/svc-puppetd +0 -0
- data/conf/solaris/smf/svc-puppetmasterd +0 -0
- data/examples/etc/init.d/sleeper +0 -0
- data/examples/mac_dscl.pp +0 -0
- data/examples/mac_dscl_revert.pp +0 -0
- data/examples/mac_netinfo.pp +0 -0
- data/examples/mac_pkgdmg.pp +0 -0
- data/ext/bin/sleeper +0 -0
- data/ext/module_puppet +0 -0
- data/ext/nagios/check_puppet.rb +0 -0
- data/ext/passenger/README +63 -0
- data/ext/passenger/apache2.conf +29 -0
- data/ext/passenger/config.ru +40 -0
- data/ext/puppet-test +0 -0
- data/ext/puppetlast +6 -31
- data/ext/puppetstoredconfigclean.rb +87 -0
- data/install.rb +75 -20
- data/lib/puppet.rb +1 -1
- data/lib/puppet/daemon.rb +0 -0
- data/lib/puppet/defaults.rb +3 -7
- data/lib/puppet/external/base64.rb +0 -0
- data/lib/puppet/external/nagios.rb +0 -0
- data/lib/puppet/external/nagios/base.rb +0 -0
- data/lib/puppet/file_serving/fileset.rb +2 -2
- data/lib/puppet/file_serving/metadata.rb +3 -3
- data/lib/puppet/indirector/facts/facter.rb +3 -2
- data/lib/puppet/indirector/yaml.rb +10 -1
- data/lib/puppet/module.rb +36 -12
- data/lib/puppet/network/authstore.rb +0 -0
- data/lib/puppet/network/client/master.rb +12 -11
- data/lib/puppet/network/handler/filebucket.rb +0 -0
- data/lib/puppet/network/handler/fileserver.rb +38 -46
- data/lib/puppet/network/handler/master.rb +1 -1
- data/lib/puppet/network/handler/report.rb +0 -0
- data/lib/puppet/network/handler/resource.rb +0 -0
- data/lib/puppet/network/handler/runner.rb +0 -0
- data/lib/puppet/network/http_server/rack.rb +148 -0
- data/lib/puppet/network/rights.rb +0 -0
- data/lib/puppet/network/xmlrpc/client.rb +5 -5
- data/lib/puppet/node.rb +5 -9
- data/lib/puppet/node/environment.rb +1 -17
- data/lib/puppet/node/facts.rb +0 -0
- data/lib/puppet/parameter.rb +1 -28
- data/lib/puppet/parser/ast.rb +6 -0
- data/lib/puppet/parser/ast/arithmetic_operator.rb +41 -0
- data/lib/puppet/parser/ast/boolean_operator.rb +48 -0
- data/lib/puppet/parser/ast/collexpr.rb +6 -1
- data/lib/puppet/parser/ast/comparison_operator.rb +37 -0
- data/lib/puppet/parser/ast/minus.rb +23 -0
- data/lib/puppet/parser/ast/nop.rb +11 -0
- data/lib/puppet/parser/ast/not.rb +19 -0
- data/lib/puppet/parser/ast/resource_override.rb +23 -16
- data/lib/puppet/parser/ast/resource_reference.rb +10 -6
- data/lib/puppet/parser/ast/vardef.rb +2 -2
- data/lib/puppet/parser/collector.rb +2 -1
- data/lib/puppet/parser/functions.rb +7 -217
- data/lib/puppet/parser/functions/defined.rb +27 -0
- data/lib/puppet/parser/functions/fail.rb +4 -0
- data/lib/puppet/parser/functions/file.rb +21 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +15 -0
- data/lib/puppet/parser/functions/generate.rb +35 -0
- data/lib/puppet/parser/functions/include.rb +26 -0
- data/lib/puppet/parser/functions/realize.rb +14 -0
- data/lib/puppet/parser/functions/search.rb +7 -0
- data/lib/puppet/parser/functions/sha1.rb +6 -0
- data/lib/puppet/parser/functions/tag.rb +6 -0
- data/lib/puppet/parser/functions/tagged.rb +18 -0
- data/lib/puppet/parser/functions/template.rb +22 -0
- data/lib/puppet/parser/lexer.rb +15 -5
- data/lib/puppet/parser/parser.rb +1073 -715
- data/lib/puppet/parser/parser_support.rb +18 -13
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/resource/param.rb +10 -2
- data/lib/puppet/parser/scope.rb +63 -5
- data/lib/puppet/parser/templatewrapper.rb +61 -15
- data/lib/puppet/property.rb +7 -1
- data/lib/puppet/property/keyvalue.rb +96 -0
- data/lib/puppet/property/list.rb +78 -0
- data/lib/puppet/provider/confine.rb +1 -1
- data/lib/puppet/provider/confine/variable.rb +10 -1
- data/lib/puppet/provider/cron/crontab.rb +0 -0
- data/lib/puppet/provider/mailalias/aliases.rb +0 -0
- data/lib/puppet/provider/maillist/mailman.rb +0 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -0
- data/lib/puppet/provider/nameservice.rb +24 -39
- data/lib/puppet/provider/nameservice/directoryservice.rb +12 -3
- data/lib/puppet/provider/nameservice/netinfo.rb +12 -2
- data/lib/puppet/provider/nameservice/objectadd.rb +1 -10
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apple.rb +0 -0
- data/lib/puppet/provider/package/apt.rb +14 -21
- data/lib/puppet/provider/package/aptitude.rb +0 -0
- data/lib/puppet/provider/package/blastwave.rb +2 -0
- data/lib/puppet/provider/package/darwinport.rb +0 -0
- data/lib/puppet/provider/package/dpkg.rb +33 -51
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/freebsd.rb +0 -0
- data/lib/puppet/provider/package/gem.rb +0 -0
- data/lib/puppet/provider/package/hpux.rb +46 -0
- data/lib/puppet/provider/package/openbsd.rb +0 -0
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +3 -1
- data/lib/puppet/provider/package/ports.rb +3 -3
- data/lib/puppet/provider/package/rpm.rb +8 -1
- data/lib/puppet/provider/package/rug.rb +2 -2
- data/lib/puppet/provider/package/sun.rb +2 -0
- data/lib/puppet/provider/package/sunfreeware.rb +3 -0
- data/lib/puppet/provider/package/yum.rb +24 -17
- data/lib/puppet/provider/package/yumhelper.py +92 -11
- data/lib/puppet/provider/parsedfile.rb +0 -0
- data/lib/puppet/provider/port/parsed.rb +0 -0
- data/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
- data/lib/puppet/provider/selmodule/semodule.rb +143 -0
- data/lib/puppet/provider/service/base.rb +0 -0
- data/lib/puppet/provider/service/daemontools.rb +154 -0
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +2 -0
- data/lib/puppet/provider/service/gentoo.rb +2 -0
- data/lib/puppet/provider/service/init.rb +0 -0
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/runit.rb +93 -0
- data/lib/puppet/provider/service/smf.rb +2 -0
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +7 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -0
- data/lib/puppet/provider/user/hpux.rb +30 -0
- data/lib/puppet/provider/user/user_role_add.rb +156 -0
- data/lib/puppet/provider/user/useradd.rb +23 -14
- data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +17 -0
- data/lib/puppet/rails/database/schema.rb +0 -8
- data/lib/puppet/rails/resource.rb +6 -6
- data/lib/puppet/reference/configuration.rb +0 -7
- data/lib/puppet/reports.rb +0 -0
- data/lib/puppet/reports/rrdgraph.rb +3 -2
- data/lib/puppet/sslcertificates.rb +0 -0
- data/lib/puppet/sslcertificates/inventory.rb +3 -2
- data/lib/puppet/sslcertificates/support.rb +3 -0
- data/lib/puppet/transaction/report.rb +1 -7
- data/lib/puppet/transportable.rb +10 -7
- data/lib/puppet/type.rb +2110 -14
- data/lib/puppet/type/cron.rb +0 -0
- data/lib/puppet/type/exec.rb +0 -0
- data/lib/puppet/type/file.rb +12 -2
- data/lib/puppet/type/file/checksum.rb +4 -0
- data/lib/puppet/type/file/content.rb +0 -0
- data/lib/puppet/type/file/ensure.rb +0 -0
- data/lib/puppet/type/file/group.rb +30 -43
- data/lib/puppet/type/file/mode.rb +0 -0
- data/lib/puppet/type/file/owner.rb +0 -0
- data/lib/puppet/type/file/selcontext.rb +104 -0
- data/lib/puppet/type/file/source.rb +0 -0
- data/lib/puppet/type/file/type.rb +0 -0
- data/lib/puppet/type/filebucket.rb +0 -0
- data/lib/puppet/type/group.rb +0 -8
- data/lib/puppet/type/host.rb +0 -0
- data/lib/puppet/type/mailalias.rb +0 -0
- data/lib/puppet/type/maillist.rb +0 -0
- data/lib/puppet/type/mount.rb +0 -0
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/port.rb +0 -0
- data/lib/puppet/type/schedule.rb +0 -0
- data/lib/puppet/type/selboolean.rb +31 -0
- data/lib/puppet/type/selmodule.rb +54 -0
- data/lib/puppet/type/ssh_authorized_key.rb +3 -3
- data/lib/puppet/type/sshkey.rb +0 -0
- data/lib/puppet/type/tidy.rb +0 -0
- data/lib/puppet/type/user.rb +153 -137
- data/lib/puppet/type/yumrepo.rb +18 -2
- data/lib/puppet/type/zone.rb +5 -1
- data/lib/puppet/util.rb +7 -7
- data/lib/puppet/util/filetype.rb +7 -0
- data/lib/puppet/util/instance_loader.rb +0 -0
- data/lib/puppet/util/ldap/connection.rb +11 -1
- data/lib/puppet/util/ldap/manager.rb +1 -1
- data/lib/puppet/util/loadedfile.rb +0 -0
- data/lib/puppet/util/log.rb +42 -43
- data/lib/puppet/util/metric.rb +23 -9
- data/lib/puppet/util/posix.rb +69 -18
- data/lib/puppet/util/selinux.rb +139 -0
- data/lib/puppet/util/settings.rb +5 -7
- data/lib/puppet/util/user_attr.rb +21 -0
- data/test/certmgr/ca.rb +0 -0
- data/test/certmgr/certmgr.rb +0 -0
- data/test/certmgr/inventory.rb +0 -0
- data/test/certmgr/support.rb +0 -0
- data/test/data/providers/ssh_authorized_key/parsed/authorized_keys1 +3 -0
- data/test/data/snippets/append.pp +11 -0
- data/test/data/snippets/arithmetic_expression.pp +8 -0
- data/test/data/snippets/arraytrailingcomma.pp +3 -0
- data/test/data/snippets/emptyifelse.pp +9 -0
- data/test/data/snippets/funccomma.pp +5 -0
- data/test/data/snippets/ifexpression.rb +6 -0
- data/test/data/snippets/subclass_name_duplication.pp +0 -0
- data/test/executables/filebucket.rb +0 -0
- data/test/executables/puppetbin.rb +0 -0
- data/test/executables/puppetca.rb +0 -0
- data/test/executables/puppetd.rb +0 -0
- data/test/executables/puppetmasterd.rb +0 -0
- data/test/executables/puppetmodule.rb +0 -0
- data/test/language/ast.rb +0 -0
- data/test/language/ast/casestatement.rb +0 -0
- data/test/language/ast/resource.rb +0 -0
- data/test/language/ast/resource_reference.rb +0 -28
- data/test/language/ast/selector.rb +0 -0
- data/test/language/ast/variable.rb +0 -0
- data/test/language/functions.rb +91 -12
- data/test/language/parser.rb +21 -0
- data/test/language/resource.rb +0 -0
- data/test/language/scope.rb +28 -0
- data/test/language/snippets.rb +14 -0
- data/test/language/transportable.rb +0 -0
- data/test/lib/puppettest.rb +0 -0
- data/test/lib/puppettest/reporttesting.rb +0 -2
- data/test/lib/puppettest/runnable_test.rb +2 -0
- data/test/lib/puppettest/support/resources.rb +0 -0
- data/test/network/authconfig.rb +0 -0
- data/test/network/authorization.rb +0 -0
- data/test/network/authstore.rb +0 -0
- data/test/network/client/ca.rb +0 -0
- data/test/network/client/client.rb +0 -0
- data/test/network/client/dipper.rb +0 -0
- data/test/network/client/master.rb +2 -6
- data/test/network/client/resource.rb +0 -0
- data/test/network/client_request.rb +0 -0
- data/test/network/daemon.rb +0 -0
- data/test/network/handler/bucket.rb +0 -0
- data/test/network/handler/ca.rb +0 -0
- data/test/network/handler/fileserver.rb +8 -0
- data/test/network/handler/handler.rb +0 -0
- data/test/network/handler/master.rb +3 -1
- data/test/network/handler/report.rb +0 -0
- data/test/network/handler/resource.rb +0 -0
- data/test/network/handler/runner.rb +0 -0
- data/test/network/rights.rb +0 -0
- data/test/network/server/mongrel_test.rb +0 -0
- data/test/network/server/webrick.rb +0 -0
- data/test/network/xmlrpc/client.rb +0 -0
- data/test/network/xmlrpc/processor.rb +0 -0
- data/test/network/xmlrpc/server.rb +0 -0
- data/test/network/xmlrpc/webrick_servlet.rb +0 -0
- data/test/other/dsl.rb +0 -0
- data/test/other/events.rb +0 -0
- data/test/other/overrides.rb +0 -0
- data/test/other/provider.rb +0 -0
- data/test/other/puppet.rb +0 -0
- data/test/other/relationships.rb +0 -0
- data/test/other/report.rb +2 -4
- data/test/other/transactions.rb +1 -1
- data/test/puppet/conffiles.rb +0 -0
- data/test/puppet/defaults.rb +0 -0
- data/test/puppet/errortest.rb +0 -0
- data/test/puppet/tc_suidmanager.rb +0 -0
- data/test/rails/ast.rb +0 -0
- data/test/rails/configuration.rb +0 -0
- data/test/rails/host.rb +0 -0
- data/test/rails/rails.rb +0 -0
- data/test/rails/railsparameter.rb +0 -0
- data/test/rails/railsresource.rb +0 -0
- data/test/ral/manager/attributes.rb +0 -0
- data/test/ral/manager/instances.rb +0 -0
- data/test/ral/manager/manager.rb +0 -0
- data/test/ral/manager/provider.rb +0 -0
- data/test/ral/manager/type.rb +0 -0
- data/test/ral/providers/cron/crontab.rb +0 -0
- data/test/ral/providers/group.rb +14 -13
- data/test/ral/providers/host/netinfo.rb +0 -0
- data/test/ral/providers/host/parsed.rb +0 -0
- data/test/ral/providers/mailalias/aliases.rb +0 -0
- data/test/ral/providers/mount/netinfo.rb +0 -0
- data/test/ral/providers/nameservice.rb +0 -0
- data/test/ral/providers/package.rb +0 -31
- data/test/ral/providers/package/aptitude.rb +1 -2
- data/test/ral/providers/package/aptrpm.rb +2 -2
- data/test/ral/providers/parsedfile.rb +0 -0
- data/test/ral/providers/port/parsed.rb +0 -0
- data/test/ral/providers/provider.rb +0 -0
- data/test/ral/providers/service/base.rb +0 -0
- data/test/ral/providers/service/debian.rb +0 -0
- data/test/ral/providers/sshkey/parsed.rb +0 -0
- data/test/ral/providers/user.rb +8 -8
- data/test/ral/providers/user/useradd.rb +0 -0
- data/test/ral/type/basic.rb +0 -0
- data/test/ral/type/cron.rb +0 -0
- data/test/ral/type/exec.rb +0 -0
- data/test/ral/type/file.rb +0 -0
- data/test/ral/type/file/target.rb +0 -0
- data/test/ral/type/filebucket.rb +0 -0
- data/test/ral/type/fileignoresource.rb +0 -0
- data/test/ral/type/filesources.rb +1 -3
- data/test/ral/type/group.rb +0 -0
- data/test/ral/type/host.rb +0 -0
- data/test/ral/type/mailalias.rb +1 -2
- data/test/ral/type/parameter.rb +0 -0
- data/test/ral/type/port.rb +0 -0
- data/test/ral/type/property.rb +0 -0
- data/test/ral/type/resources.rb +0 -0
- data/test/ral/type/service.rb +0 -0
- data/test/ral/type/sshkey.rb +0 -0
- data/test/ral/type/tidy.rb +0 -0
- data/test/ral/type/user.rb +0 -50
- data/test/ral/type/yumrepo.rb +7 -1
- data/test/ral/type/zone.rb +0 -0
- data/test/test +0 -0
- data/test/util/autoload.rb +0 -0
- data/test/util/classgen.rb +0 -0
- data/test/util/execution.rb +0 -0
- data/test/util/features.rb +0 -0
- data/test/util/fileparsing.rb +0 -0
- data/test/util/filetype.rb +0 -0
- data/test/util/inifile.rb +0 -0
- data/test/util/instance_loader.rb +0 -0
- data/test/util/log.rb +0 -59
- data/test/util/metrics.rb +0 -0
- data/test/util/package.rb +0 -0
- data/test/util/pidlock.rb +0 -0
- data/test/util/settings.rb +0 -0
- data/test/util/storage.rb +0 -0
- data/test/util/subclass_loader.rb +0 -0
- data/test/util/utiltest.rb +0 -0
- metadata +54 -19
- data/lib/puppet/metatype/attributes.rb +0 -685
- data/lib/puppet/metatype/closure.rb +0 -49
- data/lib/puppet/metatype/container.rb +0 -50
- data/lib/puppet/metatype/evaluation.rb +0 -163
- data/lib/puppet/metatype/instances.rb +0 -305
- data/lib/puppet/metatype/metaparams.rb +0 -423
- data/lib/puppet/metatype/providers.rb +0 -247
- data/lib/puppet/metatype/relationships.rb +0 -115
- data/lib/puppet/metatype/schedules.rb +0 -33
- data/lib/puppet/metatype/tags.rb +0 -38
- data/lib/puppet/util/plist.rb +0 -23
- data/lib/puppet/util/plist/generator.rb +0 -225
- data/lib/puppet/util/plist/parser.rb +0 -226
- data/test/ral/providers/package/apt.rb +0 -169
- data/test/ral/providers/package/dpkg.rb +0 -64
- data/test/util/posixtest.rb +0 -169
data/lib/puppet/daemon.rb
CHANGED
|
File without changes
|
data/lib/puppet/defaults.rb
CHANGED
|
@@ -122,16 +122,11 @@ module Puppet
|
|
|
122
122
|
namespaces and methods. This can be used as a coarse-grained
|
|
123
123
|
authorization system for both ``puppetd`` and ``puppetmasterd``."
|
|
124
124
|
],
|
|
125
|
-
:environments => ["production,development", "The valid environments for Puppet clients.
|
|
126
|
-
This is more useful as a server-side setting than client, but any
|
|
127
|
-
environment chosen must be in this list. Values should be
|
|
128
|
-
separated by a comma."],
|
|
129
125
|
:environment => {:default => "production", :desc => "The environment Puppet is running in. For clients
|
|
130
126
|
(e.g., ``puppetd``) this determines the environment itself, which
|
|
131
127
|
is used to find modules and much more. For servers (i.e.,
|
|
132
128
|
``puppetmasterd``) this provides the default environment for nodes
|
|
133
|
-
we know nothing about."
|
|
134
|
-
:hook => proc { |value| raise(ArgumentError, "Invalid environment %s" % value) unless Puppet::Node::Environment.valid?(value) }
|
|
129
|
+
we know nothing about."
|
|
135
130
|
},
|
|
136
131
|
:diff_args => ["", "Which arguments to pass to the diff command when printing differences between files."],
|
|
137
132
|
:diff => ["diff", "Which diff command to use when printing differences between files."],
|
|
@@ -664,7 +659,8 @@ module Puppet
|
|
|
664
659
|
setdefaults(:parser,
|
|
665
660
|
:lexical => [false, "Whether to use lexical scoping (vs. dynamic)."],
|
|
666
661
|
:templatedir => ["$vardir/templates",
|
|
667
|
-
"Where Puppet looks for template files.
|
|
662
|
+
"Where Puppet looks for template files. Can be a list of colon-seperated
|
|
663
|
+
directories."
|
|
668
664
|
]
|
|
669
665
|
)
|
|
670
666
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -20,7 +20,7 @@ class Puppet::FileServing::Fileset
|
|
|
20
20
|
|
|
21
21
|
# Now strip off the leading path, so each file becomes relative, and remove
|
|
22
22
|
# any slashes that might end up at the beginning of the path.
|
|
23
|
-
result = files.collect { |file| file.sub(%r{^#{@path}/*}, '') }
|
|
23
|
+
result = files.collect { |file| file.sub(%r{^#{Regexp.escape(@path)}/*}, '') }
|
|
24
24
|
|
|
25
25
|
# And add the path itself.
|
|
26
26
|
result.unshift(".")
|
|
@@ -120,7 +120,7 @@ class Puppet::FileServing::Fileset
|
|
|
120
120
|
|
|
121
121
|
return result
|
|
122
122
|
end
|
|
123
|
-
|
|
123
|
+
public
|
|
124
124
|
# Stat a given file, using the links-appropriate method.
|
|
125
125
|
def stat(path)
|
|
126
126
|
unless defined?(@stat_method)
|
|
@@ -60,10 +60,10 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::FileBase
|
|
|
60
60
|
|
|
61
61
|
case stat.ftype
|
|
62
62
|
when "file":
|
|
63
|
-
@checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path)
|
|
63
|
+
@checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path).to_s
|
|
64
64
|
when "directory": # Always just timestamp the directory.
|
|
65
|
-
|
|
66
|
-
@checksum = ("{%s}" %
|
|
65
|
+
@checksum_type = "ctime"
|
|
66
|
+
@checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path).to_s
|
|
67
67
|
when "link":
|
|
68
68
|
@destination = File.readlink(real_path)
|
|
69
69
|
else
|
|
@@ -12,12 +12,13 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
|
|
|
12
12
|
Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
|
|
13
13
|
fqfile = ::File.join(dir, file)
|
|
14
14
|
begin
|
|
15
|
-
Puppet.info "Loading
|
|
15
|
+
Puppet.info "Loading %s %s" %
|
|
16
|
+
[type, ::File.basename(file.sub(".rb",''))]
|
|
16
17
|
Timeout::timeout(self.timeout) do
|
|
17
18
|
load fqfile
|
|
18
19
|
end
|
|
19
20
|
rescue => detail
|
|
20
|
-
Puppet.warning "Could not load
|
|
21
|
+
Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
|
|
21
22
|
end
|
|
22
23
|
end
|
|
23
24
|
end
|
|
@@ -34,11 +34,20 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# Get the yaml directory
|
|
38
|
+
def base
|
|
39
|
+
(Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
|
40
|
+
end
|
|
41
|
+
|
|
37
42
|
# Return the path to a given node's file.
|
|
38
43
|
def path(name)
|
|
39
|
-
base = (Puppet[:name] == "puppetmasterd") ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
|
40
44
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ".yaml")
|
|
41
45
|
end
|
|
46
|
+
|
|
47
|
+
# Do a glob on the yaml directory, loading each file found
|
|
48
|
+
def search(request)
|
|
49
|
+
Dir.glob(File.join(base, self.class.indirection_name.to_s, request.key)).collect { |f| YAML.load_file(f) }
|
|
50
|
+
end
|
|
42
51
|
|
|
43
52
|
private
|
|
44
53
|
|
data/lib/puppet/module.rb
CHANGED
|
@@ -19,6 +19,15 @@ class Puppet::Module
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Return an array of paths by splitting the +templatedir+ config
|
|
23
|
+
# parameter.
|
|
24
|
+
def self.templatepath(environment = nil)
|
|
25
|
+
dirs = Puppet.settings.value(:templatedir, environment).split(":")
|
|
26
|
+
dirs.select do |p|
|
|
27
|
+
p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
22
31
|
# Find and return the +module+ that +path+ belongs to. If +path+ is
|
|
23
32
|
# absolute, or if there is no module whose name is the first component
|
|
24
33
|
# of +path+, return +nil+
|
|
@@ -63,25 +72,39 @@ class Puppet::Module
|
|
|
63
72
|
return template
|
|
64
73
|
end
|
|
65
74
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
template_paths = templatepath(environment)
|
|
76
|
+
if template_paths
|
|
77
|
+
# If we can find the template in :templatedir, we return that.
|
|
78
|
+
td_file = template_paths.collect { |path|
|
|
79
|
+
File::join(path, template)
|
|
80
|
+
}.find { |f| File.exists?(f) }
|
|
81
|
+
|
|
82
|
+
return td_file unless td_file == nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
td_file = find_template_for_module(template, environment)
|
|
86
|
+
|
|
87
|
+
# check in the default template dir, if there is one
|
|
88
|
+
if td_file.nil?
|
|
89
|
+
raise Puppet::Error, "No valid template directory found, please check templatedir settings" if template_paths.nil?
|
|
90
|
+
td_file = File::join(template_paths.first, template)
|
|
91
|
+
end
|
|
92
|
+
td_file
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def self.find_template_for_module(template, environment = nil)
|
|
70
96
|
path, file = split_path(template)
|
|
71
97
|
|
|
72
98
|
# Because templates don't have an assumed template name, like manifests do,
|
|
73
99
|
# we treat templates with no name as being templates in the main template
|
|
74
100
|
# directory.
|
|
75
|
-
if file.nil?
|
|
76
|
-
mod = nil
|
|
77
|
-
else
|
|
101
|
+
if not file.nil?
|
|
78
102
|
mod = find(path, environment)
|
|
103
|
+
if mod
|
|
104
|
+
return mod.template(file)
|
|
105
|
+
end
|
|
79
106
|
end
|
|
80
|
-
|
|
81
|
-
return mod.template(file)
|
|
82
|
-
else
|
|
83
|
-
return td_file # Return this anyway, since we're going to fail.
|
|
84
|
-
end
|
|
107
|
+
nil
|
|
85
108
|
end
|
|
86
109
|
|
|
87
110
|
# Return a list of manifests (as absolute filenames) that match +pat+
|
|
@@ -144,4 +167,5 @@ class Puppet::Module
|
|
|
144
167
|
end
|
|
145
168
|
|
|
146
169
|
private :initialize
|
|
170
|
+
private_class_method :find_template_for_module
|
|
147
171
|
end
|
|
File without changes
|
|
@@ -199,6 +199,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
199
199
|
|
|
200
200
|
self.class.instance = self
|
|
201
201
|
@running = false
|
|
202
|
+
@splayed = false
|
|
202
203
|
end
|
|
203
204
|
|
|
204
205
|
# Mark that we should restart. The Puppet module checks whether we're running,
|
|
@@ -338,7 +339,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
338
339
|
if Puppet[:debug]
|
|
339
340
|
puts detail.backtrace
|
|
340
341
|
end
|
|
341
|
-
Puppet.err "Could not retrieve
|
|
342
|
+
Puppet.err "Could not retrieve %ss: %s" % [args[:name], detail]
|
|
342
343
|
end
|
|
343
344
|
|
|
344
345
|
# Now clean up after ourselves
|
|
@@ -389,12 +390,13 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
389
390
|
Dir.entries(dir).find_all { |e| e =~ /\.rb$/ }.each do |file|
|
|
390
391
|
fqfile = ::File.join(dir, file)
|
|
391
392
|
begin
|
|
392
|
-
Puppet.info "Loading
|
|
393
|
+
Puppet.info "Loading %s %s" %
|
|
394
|
+
[type, ::File.basename(file.sub(".rb",''))]
|
|
393
395
|
Timeout::timeout(self.timeout) do
|
|
394
396
|
load fqfile
|
|
395
397
|
end
|
|
396
398
|
rescue => detail
|
|
397
|
-
Puppet.warning "Could not load
|
|
399
|
+
Puppet.warning "Could not load %s %s: %s" % [type, fqfile, detail]
|
|
398
400
|
end
|
|
399
401
|
end
|
|
400
402
|
end
|
|
@@ -477,20 +479,19 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
|
|
|
477
479
|
@lockfile
|
|
478
480
|
end
|
|
479
481
|
|
|
482
|
+
def splayed?
|
|
483
|
+
@splayed
|
|
484
|
+
end
|
|
485
|
+
|
|
480
486
|
# Sleep when splay is enabled; else just return.
|
|
481
487
|
def splay
|
|
482
488
|
return unless Puppet[:splay]
|
|
489
|
+
return if splayed?
|
|
483
490
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
# Pick a splay time and then cache it.
|
|
487
|
-
unless time = Puppet::Util::Storage.cache(:configuration)[:splay_time]
|
|
488
|
-
time = rand(limit)
|
|
489
|
-
Puppet::Util::Storage.cache(:configuration)[:splay_time] = time
|
|
490
|
-
end
|
|
491
|
-
|
|
491
|
+
time = rand(Integer(Puppet[:splaylimit]))
|
|
492
492
|
Puppet.info "Sleeping for %s seconds (splay is enabled)" % time
|
|
493
493
|
sleep(time)
|
|
494
|
+
@splayed = true
|
|
494
495
|
end
|
|
495
496
|
|
|
496
497
|
private
|
|
File without changes
|
|
@@ -70,7 +70,9 @@ class Puppet::Network::Handler
|
|
|
70
70
|
mount.debug("Describing %s for %s" % [url, client]) if client
|
|
71
71
|
|
|
72
72
|
# use the mount to resolve the path for us.
|
|
73
|
-
|
|
73
|
+
return "" unless full_path = mount.file_path(path, client)
|
|
74
|
+
|
|
75
|
+
metadata = Puppet::FileServing::Metadata.new(url, :path => full_path, :links => links)
|
|
74
76
|
|
|
75
77
|
return "" unless metadata.exist?
|
|
76
78
|
|
|
@@ -651,55 +653,38 @@ class Puppet::Network::Handler
|
|
|
651
653
|
# and "bad batch".
|
|
652
654
|
#
|
|
653
655
|
def list(relpath, recurse, ignore, client = nil)
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
relpath = "/#{relpath}" if relpath[0] != ?/ #/
|
|
662
|
-
|
|
663
|
-
return unless FileTest.exists?(abspath)
|
|
664
|
-
|
|
665
|
-
desc = [relpath]
|
|
666
|
-
|
|
667
|
-
ftype = File.stat(abspath).ftype
|
|
668
|
-
|
|
669
|
-
desc << ftype
|
|
670
|
-
if recurse.is_a?(Integer)
|
|
671
|
-
recurse -= 1
|
|
656
|
+
abspath = file_path(relpath, client)
|
|
657
|
+
if FileTest.exists?(abspath)
|
|
658
|
+
if FileTest.directory?(abspath) and recurse
|
|
659
|
+
return reclist(abspath, recurse, ignore)
|
|
660
|
+
else
|
|
661
|
+
return [["/", File.stat(abspath).ftype]]
|
|
662
|
+
end
|
|
672
663
|
end
|
|
664
|
+
return nil
|
|
665
|
+
end
|
|
673
666
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
}
|
|
686
|
-
}
|
|
667
|
+
def reclist(abspath, recurse, ignore)
|
|
668
|
+
require 'puppet/file_serving'
|
|
669
|
+
require 'puppet/file_serving/fileset'
|
|
670
|
+
args = { :recurse => recurse, :links => :follow }
|
|
671
|
+
args[:ignore] = ignore if ignore
|
|
672
|
+
fs = Puppet::FileServing::Fileset.new(abspath, args)
|
|
673
|
+
ary = fs.files.collect do |file|
|
|
674
|
+
if file == "."
|
|
675
|
+
file = "/"
|
|
676
|
+
else
|
|
677
|
+
file = File.join("/", file )
|
|
687
678
|
end
|
|
679
|
+
stat = fs.stat(File.join(abspath, file))
|
|
680
|
+
next if stat.nil?
|
|
681
|
+
[ file, stat.ftype ]
|
|
688
682
|
end
|
|
689
683
|
|
|
690
684
|
return ary.compact
|
|
691
685
|
end
|
|
692
686
|
|
|
693
|
-
|
|
694
|
-
def handleignore(files, path, ignore_patterns)
|
|
695
|
-
ignore_patterns.each do |ignore|
|
|
696
|
-
files.delete_if do |entry|
|
|
697
|
-
File.fnmatch(ignore, entry, File::FNM_DOTMATCH)
|
|
698
|
-
end
|
|
699
|
-
end
|
|
700
|
-
return files
|
|
701
|
-
end
|
|
702
|
-
end
|
|
687
|
+
end
|
|
703
688
|
|
|
704
689
|
# A special mount class specifically for the plugins mount -- just
|
|
705
690
|
# has some magic to effectively do a union mount of the 'plugins'
|
|
@@ -727,7 +712,7 @@ class Puppet::Network::Handler
|
|
|
727
712
|
end
|
|
728
713
|
|
|
729
714
|
def file_path(relpath, client = nil)
|
|
730
|
-
mod = valid_modules.map { |m| mod_path_exists?(m, relpath, client) ? m : nil }.compact.first
|
|
715
|
+
return nil unless mod = valid_modules.map { |m| mod_path_exists?(m, relpath, client) ? m : nil }.compact.first
|
|
731
716
|
mod_file_path(mod, relpath, client)
|
|
732
717
|
end
|
|
733
718
|
|
|
@@ -735,9 +720,16 @@ class Puppet::Network::Handler
|
|
|
735
720
|
def list(relpath, recurse, ignore, client = nil)
|
|
736
721
|
result = []
|
|
737
722
|
valid_modules.each do |m|
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
723
|
+
modpath = mod_file_path(m, relpath, client)
|
|
724
|
+
if FileTest.exists?(modpath)
|
|
725
|
+
if FileTest.directory?(modpath) and recurse
|
|
726
|
+
ary = reclist(modpath, recurse, ignore)
|
|
727
|
+
ary = [] if ary.nil?
|
|
728
|
+
result += ary
|
|
729
|
+
else
|
|
730
|
+
result += [["/", File.stat(modpath).ftype]]
|
|
731
|
+
end
|
|
732
|
+
end
|
|
741
733
|
end
|
|
742
734
|
result
|
|
743
735
|
end
|
|
@@ -24,7 +24,7 @@ class Puppet::Network::Handler
|
|
|
24
24
|
# Tell a client whether there's a fresh config for it
|
|
25
25
|
def freshness(client = nil, clientip = nil)
|
|
26
26
|
# Always force a recompile. Newer clients shouldn't do this (as of April 2008).
|
|
27
|
-
Time.now
|
|
27
|
+
return Time.now.to_i
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def initialize(hash = {})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Author: Christian Hofstaedtler <hofstaedtler@inqnet.at>
|
|
2
|
+
# Copyright (c) 2006 Manuel Holtgrewe, 2007 Luke Kanies,
|
|
3
|
+
# 2008 Christian Hofstaedtler
|
|
4
|
+
#
|
|
5
|
+
# This file is mostly based on the mongrel module, which is part of
|
|
6
|
+
# the standard puppet distribution.
|
|
7
|
+
#
|
|
8
|
+
# puppet/network/http_server/mongrel.rb has the following license,
|
|
9
|
+
# and is based heavily on a file retrieved from:
|
|
10
|
+
# http://ttt.ggnore.net/2006/11/15/xmlrpc-with-mongrel-and-ruby-off-rails/
|
|
11
|
+
#
|
|
12
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
13
|
+
# a copy of this software and associated documentation files (the
|
|
14
|
+
# "Software"), to deal in the Software without restriction, including
|
|
15
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
16
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
17
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
18
|
+
# the following conditions:
|
|
19
|
+
#
|
|
20
|
+
# The above copyright notice and this permission notice shall be
|
|
21
|
+
# included in all copies or substantial portions of the Software.
|
|
22
|
+
#
|
|
23
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
24
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
25
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
26
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
27
|
+
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
28
|
+
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
29
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
30
|
+
# SOFTWARE.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
require 'puppet'
|
|
34
|
+
require 'puppet/network/handler'
|
|
35
|
+
require 'puppet/sslcertificates'
|
|
36
|
+
|
|
37
|
+
require 'xmlrpc/server'
|
|
38
|
+
require 'puppet/network/xmlrpc/server'
|
|
39
|
+
require 'puppet/network/http_server'
|
|
40
|
+
require 'puppet/network/client_request'
|
|
41
|
+
require 'puppet/network/handler'
|
|
42
|
+
|
|
43
|
+
require 'resolv'
|
|
44
|
+
require 'rack'
|
|
45
|
+
|
|
46
|
+
# A handler for a Rack-style puppet(master)d. For the most part, it works
|
|
47
|
+
# exactly the same as HTTPServer::Mongrel:
|
|
48
|
+
# After checking whether the request itself is sane, the handler forwards
|
|
49
|
+
# it to an internal instance of XMLRPC::BasicServer to process it.
|
|
50
|
+
module Puppet::Network
|
|
51
|
+
class HTTPServer::Rack
|
|
52
|
+
attr_reader :xmlrpc_server
|
|
53
|
+
|
|
54
|
+
def initialize(handlers)
|
|
55
|
+
@debug = false
|
|
56
|
+
if Puppet[:debug]
|
|
57
|
+
@debug = true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Puppet.info "Starting Rack server for puppet version %s" % Puppet.version
|
|
61
|
+
if Puppet[:name] != "puppetmasterd" then
|
|
62
|
+
Puppet.warn 'Rack server is not named "puppetmasterd", this may be not what you want. ($0 = %s)' % $0
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
@xmlrpc_server = Puppet::Network::XMLRPCServer.new
|
|
66
|
+
handlers.each do |name, args|
|
|
67
|
+
unless handler = Puppet::Network::Handler.handler(name)
|
|
68
|
+
raise ArgumentError, "Invalid handler %s" % name
|
|
69
|
+
end
|
|
70
|
+
h = handler.new(args)
|
|
71
|
+
@xmlrpc_server.add_handler(handler.interface, h)
|
|
72
|
+
end
|
|
73
|
+
Puppet.info "Rack server is waiting to serve requests."
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Validate a rack-style request (in env), and run the requested XMLRPC
|
|
77
|
+
# call.
|
|
78
|
+
def process(env)
|
|
79
|
+
# time to serve a request
|
|
80
|
+
req = Rack::Request.new(env)
|
|
81
|
+
|
|
82
|
+
if @debug then
|
|
83
|
+
Puppet.info "Handling request, details:"
|
|
84
|
+
env.each do |name, val|
|
|
85
|
+
l = " env: %s ->" % name
|
|
86
|
+
l = l + ' %s' % val
|
|
87
|
+
Puppet.info l
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
if not req.post? then
|
|
92
|
+
return [405, { "Content-Type" => "text/html" }, "Method Not Allowed"]
|
|
93
|
+
end
|
|
94
|
+
if req.media_type() != "text/xml" then
|
|
95
|
+
return [400, { "Content-Type" => "text/html" }, "Bad Request"]
|
|
96
|
+
end
|
|
97
|
+
if req.content_length().to_i <= 0 then
|
|
98
|
+
return [411, { "Content-Type" => "text/html" }, "Length Required"]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
body = ''
|
|
102
|
+
req.body().each { |line| body = body + line }
|
|
103
|
+
if @debug then
|
|
104
|
+
Puppet.info "Request Body: %s" % body
|
|
105
|
+
end
|
|
106
|
+
if body.size != req.content_length().to_i then
|
|
107
|
+
if @debug then
|
|
108
|
+
Puppet.info "body length didnt match %d" % body.size
|
|
109
|
+
Puppet.info " vs. -> %d" % req.content_length().to_i
|
|
110
|
+
end
|
|
111
|
+
return [400, { "Content-Type" => "text/html" }, "Bad Request Length"]
|
|
112
|
+
end
|
|
113
|
+
info = client_info(env)
|
|
114
|
+
begin
|
|
115
|
+
data = @xmlrpc_server.process(body, info)
|
|
116
|
+
return [200, { "Content-Type" => "text/xml; charset=utf-8" }, data]
|
|
117
|
+
rescue => detail
|
|
118
|
+
Puppet.err "Rack: Internal Server Error: XMLRPC_Server.process problem. Details follow: "
|
|
119
|
+
detail.backtrace.each { |line| Puppet.err " --> %s" % line }
|
|
120
|
+
return [500, { "Content-Type" => "text/html" }, "Internal Server Error"]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
|
|
126
|
+
def client_info(request)
|
|
127
|
+
ip = request["REMOTE_ADDR"]
|
|
128
|
+
# JJM #906 The following dn.match regular expression is forgiving
|
|
129
|
+
# enough to match the two Distinguished Name string contents
|
|
130
|
+
# coming from Apache, Pound or other reverse SSL proxies.
|
|
131
|
+
if dn = request[Puppet[:ssl_client_header]] and dn_matchdata = dn.match(/^.*?CN\s*=\s*(.*)/)
|
|
132
|
+
client = dn_matchdata[1].to_str
|
|
133
|
+
valid = (request[Puppet[:ssl_client_verify_header]] == 'SUCCESS')
|
|
134
|
+
else
|
|
135
|
+
begin
|
|
136
|
+
client = Resolv.getname(ip)
|
|
137
|
+
rescue => detail
|
|
138
|
+
Puppet.err "Could not resolve %s: %s" % [ip, detail]
|
|
139
|
+
client = "unknown"
|
|
140
|
+
end
|
|
141
|
+
valid = false
|
|
142
|
+
end
|
|
143
|
+
info = Puppet::Network::ClientRequest.new(client, ip, valid)
|
|
144
|
+
return info
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|