puppet 0.18.4 → 0.22.4
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 +288 -0
- data/README +2 -2
- data/Rakefile +78 -5
- data/bin/puppet +28 -36
- data/bin/puppetca +81 -38
- data/bin/puppetd +65 -62
- data/bin/puppetdoc +409 -140
- data/bin/puppetmasterd +59 -47
- data/bin/puppetrun +38 -23
- data/conf/freebsd/puppetd +26 -0
- data/conf/freebsd/puppetmasterd +26 -0
- data/conf/gentoo/conf.d/puppet +5 -0
- data/conf/gentoo/conf.d/puppetmaster +12 -0
- data/conf/gentoo/init.d/puppet +38 -0
- data/conf/gentoo/init.d/puppetmaster +50 -0
- data/conf/gentoo/puppet/fileserver.conf +12 -0
- data/conf/gentoo/puppet/puppetca.conf +29 -0
- data/conf/gentoo/puppet/puppetd.conf +29 -0
- data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
- data/conf/redhat/client.init +10 -5
- data/conf/redhat/client.sysconfig +1 -1
- data/conf/redhat/fileserver.conf +2 -2
- data/conf/redhat/logrotate +1 -1
- data/conf/redhat/no-lockdir.patch +13 -0
- data/conf/redhat/puppet.spec +65 -8
- data/conf/redhat/puppetd.conf +0 -4
- data/conf/redhat/server.init +3 -6
- data/conf/solaris/pkginfo +1 -1
- data/conf/solaris/smf/svc-puppetd +2 -2
- data/conf/suse/client.init +142 -0
- data/conf/suse/puppet.spec +221 -0
- data/conf/suse/server.init +162 -0
- data/examples/code/mac_automount.pp +16 -0
- data/examples/root/bin/sleeper +3 -5
- data/examples/root/etc/init.d/sleeper +8 -2
- data/examples/root/etc/puppet/fileserver.conf +12 -2
- data/examples/root/etc/puppet/namespaceauth.conf +20 -0
- data/examples/root/etc/puppet/puppetd.conf +4 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
- data/examples/root/etc/puppet/tagmail.conf +1 -0
- data/ext/emacs/puppet-mode.el +46 -1
- data/ext/logcheck/puppet +15 -0
- data/ext/module_puppet +15 -23
- data/ext/vim/puppet.vim +4 -2
- data/install.rb +2 -1
- data/lib/puppet.rb +76 -207
- data/lib/puppet/configuration.rb +331 -0
- data/lib/puppet/daemon.rb +63 -246
- data/lib/puppet/dsl.rb +371 -0
- data/lib/puppet/element.rb +8 -26
- data/lib/puppet/error.rb +54 -0
- data/lib/puppet/event.rb +8 -243
- data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
- data/lib/puppet/external/event-loop.rb +1 -0
- data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
- data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
- data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
- data/lib/puppet/external/gratr.rb +33 -0
- data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
- data/lib/puppet/external/gratr/base.rb +34 -0
- data/lib/puppet/external/gratr/biconnected.rb +116 -0
- data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
- data/lib/puppet/external/gratr/common.rb +73 -0
- data/lib/puppet/external/gratr/comparability.rb +92 -0
- data/lib/puppet/external/gratr/digraph.rb +116 -0
- data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
- data/lib/puppet/external/gratr/dot.rb +90 -0
- data/lib/puppet/external/gratr/edge.rb +145 -0
- data/lib/puppet/external/gratr/graph.rb +303 -0
- data/lib/puppet/external/gratr/graph_api.rb +83 -0
- data/lib/puppet/external/gratr/import.rb +44 -0
- data/lib/puppet/external/gratr/labels.rb +90 -0
- data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
- data/lib/puppet/external/gratr/rdot.rb +327 -0
- data/lib/puppet/external/gratr/search.rb +409 -0
- data/lib/puppet/external/gratr/strong_components.rb +127 -0
- data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
- data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
- data/lib/puppet/feature/base.rb +20 -0
- data/lib/puppet/feature/rails.rb +52 -0
- data/lib/puppet/metatype/attributes.rb +719 -0
- data/lib/puppet/metatype/closure.rb +111 -0
- data/lib/puppet/metatype/container.rb +94 -0
- data/lib/puppet/metatype/evaluation.rb +118 -0
- data/lib/puppet/metatype/instances.rb +261 -0
- data/lib/puppet/metatype/manager.rb +169 -0
- data/lib/puppet/metatype/metaparams.rb +409 -0
- data/lib/puppet/metatype/providers.rb +260 -0
- data/lib/puppet/metatype/relationships.rb +116 -0
- data/lib/puppet/metatype/schedules.rb +39 -0
- data/lib/puppet/metatype/tags.rb +39 -0
- data/lib/puppet/modules.rb +113 -0
- data/lib/puppet/network/authconfig.rb +168 -0
- data/lib/puppet/network/authorization.rb +84 -0
- data/lib/puppet/network/authstore.rb +293 -0
- data/lib/puppet/network/client.rb +187 -0
- data/lib/puppet/network/client/ca.rb +56 -0
- data/lib/puppet/network/client/dipper.rb +81 -0
- data/lib/puppet/network/client/file.rb +7 -0
- data/lib/puppet/network/client/logger.rb +6 -0
- data/lib/puppet/network/client/master.rb +644 -0
- data/lib/puppet/{client → network/client}/proxy.rb +3 -3
- data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
- data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
- data/lib/puppet/network/client/runner.rb +13 -0
- data/lib/puppet/network/client/status.rb +5 -0
- data/lib/puppet/network/client_request.rb +32 -0
- data/lib/puppet/network/handler.rb +33 -0
- data/lib/puppet/{server → network/handler}/ca.rb +5 -6
- data/lib/puppet/network/handler/filebucket.rb +180 -0
- data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
- data/lib/puppet/{server → network/handler}/logger.rb +3 -5
- data/lib/puppet/{server → network/handler}/master.rb +42 -8
- data/lib/puppet/network/handler/report.rb +158 -0
- data/lib/puppet/network/handler/resource.rb +190 -0
- data/lib/puppet/{server → network/handler}/runner.rb +17 -18
- data/lib/puppet/network/handler/status.rb +13 -0
- data/lib/puppet/network/rights.rb +74 -0
- data/lib/puppet/network/server.rb +5 -0
- data/lib/puppet/network/server/mongrel.rb +138 -0
- data/lib/puppet/network/server/webrick.rb +153 -0
- data/lib/puppet/network/xmlrpc/client.rb +129 -0
- data/lib/puppet/network/xmlrpc/processor.rb +91 -0
- data/lib/puppet/network/xmlrpc/server.rb +20 -0
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
- data/lib/puppet/parameter.rb +390 -346
- data/lib/puppet/parser/ast.rb +116 -147
- data/lib/puppet/parser/ast/astarray.rb +17 -33
- data/lib/puppet/parser/ast/branch.rb +2 -0
- data/lib/puppet/parser/ast/caseopt.rb +7 -12
- data/lib/puppet/parser/ast/casestatement.rb +23 -32
- data/lib/puppet/parser/ast/collection.rb +19 -80
- data/lib/puppet/parser/ast/collexpr.rb +81 -0
- data/lib/puppet/parser/ast/component.rb +160 -89
- data/lib/puppet/parser/ast/else.rb +30 -0
- data/lib/puppet/parser/ast/function.rb +9 -2
- data/lib/puppet/parser/ast/hostclass.rb +47 -131
- data/lib/puppet/parser/ast/ifstatement.rb +43 -0
- data/lib/puppet/parser/ast/leaf.rb +10 -21
- data/lib/puppet/parser/ast/node.rb +32 -79
- data/lib/puppet/parser/ast/resourcedef.rb +222 -0
- data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
- data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
- data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
- data/lib/puppet/parser/ast/resourceref.rb +44 -0
- data/lib/puppet/parser/ast/selector.rb +16 -8
- data/lib/puppet/parser/ast/tag.rb +3 -1
- data/lib/puppet/parser/ast/vardef.rb +8 -12
- data/lib/puppet/parser/collector.rb +181 -0
- data/lib/puppet/parser/functions.rb +191 -36
- data/lib/puppet/parser/interpreter.rb +802 -380
- data/lib/puppet/parser/lexer.rb +86 -19
- data/lib/puppet/parser/parser.rb +1123 -960
- data/lib/puppet/parser/resource.rb +353 -0
- data/lib/puppet/parser/resource/param.rb +57 -0
- data/lib/puppet/parser/resource/reference.rb +71 -0
- data/lib/puppet/parser/scope.rb +573 -1000
- data/lib/puppet/parser/templatewrapper.rb +54 -0
- data/lib/puppet/pgraph.rb +208 -0
- data/lib/puppet/propertychange.rb +143 -0
- data/lib/puppet/provider.rb +302 -0
- data/lib/puppet/provider/cron/crontab.rb +187 -0
- data/lib/puppet/provider/group/groupadd.rb +29 -0
- data/lib/puppet/provider/group/netinfo.rb +12 -0
- data/lib/puppet/provider/group/pw.rb +31 -0
- data/lib/puppet/provider/host/netinfo.rb +18 -0
- data/lib/puppet/provider/host/parsed.rb +73 -0
- data/lib/puppet/provider/mount.rb +57 -0
- data/lib/puppet/provider/mount/netinfo.rb +38 -0
- data/lib/puppet/provider/mount/parsed.rb +37 -0
- data/lib/puppet/provider/nameservice.rb +344 -0
- data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
- data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
- data/lib/puppet/provider/nameservice/pw.rb +22 -0
- data/lib/puppet/provider/package/apple.rb +53 -0
- data/lib/puppet/provider/package/apt.rb +119 -0
- data/lib/puppet/provider/package/aptitude.rb +30 -0
- data/lib/puppet/provider/package/aptrpm.rb +79 -0
- data/lib/puppet/provider/package/blastwave.rb +114 -0
- data/lib/puppet/provider/package/darwinport.rb +88 -0
- data/lib/puppet/provider/package/dpkg.rb +109 -0
- data/lib/puppet/provider/package/freebsd.rb +43 -0
- data/lib/puppet/provider/package/gem.rb +104 -0
- data/lib/puppet/provider/package/openbsd.rb +93 -0
- data/lib/puppet/provider/package/pkgdmg.rb +119 -0
- data/lib/puppet/provider/package/portage.rb +112 -0
- data/lib/puppet/provider/package/ports.rb +94 -0
- data/lib/puppet/provider/package/rpm.rb +125 -0
- data/lib/puppet/provider/package/rug.rb +53 -0
- data/lib/puppet/provider/package/sun.rb +168 -0
- data/lib/puppet/provider/package/sunfreeware.rb +9 -0
- data/lib/puppet/provider/package/up2date.rb +45 -0
- data/lib/puppet/provider/package/yum.rb +54 -0
- data/lib/puppet/provider/parsedfile.rb +342 -0
- data/lib/puppet/provider/port/parsed.rb +174 -0
- data/lib/puppet/provider/service/base.rb +136 -0
- data/lib/puppet/provider/service/debian.rb +32 -0
- data/lib/puppet/provider/service/gentoo.rb +49 -0
- data/lib/puppet/{type → provider}/service/init.rb +42 -40
- data/lib/puppet/provider/service/redhat.rb +59 -0
- data/lib/puppet/{type → provider}/service/smf.rb +24 -13
- data/lib/puppet/provider/sshkey/parsed.rb +36 -0
- data/lib/puppet/provider/user/netinfo.rb +106 -0
- data/lib/puppet/provider/user/pw.rb +41 -0
- data/lib/puppet/provider/user/useradd.rb +67 -0
- data/lib/puppet/provider/zone/solaris.rb +208 -0
- data/lib/puppet/rails.rb +102 -66
- data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
- data/lib/puppet/rails/database/schema.rb +89 -0
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
- data/lib/puppet/rails/external/tagging/init.rb +5 -0
- data/lib/puppet/rails/external/tagging/tag.rb +50 -0
- data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
- data/lib/puppet/rails/fact_name.rb +7 -0
- data/lib/puppet/rails/fact_value.rb +5 -0
- data/lib/puppet/rails/host.rb +95 -46
- data/lib/puppet/rails/param_name.rb +28 -0
- data/lib/puppet/rails/param_value.rb +5 -0
- data/lib/puppet/rails/puppet_class.rb +9 -0
- data/lib/puppet/rails/resource.rb +95 -0
- data/lib/puppet/rails/source_file.rb +5 -0
- data/lib/puppet/relationship.rb +63 -0
- data/lib/puppet/reports/log.rb +14 -0
- data/lib/puppet/reports/rrdgraph.rb +114 -10
- data/lib/puppet/reports/store.rb +64 -0
- data/lib/puppet/reports/tagmail.rb +144 -71
- data/lib/puppet/sslcertificates.rb +38 -5
- data/lib/puppet/sslcertificates/ca.rb +142 -37
- data/lib/puppet/sslcertificates/certificate.rb +3 -3
- data/lib/puppet/sslcertificates/inventory.rb +53 -0
- data/lib/puppet/sslcertificates/support.rb +128 -0
- data/lib/puppet/transaction.rb +568 -189
- data/lib/puppet/transaction/report.rb +14 -3
- data/lib/puppet/transportable.rb +18 -10
- data/lib/puppet/type.rb +279 -2299
- data/lib/puppet/type/component.rb +63 -63
- data/lib/puppet/type/cron.rb +294 -710
- data/lib/puppet/type/exec.rb +185 -129
- data/lib/puppet/type/group.rb +38 -89
- data/lib/puppet/type/host.rb +110 -0
- data/lib/puppet/type/mount.rb +189 -0
- data/lib/puppet/type/notify.rb +47 -0
- data/lib/puppet/type/package.rb +129 -257
- data/lib/puppet/type/parsedtype.rb +172 -297
- data/lib/puppet/type/pfile.rb +540 -319
- data/lib/puppet/type/pfile/checksum.rb +103 -76
- data/lib/puppet/type/pfile/content.rb +16 -10
- data/lib/puppet/type/pfile/ensure.rb +52 -34
- data/lib/puppet/type/pfile/group.rb +25 -18
- data/lib/puppet/type/pfile/mode.rb +7 -4
- data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
- data/lib/puppet/type/pfile/source.rb +119 -124
- data/lib/puppet/type/pfile/target.rb +29 -45
- data/lib/puppet/type/pfile/type.rb +2 -2
- data/lib/puppet/type/pfilebucket.rb +18 -14
- data/lib/puppet/type/port.rb +121 -0
- data/lib/puppet/type/property.rb +530 -0
- data/lib/puppet/type/resources.rb +150 -0
- data/lib/puppet/type/schedule.rb +38 -22
- data/lib/puppet/type/service.rb +70 -326
- data/lib/puppet/type/sshkey.rb +76 -0
- data/lib/puppet/type/tidy.rb +197 -97
- data/lib/puppet/type/user.rb +107 -183
- data/lib/puppet/type/yumrepo.rb +53 -34
- data/lib/puppet/type/zone.rb +55 -208
- data/lib/puppet/util.rb +239 -201
- data/lib/puppet/util/autoload.rb +107 -0
- data/lib/puppet/util/classgen.rb +208 -0
- data/lib/puppet/{config.rb → util/config.rb} +102 -54
- data/lib/puppet/util/docs.rb +104 -0
- data/lib/puppet/util/errors.rb +55 -0
- data/lib/puppet/util/execution.rb +22 -0
- data/lib/puppet/util/feature.rb +76 -0
- data/lib/puppet/util/fileparsing.rb +380 -0
- data/lib/puppet/util/filetype.rb +300 -0
- data/lib/puppet/util/graph.rb +39 -0
- data/lib/puppet/util/inifile.rb +209 -0
- data/lib/puppet/util/loadedfile.rb +71 -0
- data/lib/puppet/util/log.rb +549 -0
- data/lib/puppet/util/logging.rb +20 -0
- data/lib/puppet/util/metaid.rb +22 -0
- data/lib/puppet/util/methodhelper.rb +37 -0
- data/lib/puppet/util/metric.rb +160 -0
- data/lib/puppet/util/package.rb +31 -0
- data/lib/puppet/util/pidlock.rb +68 -0
- data/lib/puppet/util/plist.rb +24 -0
- data/lib/puppet/util/plist/generator.rb +226 -0
- data/lib/puppet/util/plist/parser.rb +227 -0
- data/lib/puppet/util/posix.rb +87 -0
- data/lib/puppet/util/provider_features.rb +170 -0
- data/lib/puppet/util/rails/collection_merger.rb +42 -0
- data/lib/puppet/util/storage.rb +103 -0
- data/lib/puppet/util/subclass_loader.rb +83 -0
- data/lib/puppet/util/suidmanager.rb +86 -0
- data/lib/puppet/util/variables.rb +39 -0
- data/lib/puppet/util/warnings.rb +15 -0
- data/test/Rakefile +97 -0
- data/test/certmgr/ca.rb +81 -0
- data/test/certmgr/certmgr.rb +77 -50
- data/test/certmgr/inventory.rb +79 -0
- data/test/certmgr/support.rb +81 -0
- data/test/executables/filebucket.rb +49 -0
- data/test/executables/puppetbin.rb +28 -12
- data/test/executables/puppetca.rb +75 -54
- data/test/executables/puppetd.rb +10 -13
- data/test/executables/puppetmasterd.rb +12 -17
- data/test/executables/puppetmodule.rb +18 -17
- data/test/language/ast.rb +242 -798
- data/test/language/ast/casestatement.rb +104 -0
- data/test/language/ast/component.rb +133 -0
- data/test/language/ast/hostclass.rb +162 -0
- data/test/language/ast/selector.rb +62 -0
- data/test/language/ast/variable.rb +31 -0
- data/test/language/collector.rb +369 -0
- data/test/language/functions.rb +305 -18
- data/test/language/interpreter.rb +894 -125
- data/test/language/lexer.rb +98 -12
- data/test/language/node.rb +37 -53
- data/test/language/parser.rb +455 -148
- data/test/language/resource.rb +535 -0
- data/test/language/scope.rb +451 -561
- data/test/language/snippets.rb +101 -111
- data/test/language/transportable.rb +6 -8
- data/test/lib/mocha.rb +19 -0
- data/test/lib/mocha/any_instance_method.rb +35 -0
- data/test/lib/mocha/auto_verify.rb +113 -0
- data/test/lib/mocha/central.rb +35 -0
- data/test/lib/mocha/class_method.rb +62 -0
- data/test/lib/mocha/expectation.rb +295 -0
- data/test/lib/mocha/expectation_error.rb +6 -0
- data/test/lib/mocha/infinite_range.rb +27 -0
- data/test/lib/mocha/inspect.rb +37 -0
- data/test/lib/mocha/instance_method.rb +8 -0
- data/test/lib/mocha/metaclass.rb +7 -0
- data/test/lib/mocha/mock.rb +20 -0
- data/test/lib/mocha/mock_methods.rb +122 -0
- data/test/lib/mocha/object.rb +100 -0
- data/test/lib/mocha/pretty_parameters.rb +28 -0
- data/test/lib/mocha/setup_and_teardown.rb +23 -0
- data/test/lib/mocha/standalone.rb +30 -0
- data/test/lib/mocha/test_case_adapter.rb +49 -0
- data/test/lib/mocha_standalone.rb +2 -0
- data/test/lib/puppettest.rb +294 -0
- data/test/lib/puppettest/certificates.rb +61 -0
- data/test/lib/puppettest/exetest.rb +123 -0
- data/test/lib/puppettest/fakes.rb +194 -0
- data/test/lib/puppettest/fileparsing.rb +33 -0
- data/test/lib/puppettest/filetesting.rb +231 -0
- data/test/lib/puppettest/graph.rb +41 -0
- data/test/lib/puppettest/parsertesting.rb +392 -0
- data/test/lib/puppettest/railstesting.rb +56 -0
- data/test/lib/puppettest/reporttesting.rb +19 -0
- data/test/lib/puppettest/resourcetesting.rb +73 -0
- data/test/lib/puppettest/servertest.rb +72 -0
- data/test/lib/puppettest/support.rb +8 -0
- data/test/lib/puppettest/support/assertions.rb +101 -0
- data/test/lib/puppettest/support/helpers.rb +23 -0
- data/test/lib/puppettest/support/resources.rb +37 -0
- data/test/lib/puppettest/support/utils.rb +160 -0
- data/test/lib/puppettest/testcase.rb +48 -0
- data/test/lib/rake/puppet_test_loader.rb +17 -0
- data/test/lib/rake/puppet_testtask.rb +17 -0
- data/test/lib/spec.rb +8 -0
- data/test/lib/spec/callback.rb +11 -0
- data/test/lib/spec/callback/callback_container.rb +60 -0
- data/test/lib/spec/callback/extensions/module.rb +24 -0
- data/test/lib/spec/callback/extensions/object.rb +37 -0
- data/test/lib/spec/deprecated.rb +3 -0
- data/test/lib/spec/expectations.rb +59 -0
- data/test/lib/spec/expectations/differs/default.rb +62 -0
- data/test/lib/spec/expectations/errors.rb +6 -0
- data/test/lib/spec/expectations/extensions.rb +3 -0
- data/test/lib/spec/expectations/extensions/object.rb +109 -0
- data/test/lib/spec/expectations/extensions/proc.rb +57 -0
- data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/test/lib/spec/expectations/handler.rb +47 -0
- data/test/lib/spec/expectations/should.rb +5 -0
- data/test/lib/spec/expectations/should/base.rb +64 -0
- data/test/lib/spec/expectations/should/change.rb +69 -0
- data/test/lib/spec/expectations/should/have.rb +128 -0
- data/test/lib/spec/expectations/should/not.rb +74 -0
- data/test/lib/spec/expectations/should/should.rb +81 -0
- data/test/lib/spec/expectations/sugar.rb +47 -0
- data/test/lib/spec/matchers.rb +160 -0
- data/test/lib/spec/matchers/be.rb +161 -0
- data/test/lib/spec/matchers/be_close.rb +37 -0
- data/test/lib/spec/matchers/change.rb +120 -0
- data/test/lib/spec/matchers/eql.rb +43 -0
- data/test/lib/spec/matchers/equal.rb +43 -0
- data/test/lib/spec/matchers/has.rb +44 -0
- data/test/lib/spec/matchers/have.rb +140 -0
- data/test/lib/spec/matchers/include.rb +50 -0
- data/test/lib/spec/matchers/match.rb +41 -0
- data/test/lib/spec/matchers/raise_error.rb +100 -0
- data/test/lib/spec/matchers/respond_to.rb +35 -0
- data/test/lib/spec/matchers/satisfy.rb +47 -0
- data/test/lib/spec/matchers/throw_symbol.rb +75 -0
- data/test/lib/spec/mocks.rb +232 -0
- data/test/lib/spec/mocks/argument_expectation.rb +132 -0
- data/test/lib/spec/mocks/error_generator.rb +85 -0
- data/test/lib/spec/mocks/errors.rb +10 -0
- data/test/lib/spec/mocks/extensions/object.rb +3 -0
- data/test/lib/spec/mocks/message_expectation.rb +231 -0
- data/test/lib/spec/mocks/methods.rb +40 -0
- data/test/lib/spec/mocks/mock.rb +26 -0
- data/test/lib/spec/mocks/mock_handler.rb +166 -0
- data/test/lib/spec/mocks/order_group.rb +29 -0
- data/test/lib/spec/rake/spectask.rb +173 -0
- data/test/lib/spec/rake/verify_rcov.rb +47 -0
- data/test/lib/spec/runner.rb +132 -0
- data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
- data/test/lib/spec/runner/command_line.rb +34 -0
- data/test/lib/spec/runner/context.rb +154 -0
- data/test/lib/spec/runner/context_eval.rb +142 -0
- data/test/lib/spec/runner/context_runner.rb +55 -0
- data/test/lib/spec/runner/drb_command_line.rb +21 -0
- data/test/lib/spec/runner/execution_context.rb +17 -0
- data/test/lib/spec/runner/extensions/kernel.rb +17 -0
- data/test/lib/spec/runner/extensions/object.rb +32 -0
- data/test/lib/spec/runner/formatter.rb +5 -0
- data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
- data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
- data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
- data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
- data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
- data/test/lib/spec/runner/heckle_runner.rb +71 -0
- data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/test/lib/spec/runner/option_parser.rb +224 -0
- data/test/lib/spec/runner/reporter.rb +105 -0
- data/test/lib/spec/runner/spec_matcher.rb +25 -0
- data/test/lib/spec/runner/spec_parser.rb +41 -0
- data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
- data/test/lib/spec/runner/specification.rb +114 -0
- data/test/lib/spec/translator.rb +87 -0
- data/test/lib/spec/version.rb +30 -0
- data/test/lib/stubba.rb +2 -0
- data/test/network/authconfig.rb +72 -0
- data/test/network/authorization.rb +138 -0
- data/test/network/authstore.rb +450 -0
- data/test/network/client/ca.rb +38 -0
- data/test/{client → network/client}/client.rb +107 -24
- data/test/network/client/dipper.rb +35 -0
- data/test/network/client/master.rb +627 -0
- data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
- data/test/network/client_request.rb +39 -0
- data/test/network/daemon.rb +71 -0
- data/test/{server → network/handler}/bucket.rb +103 -27
- data/test/{server → network/handler}/ca.rb +14 -19
- data/test/{server → network/handler}/fileserver.rb +443 -68
- data/test/network/handler/handler.rb +64 -0
- data/test/{server → network/handler}/logger.rb +26 -26
- data/test/network/handler/master.rb +352 -0
- data/test/network/handler/report.rb +185 -0
- data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
- data/test/{server → network/handler}/runner.rb +17 -16
- data/test/network/rights.rb +38 -0
- data/test/network/server/webrick.rb +140 -0
- data/test/network/xmlrpc/client.rb +68 -0
- data/test/network/xmlrpc/processor.rb +80 -0
- data/test/network/xmlrpc/server.rb +28 -0
- data/test/network/xmlrpc/webrick_servlet.rb +26 -0
- data/test/other/dsl.rb +218 -0
- data/test/other/events.rb +22 -15
- data/test/other/overrides.rb +9 -14
- data/test/other/pgraph.rb +289 -0
- data/test/other/propertychange.rb +142 -0
- data/test/other/provider.rb +162 -0
- data/test/other/puppet.rb +63 -10
- data/test/other/relationship.rb +74 -0
- data/test/other/relationships.rb +199 -123
- data/test/other/report.rb +152 -23
- data/test/other/transactions.rb +824 -78
- data/test/puppet/conffiles.rb +16 -11
- data/test/puppet/defaults.rb +7 -10
- data/test/puppet/{error.rb → errortest.rb} +5 -8
- data/test/puppet/modules.rb +58 -0
- data/test/puppet/tc_suidmanager.rb +107 -0
- data/test/rails/host.rb +177 -0
- data/test/rails/rails.rb +27 -0
- data/test/rails/railsparameter.rb +62 -0
- data/test/rails/railsresource.rb +100 -0
- data/test/ral/manager/attributes.rb +296 -0
- data/test/ral/manager/manager.rb +55 -0
- data/test/ral/manager/provider.rb +54 -0
- data/test/ral/manager/type.rb +837 -0
- data/test/ral/providers/cron/crontab.rb +346 -0
- data/test/ral/providers/group.rb +252 -0
- data/test/ral/providers/host/netinfo.rb +58 -0
- data/test/ral/providers/host/parsed.rb +226 -0
- data/test/ral/providers/mount/netinfo.rb +80 -0
- data/test/ral/providers/mount/parsed.rb +223 -0
- data/test/ral/providers/nameservice.rb +33 -0
- data/test/ral/providers/package.rb +253 -0
- data/test/ral/providers/package/apt.rb +89 -0
- data/test/ral/providers/package/aptitude.rb +69 -0
- data/test/ral/providers/package/aptrpm.rb +89 -0
- data/test/ral/providers/package/dpkg.rb +64 -0
- data/test/ral/providers/parsedfile.rb +668 -0
- data/test/ral/providers/parsedport.rb +233 -0
- data/test/ral/providers/provider.rb +423 -0
- data/test/{types → ral/providers}/service.rb +20 -121
- data/test/ral/providers/service/base.rb +75 -0
- data/test/ral/providers/sshkey/parsed.rb +111 -0
- data/test/ral/providers/user.rb +567 -0
- data/test/ral/providers/user/useradd.rb +250 -0
- data/test/ral/types/basic.rb +90 -0
- data/test/ral/types/component.rb +113 -0
- data/test/ral/types/cron.rb +480 -0
- data/test/{types → ral/types}/exec.rb +278 -82
- data/test/ral/types/file.rb +1799 -0
- data/test/ral/types/file/target.rb +363 -0
- data/test/{types → ral/types}/filebucket.rb +15 -17
- data/test/{types → ral/types}/fileignoresource.rb +9 -15
- data/test/ral/types/filesources.rb +1046 -0
- data/test/ral/types/group.rb +169 -0
- data/test/ral/types/host.rb +155 -0
- data/test/ral/types/mount.rb +312 -0
- data/test/ral/types/package.rb +85 -0
- data/test/ral/types/parameter.rb +172 -0
- data/test/ral/types/port.rb +148 -0
- data/test/ral/types/property.rb +343 -0
- data/test/ral/types/resources.rb +221 -0
- data/test/{types → ral/types}/schedule.rb +34 -12
- data/test/ral/types/service.rb +37 -0
- data/test/{types → ral/types}/sshkey.rb +75 -65
- data/test/ral/types/tidy.rb +240 -0
- data/test/ral/types/user.rb +493 -0
- data/test/{types → ral/types}/yumrepo.rb +7 -11
- data/test/{types → ral/types}/zone.rb +45 -45
- data/test/tagging/tagging.rb +17 -26
- data/test/util/autoload.rb +130 -0
- data/test/util/classgen.rb +227 -0
- data/test/{other → util}/config.rb +373 -113
- data/test/util/execution.rb +34 -0
- data/test/util/features.rb +94 -0
- data/test/util/fileparsing.rb +677 -0
- data/test/{other → util}/filetype.rb +9 -12
- data/test/util/graph.rb +108 -0
- data/test/{other → util}/inifile.rb +24 -11
- data/test/util/loadedfile.rb +106 -0
- data/test/{other → util}/log.rb +96 -50
- data/test/{other → util}/metrics.rb +7 -17
- data/test/util/package.rb +27 -0
- data/test/util/pidlock.rb +126 -0
- data/test/util/posixtest.rb +173 -0
- data/test/util/storage.rb +123 -0
- data/test/util/subclass_loader.rb +100 -0
- data/test/util/utiltest.rb +368 -0
- metadata +449 -169
- data/examples/code/classing +0 -35
- data/examples/code/failers/badclassnoparam +0 -10
- data/examples/code/failers/badclassparam +0 -10
- data/examples/code/failers/badcompnoparam +0 -9
- data/examples/code/failers/badcompparam +0 -9
- data/examples/code/failers/badtypeparam +0 -3
- data/examples/code/failers/noobjectrvalue +0 -1
- data/examples/code/snippets/aliastest.pp +0 -16
- data/examples/code/snippets/argumentdefaults +0 -14
- data/examples/code/snippets/casestatement.pp +0 -58
- data/examples/code/snippets/classheirarchy.pp +0 -15
- data/examples/code/snippets/classincludes.pp +0 -17
- data/examples/code/snippets/classpathtest +0 -11
- data/examples/code/snippets/componentmetaparams.pp +0 -11
- data/examples/code/snippets/deepclassheirarchy.pp +0 -23
- data/examples/code/snippets/defineoverrides.pp +0 -17
- data/examples/code/snippets/dirchmod +0 -19
- data/examples/code/snippets/emptyclass.pp +0 -9
- data/examples/code/snippets/emptyexec.pp +0 -3
- data/examples/code/snippets/failmissingexecpath.pp +0 -13
- data/examples/code/snippets/falsevalues.pp +0 -3
- data/examples/code/snippets/filecreate +0 -11
- data/examples/code/snippets/implicititeration +0 -15
- data/examples/code/snippets/multipleinstances +0 -7
- data/examples/code/snippets/namevartest +0 -9
- data/examples/code/snippets/scopetest +0 -13
- data/examples/code/snippets/selectorvalues.pp +0 -42
- data/examples/code/snippets/simpledefaults +0 -5
- data/examples/code/snippets/simpleselector +0 -38
- data/examples/code/snippets/singleary.pp +0 -19
- data/examples/code/snippets/singlequote.pp +0 -11
- data/examples/code/snippets/singleselector.pp +0 -22
- data/examples/code/snippets/tag.pp +0 -9
- data/examples/code/snippets/tagged.pp +0 -35
- data/lib/puppet/client.rb +0 -177
- data/lib/puppet/client/ca.rb +0 -21
- data/lib/puppet/client/dipper.rb +0 -76
- data/lib/puppet/client/file.rb +0 -20
- data/lib/puppet/client/log.rb +0 -17
- data/lib/puppet/client/master.rb +0 -531
- data/lib/puppet/client/runner.rb +0 -17
- data/lib/puppet/client/status.rb +0 -7
- data/lib/puppet/event-loop.rb +0 -1
- data/lib/puppet/filetype.rb +0 -308
- data/lib/puppet/inifile.rb +0 -201
- data/lib/puppet/log.rb +0 -524
- data/lib/puppet/metric.rb +0 -132
- data/lib/puppet/networkclient.rb +0 -175
- data/lib/puppet/parsedfile.rb +0 -58
- data/lib/puppet/parser/ast/classdef.rb +0 -79
- data/lib/puppet/parser/ast/compdef.rb +0 -75
- data/lib/puppet/parser/ast/nodedef.rb +0 -73
- data/lib/puppet/parser/ast/objectdef.rb +0 -284
- data/lib/puppet/parser/ast/objectref.rb +0 -77
- data/lib/puppet/rails/database.rb +0 -40
- data/lib/puppet/rails/rails_object.rb +0 -42
- data/lib/puppet/rails/rails_parameter.rb +0 -5
- data/lib/puppet/server.rb +0 -196
- data/lib/puppet/server/authconfig.rb +0 -177
- data/lib/puppet/server/authstore.rb +0 -226
- data/lib/puppet/server/filebucket.rb +0 -155
- data/lib/puppet/server/pelement.rb +0 -188
- data/lib/puppet/server/report.rb +0 -184
- data/lib/puppet/server/rights.rb +0 -78
- data/lib/puppet/server/servlet.rb +0 -274
- data/lib/puppet/statechange.rb +0 -129
- data/lib/puppet/storage.rb +0 -98
- data/lib/puppet/type/nameservice.rb +0 -264
- data/lib/puppet/type/nameservice/netinfo.rb +0 -232
- data/lib/puppet/type/nameservice/objectadd.rb +0 -146
- data/lib/puppet/type/nameservice/posix.rb +0 -12
- data/lib/puppet/type/nameservice/pw.rb +0 -107
- data/lib/puppet/type/package/apple.rb +0 -41
- data/lib/puppet/type/package/apt.rb +0 -107
- data/lib/puppet/type/package/blastwave.rb +0 -136
- data/lib/puppet/type/package/darwinport.rb +0 -97
- data/lib/puppet/type/package/dpkg.rb +0 -113
- data/lib/puppet/type/package/freebsd.rb +0 -19
- data/lib/puppet/type/package/gem.rb +0 -119
- data/lib/puppet/type/package/openbsd.rb +0 -112
- data/lib/puppet/type/package/ports.rb +0 -103
- data/lib/puppet/type/package/rpm.rb +0 -121
- data/lib/puppet/type/package/sun.rb +0 -174
- data/lib/puppet/type/package/sunfreeware.rb +0 -7
- data/lib/puppet/type/package/yum.rb +0 -52
- data/lib/puppet/type/parsedtype/host.rb +0 -144
- data/lib/puppet/type/parsedtype/mount.rb +0 -271
- data/lib/puppet/type/parsedtype/port.rb +0 -261
- data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
- data/lib/puppet/type/service/base.rb +0 -12
- data/lib/puppet/type/service/debian.rb +0 -46
- data/lib/puppet/type/service/redhat.rb +0 -38
- data/lib/puppet/type/state.rb +0 -393
- data/lib/puppet/type/symlink.rb +0 -186
- data/test/client/master.rb +0 -207
- data/test/language/rails.rb +0 -105
- data/test/other/parsedfile.rb +0 -58
- data/test/other/storage.rb +0 -100
- data/test/puppet/utiltest.rb +0 -299
- data/test/puppettest.rb +0 -1170
- data/test/server/authconfig.rb +0 -56
- data/test/server/authstore.rb +0 -218
- data/test/server/master.rb +0 -201
- data/test/server/report.rb +0 -93
- data/test/server/rights.rb +0 -41
- data/test/server/server.rb +0 -152
- data/test/test +0 -61
- data/test/types/basic.rb +0 -117
- data/test/types/component.rb +0 -298
- data/test/types/cron.rb +0 -718
- data/test/types/file.rb +0 -1314
- data/test/types/filesources.rb +0 -590
- data/test/types/group.rb +0 -323
- data/test/types/host.rb +0 -186
- data/test/types/mount.rb +0 -294
- data/test/types/package.rb +0 -538
- data/test/types/parameter.rb +0 -107
- data/test/types/port.rb +0 -201
- data/test/types/query.rb +0 -101
- data/test/types/state.rb +0 -92
- data/test/types/symlink.rb +0 -120
- data/test/types/tidy.rb +0 -102
- data/test/types/type.rb +0 -469
- data/test/types/user.rb +0 -563
data/lib/puppet/type/exec.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
module Puppet
|
|
2
2
|
newtype(:exec) do
|
|
3
|
+
include Puppet::Util::Execution
|
|
4
|
+
require 'timeout'
|
|
5
|
+
|
|
3
6
|
@doc = "Executes external commands. It is critical that all commands
|
|
4
7
|
executed using this mechanism can be run multiple times without
|
|
5
8
|
harm, i.e., they are *idempotent*. One useful way to create idempotent
|
|
@@ -13,7 +16,7 @@ module Puppet
|
|
|
13
16
|
share their commands with other instances as a dependency, since
|
|
14
17
|
Puppet has no way of knowing which instance you mean.
|
|
15
18
|
|
|
16
|
-
For example
|
|
19
|
+
For example::
|
|
17
20
|
|
|
18
21
|
# defined in the production class
|
|
19
22
|
exec { \"make\":
|
|
@@ -34,18 +37,21 @@ module Puppet
|
|
|
34
37
|
obviously different images, so ``exec`` had to be treated specially.
|
|
35
38
|
|
|
36
39
|
It is recommended to avoid duplicate names whenever possible.
|
|
40
|
+
|
|
41
|
+
Note that if an ``exec`` receives an event from another resource,
|
|
42
|
+
it will get executed again (or execute the command specified in
|
|
43
|
+
``refresh``, if there is one).
|
|
37
44
|
|
|
38
45
|
There is a strong tendency to use ``exec`` to do whatever work Puppet
|
|
39
46
|
can't already do; while this is obviously acceptable (and unavoidable)
|
|
40
47
|
in the short term, it is highly recommended to migrate work from ``exec``
|
|
41
|
-
to
|
|
48
|
+
to native Puppet types as quickly as possible. If you find that
|
|
42
49
|
you are doing a lot of work with ``exec``, please at least notify
|
|
43
50
|
us at Reductive Labs what you are doing, and hopefully we can work with
|
|
44
|
-
you to get a native element type for the work you are doing.
|
|
45
|
-
it is a Puppet bug if you need ``exec`` to do your work."
|
|
51
|
+
you to get a native element type for the work you are doing."
|
|
46
52
|
|
|
47
53
|
require 'open3'
|
|
48
|
-
require 'puppet/type/
|
|
54
|
+
require 'puppet/type/property'
|
|
49
55
|
|
|
50
56
|
# Create a new check mechanism. It's basically just a parameter that
|
|
51
57
|
# provides one extra 'check' method.
|
|
@@ -60,7 +66,8 @@ module Puppet
|
|
|
60
66
|
@checks.keys
|
|
61
67
|
end
|
|
62
68
|
|
|
63
|
-
|
|
69
|
+
newproperty(:returns) do |property|
|
|
70
|
+
include Puppet::Util::Execution
|
|
64
71
|
munge do |value|
|
|
65
72
|
value.to_s
|
|
66
73
|
end
|
|
@@ -76,41 +83,6 @@ module Puppet
|
|
|
76
83
|
return "executed successfully"
|
|
77
84
|
end
|
|
78
85
|
|
|
79
|
-
# Verify that we have the executable
|
|
80
|
-
def checkexe
|
|
81
|
-
cmd = self.parent[:command]
|
|
82
|
-
if cmd =~ /^\//
|
|
83
|
-
exe = cmd.split(/ /)[0]
|
|
84
|
-
unless FileTest.exists?(exe)
|
|
85
|
-
self.fail(
|
|
86
|
-
"Could not find executable %s" % exe
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
unless FileTest.executable?(exe)
|
|
90
|
-
self.fail(
|
|
91
|
-
"%s is not executable" % exe
|
|
92
|
-
)
|
|
93
|
-
end
|
|
94
|
-
elsif path = self.parent[:path]
|
|
95
|
-
exe = cmd.split(/ /)[0]
|
|
96
|
-
tmppath = ENV["PATH"]
|
|
97
|
-
ENV["PATH"] = self.parent[:path].join(":")
|
|
98
|
-
|
|
99
|
-
path = %{which #{exe}}.chomp
|
|
100
|
-
if path == ""
|
|
101
|
-
self.fail(
|
|
102
|
-
"Could not find command '%s'" % exe
|
|
103
|
-
)
|
|
104
|
-
end
|
|
105
|
-
ENV["PATH"] = tmppath
|
|
106
|
-
else
|
|
107
|
-
self.fail(
|
|
108
|
-
"%s is somehow not qualified with no search path" %
|
|
109
|
-
self.parent[:command]
|
|
110
|
-
)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
86
|
# First verify that all of our checks pass.
|
|
115
87
|
def retrieve
|
|
116
88
|
# Default to somethinng
|
|
@@ -126,15 +98,16 @@ module Puppet
|
|
|
126
98
|
def sync
|
|
127
99
|
olddir = nil
|
|
128
100
|
|
|
129
|
-
self.checkexe
|
|
130
|
-
|
|
131
101
|
# We need a dir to change to, even if it's just the cwd
|
|
132
102
|
dir = self.parent[:cwd] || Dir.pwd
|
|
133
|
-
tmppath = ENV["PATH"]
|
|
134
103
|
|
|
135
104
|
event = :executed_command
|
|
136
105
|
|
|
137
|
-
|
|
106
|
+
begin
|
|
107
|
+
@output, status = @parent.run(self.parent[:command])
|
|
108
|
+
rescue Timeout::Error
|
|
109
|
+
self.fail "Command exceeded timeout" % value.inspect
|
|
110
|
+
end
|
|
138
111
|
|
|
139
112
|
loglevel = @parent[:loglevel]
|
|
140
113
|
if status.exitstatus.to_s != self.should.to_s
|
|
@@ -174,7 +147,7 @@ module Puppet
|
|
|
174
147
|
|
|
175
148
|
# Support both arrays and colon-separated fields.
|
|
176
149
|
def value=(*values)
|
|
177
|
-
@value = values.collect { |val|
|
|
150
|
+
@value = values.flatten.collect { |val|
|
|
178
151
|
val.split(":")
|
|
179
152
|
}.flatten
|
|
180
153
|
end
|
|
@@ -183,29 +156,15 @@ module Puppet
|
|
|
183
156
|
newparam(:user) do
|
|
184
157
|
desc "The user to run the command as. Note that if you
|
|
185
158
|
use this then any error output is not currently captured. This
|
|
186
|
-
is because of a bug within Ruby.
|
|
159
|
+
is because of a bug within Ruby. If you are using Puppet to
|
|
160
|
+
create this user, the exec will automatically require the user,
|
|
161
|
+
as long as it is specified by name."
|
|
187
162
|
|
|
188
|
-
|
|
189
|
-
|
|
163
|
+
# Most validation is handled by the SUIDManager class.
|
|
164
|
+
validate do |user|
|
|
165
|
+
unless Puppet.features.root?
|
|
190
166
|
self.fail "Only root can execute commands as other users"
|
|
191
167
|
end
|
|
192
|
-
require 'etc'
|
|
193
|
-
|
|
194
|
-
method = :getpwnam
|
|
195
|
-
case user
|
|
196
|
-
when Integer
|
|
197
|
-
method = :getpwuid
|
|
198
|
-
when /^\d+$/
|
|
199
|
-
user = user.to_i
|
|
200
|
-
method = :getpwuid
|
|
201
|
-
end
|
|
202
|
-
begin
|
|
203
|
-
Etc.send(method, user)
|
|
204
|
-
rescue ArgumentError
|
|
205
|
-
self.fail "No such user %s" % user
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
return user
|
|
209
168
|
end
|
|
210
169
|
end
|
|
211
170
|
|
|
@@ -214,26 +173,7 @@ module Puppet
|
|
|
214
173
|
haphazardly on different platforms -- it is a platform issue
|
|
215
174
|
not a Ruby or Puppet one, since the same variety exists when
|
|
216
175
|
running commnands as different users in the shell."
|
|
217
|
-
|
|
218
|
-
# Execute the command as the specified group
|
|
219
|
-
munge do |group|
|
|
220
|
-
require 'etc'
|
|
221
|
-
method = :getgrnam
|
|
222
|
-
case group
|
|
223
|
-
when Integer: method = :getgrgid
|
|
224
|
-
when /^\d+$/
|
|
225
|
-
group = group.to_i
|
|
226
|
-
method = :getgrgid
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
begin
|
|
230
|
-
Etc.send(method, group)
|
|
231
|
-
rescue ArgumentError
|
|
232
|
-
self.fail "No such group %s" % group
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
group
|
|
236
|
-
end
|
|
176
|
+
# Validation is handled by the SUIDManager class.
|
|
237
177
|
end
|
|
238
178
|
|
|
239
179
|
newparam(:cwd) do
|
|
@@ -241,7 +181,9 @@ module Puppet
|
|
|
241
181
|
this directory does not exist, the command will fail."
|
|
242
182
|
|
|
243
183
|
validate do |dir|
|
|
244
|
-
|
|
184
|
+
unless dir =~ /^#{File::SEPARATOR}/
|
|
185
|
+
self.fail("CWD must be a fully qualified path")
|
|
186
|
+
end
|
|
245
187
|
end
|
|
246
188
|
|
|
247
189
|
munge do |dir|
|
|
@@ -260,15 +202,62 @@ module Puppet
|
|
|
260
202
|
|
|
261
203
|
values = [:true, :false]
|
|
262
204
|
# And all of the log levels
|
|
263
|
-
Puppet::Log.eachlevel { |level| values << level }
|
|
205
|
+
Puppet::Util::Log.eachlevel { |level| values << level }
|
|
264
206
|
newvalues(*values)
|
|
265
207
|
end
|
|
266
208
|
|
|
209
|
+
newparam(:refresh) do
|
|
210
|
+
desc "How to refresh this command. By default, the exec is just
|
|
211
|
+
called again when it receives an event from another resource,
|
|
212
|
+
but this parameter allows you to define a different command
|
|
213
|
+
for refreshing."
|
|
214
|
+
|
|
215
|
+
validate do |command|
|
|
216
|
+
@parent.validatecmd(command)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
newparam(:env) do
|
|
221
|
+
desc "Any additional environment variables you want to set for a
|
|
222
|
+
command. Note that if you use this to set PATH, it will override
|
|
223
|
+
the ``path`` attribute. Multiple environment variables should be
|
|
224
|
+
specified as an array."
|
|
225
|
+
|
|
226
|
+
validate do |values|
|
|
227
|
+
values = [values] unless values.is_a? Array
|
|
228
|
+
values.each do |value|
|
|
229
|
+
unless value =~ /\w+=/
|
|
230
|
+
raise ArgumentError, "Invalid environment setting '%s'" % value
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
newparam(:timeout) do
|
|
237
|
+
desc "The maximum time the command should take. If the command takes
|
|
238
|
+
longer than the timeout, the command is considered to have failed
|
|
239
|
+
and will be stopped. Use any negative number to disable the timeout."
|
|
240
|
+
|
|
241
|
+
munge do |value|
|
|
242
|
+
value = value.shift if value.is_a?(Array)
|
|
243
|
+
if value.is_a?(String)
|
|
244
|
+
unless value =~ /^[-\d.]+$/
|
|
245
|
+
raise ArgumentError, "The timeout must be a number."
|
|
246
|
+
end
|
|
247
|
+
Float(value)
|
|
248
|
+
else
|
|
249
|
+
value
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
defaultto 300
|
|
254
|
+
end
|
|
255
|
+
|
|
267
256
|
newcheck(:refreshonly) do
|
|
268
257
|
desc "The command should only be run as a
|
|
269
258
|
refresh mechanism for when a dependent object is changed. It only
|
|
270
259
|
makes sense to use this option when this command depends on some
|
|
271
|
-
other object; it is useful for triggering an action
|
|
260
|
+
other object; it is useful for triggering an action::
|
|
272
261
|
|
|
273
262
|
# Pull down the main aliases file
|
|
274
263
|
file { \"/etc/aliases\":
|
|
@@ -290,14 +279,19 @@ module Puppet
|
|
|
290
279
|
# We always fail this test, because we're only supposed to run
|
|
291
280
|
# on refresh.
|
|
292
281
|
def check(value)
|
|
293
|
-
|
|
282
|
+
# We have to invert the values.
|
|
283
|
+
if value == :true
|
|
284
|
+
false
|
|
285
|
+
else
|
|
286
|
+
true
|
|
287
|
+
end
|
|
294
288
|
end
|
|
295
289
|
end
|
|
296
290
|
|
|
297
291
|
newcheck(:creates) do
|
|
298
292
|
desc "A file that this command creates. If this
|
|
299
293
|
parameter is provided, then the command will only be run
|
|
300
|
-
if the specified file does not exist
|
|
294
|
+
if the specified file does not exist::
|
|
301
295
|
|
|
302
296
|
exec { \"tar xf /my/tar/file.tar\":
|
|
303
297
|
cwd => \"/var/tmp\",
|
|
@@ -330,7 +324,7 @@ module Puppet
|
|
|
330
324
|
|
|
331
325
|
newcheck(:unless) do
|
|
332
326
|
desc "If this parameter is set, then this ``exec`` will run unless
|
|
333
|
-
the command returns 0. For example
|
|
327
|
+
the command returns 0. For example::
|
|
334
328
|
|
|
335
329
|
exec { \"/bin/echo root >> /usr/lib/cron/cron.allow\":
|
|
336
330
|
path => \"/usr/bin:/usr/sbin:/bin\",
|
|
@@ -354,7 +348,12 @@ module Puppet
|
|
|
354
348
|
|
|
355
349
|
# Return true if the command does not return 0.
|
|
356
350
|
def check(value)
|
|
357
|
-
|
|
351
|
+
begin
|
|
352
|
+
output, status = @parent.run(value, true)
|
|
353
|
+
rescue Timeout::Error
|
|
354
|
+
err "Check %s exceeded timeout" % value.inspect
|
|
355
|
+
return false
|
|
356
|
+
end
|
|
358
357
|
|
|
359
358
|
return status.exitstatus != 0
|
|
360
359
|
end
|
|
@@ -362,7 +361,7 @@ module Puppet
|
|
|
362
361
|
|
|
363
362
|
newcheck(:onlyif) do
|
|
364
363
|
desc "If this parameter is set, then this ``exec`` will only run if
|
|
365
|
-
the command returns 0. For example
|
|
364
|
+
the command returns 0. For example::
|
|
366
365
|
|
|
367
366
|
exec { \"logrotate\":
|
|
368
367
|
path => \"/usr/bin:/usr/sbin:/bin\",
|
|
@@ -385,7 +384,12 @@ module Puppet
|
|
|
385
384
|
|
|
386
385
|
# Return true if the command returns 0.
|
|
387
386
|
def check(value)
|
|
388
|
-
|
|
387
|
+
begin
|
|
388
|
+
output, status = @parent.run(value, true)
|
|
389
|
+
rescue Timeout::Error
|
|
390
|
+
err "Check %s exceeded timeout" % value.inspect
|
|
391
|
+
return false
|
|
392
|
+
end
|
|
389
393
|
|
|
390
394
|
return status.exitstatus == 0
|
|
391
395
|
end
|
|
@@ -432,13 +436,23 @@ module Puppet
|
|
|
432
436
|
reqs
|
|
433
437
|
end
|
|
434
438
|
|
|
439
|
+
autorequire(:user) do
|
|
440
|
+
# Autorequire users if they are specified by name
|
|
441
|
+
if user = self[:user] and user !~ /^\d+$/
|
|
442
|
+
user
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
435
446
|
def self.list
|
|
436
447
|
self.collect { |i| i }
|
|
437
448
|
end
|
|
438
449
|
|
|
439
|
-
# Verify that we pass all of the checks.
|
|
440
|
-
|
|
450
|
+
# Verify that we pass all of the checks. The argument determines whether
|
|
451
|
+
# we skip the :refreshonly check, which is necessary because we now check
|
|
452
|
+
# within refresh()
|
|
453
|
+
def check(refreshing = false)
|
|
441
454
|
self.class.checks.each { |check|
|
|
455
|
+
next if refreshing and check == :refreshonly
|
|
442
456
|
if @parameters.include?(check)
|
|
443
457
|
val = @parameters[check].value
|
|
444
458
|
val = [val] unless val.is_a? Array
|
|
@@ -453,27 +467,61 @@ module Puppet
|
|
|
453
467
|
return true
|
|
454
468
|
end
|
|
455
469
|
|
|
470
|
+
# Verify that we have the executable
|
|
471
|
+
def checkexe(cmd)
|
|
472
|
+
if cmd =~ /^\//
|
|
473
|
+
exe = cmd.split(/ /)[0]
|
|
474
|
+
unless FileTest.exists?(exe)
|
|
475
|
+
raise ArgumentError, "Could not find executable %s" % exe
|
|
476
|
+
end
|
|
477
|
+
unless FileTest.executable?(exe)
|
|
478
|
+
raise ArgumentError,
|
|
479
|
+
"%s is not executable" % exe
|
|
480
|
+
end
|
|
481
|
+
elsif path = self[:path]
|
|
482
|
+
exe = cmd.split(/ /)[0]
|
|
483
|
+
withenv :PATH => self[:path].join(":") do
|
|
484
|
+
path = %{which #{exe}}.chomp
|
|
485
|
+
if path == ""
|
|
486
|
+
raise ArgumentError,
|
|
487
|
+
"Could not find command '%s'" % exe
|
|
488
|
+
end
|
|
489
|
+
end
|
|
490
|
+
else
|
|
491
|
+
raise ArgumentError,
|
|
492
|
+
"%s is somehow not qualified with no search path" %
|
|
493
|
+
self[:command]
|
|
494
|
+
end
|
|
495
|
+
end
|
|
496
|
+
|
|
456
497
|
def output
|
|
457
|
-
if self.
|
|
498
|
+
if self.property(:returns).nil?
|
|
458
499
|
return nil
|
|
459
500
|
else
|
|
460
|
-
return self.
|
|
501
|
+
return self.property(:returns).output
|
|
461
502
|
end
|
|
462
503
|
end
|
|
463
504
|
|
|
464
|
-
#
|
|
505
|
+
# Run the command, or optionally run a separately-specified command.
|
|
465
506
|
def refresh
|
|
466
|
-
self.
|
|
507
|
+
if self.check(true)
|
|
508
|
+
if cmd = self[:refresh]
|
|
509
|
+
self.run(cmd)
|
|
510
|
+
else
|
|
511
|
+
self.property(:returns).sync
|
|
512
|
+
end
|
|
513
|
+
end
|
|
467
514
|
end
|
|
468
515
|
|
|
469
516
|
# Run a command.
|
|
470
517
|
def run(command, check = false)
|
|
471
518
|
output = nil
|
|
472
519
|
status = nil
|
|
473
|
-
tmppath = ENV["PATH"]
|
|
474
520
|
|
|
475
521
|
dir = nil
|
|
476
522
|
|
|
523
|
+
checkexe(command)
|
|
524
|
+
|
|
477
525
|
if dir = self[:cwd]
|
|
478
526
|
unless File.directory?(dir)
|
|
479
527
|
if check
|
|
@@ -493,52 +541,60 @@ module Puppet
|
|
|
493
541
|
end
|
|
494
542
|
begin
|
|
495
543
|
# Do our chdir
|
|
496
|
-
Dir.chdir(dir)
|
|
544
|
+
Dir.chdir(dir) do
|
|
545
|
+
env = {}
|
|
546
|
+
|
|
497
547
|
if self[:path]
|
|
498
|
-
|
|
548
|
+
env[:PATH] = self[:path].join(":")
|
|
499
549
|
end
|
|
500
550
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
551
|
+
if envlist = self[:env]
|
|
552
|
+
envlist = [envlist] unless envlist.is_a? Array
|
|
553
|
+
envlist.each do |setting|
|
|
554
|
+
if setting =~ /^(\w+)=((.|\n)+)$/
|
|
555
|
+
name = $1
|
|
556
|
+
value = $2
|
|
557
|
+
if env.include? name
|
|
558
|
+
warning(
|
|
559
|
+
"Overriding environment setting '%s' with '%s'" %
|
|
560
|
+
[name, value]
|
|
561
|
+
)
|
|
562
|
+
end
|
|
563
|
+
env[name] = value
|
|
564
|
+
else
|
|
565
|
+
warning "Cannot understand env setting %s" % setting.inspect
|
|
511
566
|
end
|
|
512
|
-
output = %x{#{command}}
|
|
513
|
-
else
|
|
514
|
-
output = %x{#{command} 2>&1}
|
|
515
567
|
end
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
withenv env do
|
|
571
|
+
Timeout::timeout(self[:timeout]) do
|
|
572
|
+
output, status = Puppet::Util::SUIDManager.run_and_capture(
|
|
573
|
+
[command], self[:user], self[:group]
|
|
574
|
+
)
|
|
575
|
+
end
|
|
576
|
+
# The shell returns 127 if the command is missing.
|
|
577
|
+
if status.exitstatus == 127
|
|
578
|
+
raise ArgumentError, output
|
|
579
|
+
end
|
|
580
|
+
end
|
|
581
|
+
end
|
|
519
582
|
rescue Errno::ENOENT => detail
|
|
520
583
|
self.fail detail.to_s
|
|
521
|
-
ensure
|
|
522
|
-
# reset things to how we found them
|
|
523
|
-
ENV["PATH"] = tmppath
|
|
524
584
|
end
|
|
525
585
|
|
|
526
586
|
return output, status
|
|
527
587
|
end
|
|
528
588
|
|
|
529
|
-
def to_s
|
|
530
|
-
"exec(%s)" % self.name
|
|
531
|
-
end
|
|
532
|
-
|
|
533
589
|
def validatecmd(cmd)
|
|
534
590
|
# if we're not fully qualified, require a path
|
|
535
591
|
if cmd !~ /^\//
|
|
536
592
|
if self[:path].nil?
|
|
537
|
-
self.fail "both unqualifed and specified no search path"
|
|
593
|
+
self.fail "'%s' is both unqualifed and specified no search path" % cmd
|
|
538
594
|
end
|
|
539
595
|
end
|
|
540
596
|
end
|
|
541
597
|
end
|
|
542
598
|
end
|
|
543
599
|
|
|
544
|
-
# $Id: exec.rb
|
|
600
|
+
# $Id: exec.rb 2442 2007-04-30 19:42:58Z luke $
|