puppet 0.18.4 → 0.22.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +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
@@ -0,0 +1,104 @@
|
|
1
|
+
# Some simple methods for helping manage automatic documentation generation.
|
2
|
+
module Puppet::Util::Docs
|
3
|
+
# Specify the actual doc string.
|
4
|
+
def desc(str)
|
5
|
+
@doc = str
|
6
|
+
end
|
7
|
+
|
8
|
+
# Add a new autodoc block. We have to define these as class methods,
|
9
|
+
# rather than just sticking them in a hash, because otherwise they're
|
10
|
+
# too difficult to do inheritance with.
|
11
|
+
def dochook(name, &block)
|
12
|
+
method = "dochook_" + name.to_s
|
13
|
+
|
14
|
+
meta_def method, &block
|
15
|
+
end
|
16
|
+
|
17
|
+
# Generate the full doc string.
|
18
|
+
def doc
|
19
|
+
extra = methods.find_all { |m| m.to_s =~ /^dochook_.+/ }.collect { |m|
|
20
|
+
self.send(m)
|
21
|
+
}.join(" ")
|
22
|
+
|
23
|
+
if defined? @doc and @doc
|
24
|
+
@doc + extra
|
25
|
+
else
|
26
|
+
extra
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Build a table
|
31
|
+
def doctable(headers, data)
|
32
|
+
str = "\n\n"
|
33
|
+
|
34
|
+
lengths = []
|
35
|
+
# Figure out the longest field for all columns
|
36
|
+
data.each do |name, values|
|
37
|
+
[name, values].flatten.each_with_index do |value, i|
|
38
|
+
lengths[i] ||= 0
|
39
|
+
lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# The headers could also be longest
|
44
|
+
headers.each_with_index do |value, i|
|
45
|
+
lengths[i] = value.to_s.length if value.to_s.length > lengths[i]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Add the top header row
|
49
|
+
str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
|
50
|
+
|
51
|
+
# And the header names
|
52
|
+
str += headers.zip(lengths).collect { |value, num| pad(value, num) }.join(" ") + "\n"
|
53
|
+
|
54
|
+
# And the second header row
|
55
|
+
str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
|
56
|
+
|
57
|
+
# Now each data row
|
58
|
+
data.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |name, rows|
|
59
|
+
str += [name, rows].flatten.zip(lengths).collect do |value, length|
|
60
|
+
pad(value, length)
|
61
|
+
end.join(" ") + "\n"
|
62
|
+
end
|
63
|
+
|
64
|
+
# And the bottom line row
|
65
|
+
str += lengths.collect { |num| "=" * num }.join(" ") + "\n"
|
66
|
+
|
67
|
+
str + "\n"
|
68
|
+
end
|
69
|
+
|
70
|
+
# Pad a field with spaces
|
71
|
+
def pad(value, length)
|
72
|
+
value.to_s + (" " * (length - value.to_s.length))
|
73
|
+
end
|
74
|
+
|
75
|
+
# Handle the inline indentation in the docs.
|
76
|
+
def scrub(text)
|
77
|
+
# Stupid markdown
|
78
|
+
#text = text.gsub("<%=", "<%=")
|
79
|
+
# For text with no carriage returns, there's nothing to do.
|
80
|
+
if text !~ /\n/
|
81
|
+
return text
|
82
|
+
end
|
83
|
+
indent = nil
|
84
|
+
|
85
|
+
# If we can match an indentation, then just remove that same level of
|
86
|
+
# indent from every line.
|
87
|
+
if text =~ /^(\s+)/
|
88
|
+
indent = $1
|
89
|
+
begin
|
90
|
+
return text.gsub(/^#{indent}/,'')
|
91
|
+
rescue => detail
|
92
|
+
puts detail.backtrace
|
93
|
+
puts detail
|
94
|
+
end
|
95
|
+
else
|
96
|
+
return text
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
module_function :scrub
|
102
|
+
end
|
103
|
+
|
104
|
+
# $Id: docs.rb 2408 2007-04-24 02:41:16Z luke $
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Some helper methods for throwing errors.
|
2
|
+
module Puppet::Util::Errors
|
3
|
+
# Throw a dev error.
|
4
|
+
def devfail(msg)
|
5
|
+
self.fail(Puppet::DevError, msg)
|
6
|
+
end
|
7
|
+
|
8
|
+
# Add line and file info if available and appropriate.
|
9
|
+
def adderrorcontext(error, other = nil)
|
10
|
+
error.line ||= self.line if self.respond_to?(:line) and self.line
|
11
|
+
error.file ||= self.file if self.respond_to?(:file) and self.file
|
12
|
+
|
13
|
+
if other and other.respond_to?(:backtrace)
|
14
|
+
error.set_backtrace other.backtrace
|
15
|
+
end
|
16
|
+
|
17
|
+
return error
|
18
|
+
end
|
19
|
+
|
20
|
+
# Wrap a call in such a way that we always throw the right exception and keep
|
21
|
+
# as much context as possible.
|
22
|
+
def exceptwrap(options = {})
|
23
|
+
options[:type] ||= Puppet::DevError
|
24
|
+
begin
|
25
|
+
return yield
|
26
|
+
rescue Puppet::Error => detail
|
27
|
+
raise adderrorcontext(detail)
|
28
|
+
rescue => detail
|
29
|
+
message = options[:message] || "%s failed with error %s: %s" %
|
30
|
+
[self.class, detail.class, detail.to_s]
|
31
|
+
|
32
|
+
error = options[:type].new(message)
|
33
|
+
# We can't use self.fail here because it always expects strings,
|
34
|
+
# not exceptions.
|
35
|
+
raise adderrorcontext(error, detail)
|
36
|
+
end
|
37
|
+
|
38
|
+
return retval
|
39
|
+
end
|
40
|
+
|
41
|
+
# Throw an error, defaulting to a Puppet::Error.
|
42
|
+
def fail(*args)
|
43
|
+
if args[0].is_a?(Class)
|
44
|
+
type = args.shift
|
45
|
+
else
|
46
|
+
type = Puppet::Error
|
47
|
+
end
|
48
|
+
|
49
|
+
error = adderrorcontext(type.new(args.join(" ")))
|
50
|
+
|
51
|
+
raise error
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# $Id: errors.rb 1739 2006-10-06 03:13:15Z luke $
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Puppet::Util::Execution
|
2
|
+
module_function
|
3
|
+
|
4
|
+
# Run some code with a specific environment. Resets the environment back to
|
5
|
+
# what it was at the end of the code.
|
6
|
+
def withenv(hash)
|
7
|
+
oldvals = {}
|
8
|
+
hash.each do |name, val|
|
9
|
+
name = name.to_s
|
10
|
+
oldvals[name] = ENV[name]
|
11
|
+
ENV[name] = val
|
12
|
+
end
|
13
|
+
|
14
|
+
yield
|
15
|
+
ensure
|
16
|
+
oldvals.each do |name, val|
|
17
|
+
ENV[name] = val
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# $Id: execution.rb 1568 2006-09-05 23:20:45Z luke $
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Created by Luke Kanies on 2006-11-07.
|
2
|
+
# Copyright (c) 2006. All rights reserved.
|
3
|
+
|
4
|
+
class Puppet::Util::Feature
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
# Create a new feature test. You have to pass the feature name,
|
8
|
+
# and it must be unique. You can either provide a block that
|
9
|
+
# will get executed immediately to determine if the feature
|
10
|
+
# is present, or you can pass an option to determine it.
|
11
|
+
# Currently, the only supported option is 'libs' (must be
|
12
|
+
# passed as a symbol), which will make sure that each lib loads
|
13
|
+
# successfully.
|
14
|
+
def add(name, options = {})
|
15
|
+
method = name.to_s + "?"
|
16
|
+
if self.class.respond_to?(method)
|
17
|
+
raise ArgumentError, "Feature %s is already defined" % name
|
18
|
+
end
|
19
|
+
|
20
|
+
result = true
|
21
|
+
if block_given?
|
22
|
+
begin
|
23
|
+
result = yield
|
24
|
+
rescue => detail
|
25
|
+
warn "Failed to load feature test for %s: %s" % [name, detail]
|
26
|
+
result = false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if ary = options[:libs]
|
31
|
+
ary = [ary] unless ary.is_a?(Array)
|
32
|
+
|
33
|
+
ary.each do |lib|
|
34
|
+
unless lib.is_a?(String)
|
35
|
+
raise ArgumentError, "Libraries must be passed as strings not %s" % lib.class
|
36
|
+
end
|
37
|
+
|
38
|
+
begin
|
39
|
+
require lib
|
40
|
+
rescue Exception
|
41
|
+
Puppet.debug "Failed to load library '%s' for feature '%s'" % [lib, name]
|
42
|
+
result = false
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
meta_def(method) do
|
48
|
+
result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Create a new feature collection.
|
53
|
+
def initialize(path)
|
54
|
+
@path = path
|
55
|
+
@loader = Puppet::Util::Autoload.new(self, @path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def load
|
59
|
+
@loader.loadall
|
60
|
+
end
|
61
|
+
|
62
|
+
def method_missing(method, *args)
|
63
|
+
return super unless method.to_s =~ /\?$/
|
64
|
+
|
65
|
+
feature = method.to_s.sub(/\?$/, '')
|
66
|
+
@loader.load(feature)
|
67
|
+
|
68
|
+
if respond_to?(method)
|
69
|
+
return self.send(method)
|
70
|
+
else
|
71
|
+
return false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# $Id: feature.rb 2178 2007-02-07 23:56:59Z luke $
|
@@ -0,0 +1,380 @@
|
|
1
|
+
# A mini-language for parsing files. This is only used file the ParsedFile
|
2
|
+
# provider, but it makes more sense to split it out so it's easy to maintain
|
3
|
+
# in one place.
|
4
|
+
#
|
5
|
+
# You can use this module to create simple parser/generator classes. For instance,
|
6
|
+
# the following parser should go most of the way to parsing /etc/passwd:
|
7
|
+
#
|
8
|
+
# class Parser
|
9
|
+
# include Puppet::Util::FileParsing
|
10
|
+
# record_line :user, :fields => %w{name password uid gid gecos home shell},
|
11
|
+
# :separator => ":"
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# You would use it like this:
|
15
|
+
#
|
16
|
+
# parser = Parser.new
|
17
|
+
# lines = parser.parse(File.read("/etc/passwd"))
|
18
|
+
#
|
19
|
+
# lines.each do |type, hash| # type will always be :user, since we only have one
|
20
|
+
# p hash
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# Each line in this case would be a hash, with each field set appropriately.
|
24
|
+
# You could then call 'parser.to_line(hash)' on any of those hashes to generate
|
25
|
+
# the text line again.
|
26
|
+
|
27
|
+
require 'puppet/util/methodhelper'
|
28
|
+
|
29
|
+
module Puppet::Util::FileParsing
|
30
|
+
include Puppet::Util
|
31
|
+
attr_writer :line_separator, :trailing_separator
|
32
|
+
|
33
|
+
class FileRecord
|
34
|
+
include Puppet::Util
|
35
|
+
include Puppet::Util::MethodHelper
|
36
|
+
attr_accessor :absent, :joiner, :rts, :separator, :rollup, :name, :match, :block_eval
|
37
|
+
|
38
|
+
attr_reader :fields, :optional, :type
|
39
|
+
|
40
|
+
INVALID_FIELDS = [:record_type, :target, :on_disk]
|
41
|
+
|
42
|
+
# Customize this so we can do a bit of validation.
|
43
|
+
def fields=(fields)
|
44
|
+
@fields = fields.collect do |field|
|
45
|
+
r = symbolize(field)
|
46
|
+
if INVALID_FIELDS.include?(r)
|
47
|
+
raise ArgumentError.new("Cannot have fields named %s" % r)
|
48
|
+
end
|
49
|
+
r
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(type, options = {}, &block)
|
54
|
+
@type = symbolize(type)
|
55
|
+
unless [:record, :text].include?(@type)
|
56
|
+
raise ArgumentError, "Invalid record type %s" % @type
|
57
|
+
end
|
58
|
+
|
59
|
+
set_options(options)
|
60
|
+
|
61
|
+
if self.type == :record
|
62
|
+
# Now set defaults.
|
63
|
+
self.absent ||= ""
|
64
|
+
self.separator ||= /\s+/
|
65
|
+
self.joiner ||= " "
|
66
|
+
self.optional ||= []
|
67
|
+
unless defined? @rollup
|
68
|
+
@rollup = true
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
if block_given?
|
73
|
+
@block_eval ||= :process
|
74
|
+
|
75
|
+
# Allow the developer to specify that a block should be instance-eval'ed.
|
76
|
+
if @block_eval == :instance
|
77
|
+
instance_eval(&block)
|
78
|
+
else
|
79
|
+
meta_def(@block_eval, &block)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Convert a record into a line by joining the fields together appropriately.
|
85
|
+
# This is pulled into a separate method so it can be called by the hooks.
|
86
|
+
def join(details)
|
87
|
+
joinchar = self.joiner
|
88
|
+
|
89
|
+
fields.collect { |field|
|
90
|
+
# If the field is marked absent, use the appropriate replacement
|
91
|
+
if details[field] == :absent or details[field] == [:absent] or details[field].nil?
|
92
|
+
if self.optional.include?(field)
|
93
|
+
self.absent
|
94
|
+
else
|
95
|
+
raise ArgumentError, "Field '%s' is required" % field
|
96
|
+
end
|
97
|
+
else
|
98
|
+
details[field].to_s
|
99
|
+
end
|
100
|
+
}.reject { |c| c.nil?}.join(joinchar)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Customize this so we can do a bit of validation.
|
104
|
+
def optional=(optional)
|
105
|
+
@optional = optional.collect do |field|
|
106
|
+
symbolize(field)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Create a hook that modifies the hash resulting from parsing.
|
111
|
+
def post_parse=(block)
|
112
|
+
meta_def(:post_parse, &block)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Create a hook that modifies the hash just prior to generation.
|
116
|
+
def pre_gen=(block)
|
117
|
+
meta_def(:pre_gen, &block)
|
118
|
+
end
|
119
|
+
|
120
|
+
def to_line=(block)
|
121
|
+
meta_def(:to_line, &block)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# Clear all existing record definitions. Only used for testing.
|
126
|
+
def clear_records
|
127
|
+
@record_types.clear
|
128
|
+
@record_order.clear
|
129
|
+
end
|
130
|
+
|
131
|
+
def fields(type)
|
132
|
+
if record = record_type(type)
|
133
|
+
record.fields.dup
|
134
|
+
else
|
135
|
+
nil
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Try to match a specific text line.
|
140
|
+
def handle_text_line(line, record)
|
141
|
+
if line =~ record.match
|
142
|
+
return {:record_type => record.name, :line => line}
|
143
|
+
else
|
144
|
+
return nil
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# Try to match a record.
|
149
|
+
def handle_record_line(line, record)
|
150
|
+
ret = nil
|
151
|
+
if record.respond_to?(:process)
|
152
|
+
if ret = record.send(:process, line.dup)
|
153
|
+
unless ret.is_a?(Hash)
|
154
|
+
raise Puppet::DevError,
|
155
|
+
"Process record type %s returned non-hash" % record.name
|
156
|
+
end
|
157
|
+
else
|
158
|
+
return nil
|
159
|
+
end
|
160
|
+
elsif regex = record.match
|
161
|
+
# In this case, we try to match the whole line and then use the
|
162
|
+
# match captures to get our fields.
|
163
|
+
if match = regex.match(line)
|
164
|
+
fields = []
|
165
|
+
ret = {}
|
166
|
+
record.fields.zip(match.captures).each do |f, v|
|
167
|
+
ret[f] = v
|
168
|
+
end
|
169
|
+
else
|
170
|
+
nil
|
171
|
+
end
|
172
|
+
else
|
173
|
+
ret = {}
|
174
|
+
sep = record.separator
|
175
|
+
|
176
|
+
# String "helpfully" replaces ' ' with /\s+/ in splitting, so we
|
177
|
+
# have to work around it.
|
178
|
+
if sep == " "
|
179
|
+
sep = / /
|
180
|
+
end
|
181
|
+
line_fields = line.split(sep)
|
182
|
+
record.fields.each do |param|
|
183
|
+
value = line_fields.shift
|
184
|
+
if value and value != record.absent
|
185
|
+
ret[param] = value
|
186
|
+
else
|
187
|
+
ret[param] = :absent
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
unless line_fields.empty? or ! record.rollup
|
192
|
+
last_field = record.fields[-1]
|
193
|
+
val = ([ret[last_field]] + line_fields).join(record.joiner)
|
194
|
+
ret[last_field] = val
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
if ret
|
199
|
+
ret[:record_type] = record.name
|
200
|
+
return ret
|
201
|
+
else
|
202
|
+
return nil
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def line_separator
|
207
|
+
unless defined?(@line_separator)
|
208
|
+
@line_separator = "\n"
|
209
|
+
end
|
210
|
+
|
211
|
+
@line_separator
|
212
|
+
end
|
213
|
+
|
214
|
+
# Split text into separate lines using the record separator.
|
215
|
+
def lines(text)
|
216
|
+
# Remove any trailing separators, and then split based on them
|
217
|
+
text.sub(/#{self.line_separator}\Q/,'').split(self.line_separator)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Split a bunch of text into lines and then parse them individually.
|
221
|
+
def parse(text)
|
222
|
+
lines(text).collect do |line|
|
223
|
+
parse_line(line)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
# Handle parsing a single line.
|
228
|
+
def parse_line(line)
|
229
|
+
unless records?
|
230
|
+
raise Puppet::DevError, "No record types defined; cannot parse lines"
|
231
|
+
end
|
232
|
+
|
233
|
+
@record_order.each do |record|
|
234
|
+
# These are basically either text or record lines.
|
235
|
+
method = "handle_%s_line" % record.type
|
236
|
+
if respond_to?(method)
|
237
|
+
if result = send(method, line, record)
|
238
|
+
if record.respond_to?(:post_parse)
|
239
|
+
record.send(:post_parse, result)
|
240
|
+
end
|
241
|
+
return result
|
242
|
+
end
|
243
|
+
else
|
244
|
+
raise Puppet::DevError,
|
245
|
+
"Somehow got invalid line type %s" % record.type
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
return nil
|
250
|
+
end
|
251
|
+
|
252
|
+
# Define a new type of record. These lines get split into hashes. Valid
|
253
|
+
# options are:
|
254
|
+
# * <tt>:absent</tt>: What to use when a field is absent. Defaults to "".
|
255
|
+
# * <tt>:fields</tt>: The list of fields, as an array. By default, all
|
256
|
+
# fields are considered required.
|
257
|
+
# * <tt>:joiner</tt>: How to join fields together. Defaults to '\t'.
|
258
|
+
# * <tt>:optional</tt>: Which fields are optional. If these are missing,
|
259
|
+
# you'll just get the 'absent' value instead of an ArgumentError.
|
260
|
+
# * <tt>:rts</tt>: Whether to remove trailing whitespace. Defaults to false.
|
261
|
+
# If true, whitespace will be removed; if a regex, then whatever matches
|
262
|
+
# the regex will be removed.
|
263
|
+
# * <tt>:separator</tt>: The record separator. Defaults to /\s+/.
|
264
|
+
def record_line(name, options, &block)
|
265
|
+
unless options.include?(:fields)
|
266
|
+
raise ArgumentError, "Must include a list of fields"
|
267
|
+
end
|
268
|
+
|
269
|
+
record = FileRecord.new(:record, options, &block)
|
270
|
+
record.name = symbolize(name)
|
271
|
+
|
272
|
+
new_line_type(record)
|
273
|
+
end
|
274
|
+
|
275
|
+
# Are there any record types defined?
|
276
|
+
def records?
|
277
|
+
defined?(@record_types) and ! @record_types.empty?
|
278
|
+
end
|
279
|
+
|
280
|
+
# Define a new type of text record.
|
281
|
+
def text_line(name, options, &block)
|
282
|
+
unless options.include?(:match)
|
283
|
+
raise ArgumentError, "You must provide a :match regex for text lines"
|
284
|
+
end
|
285
|
+
|
286
|
+
record = FileRecord.new(:text, options, &block)
|
287
|
+
record.name = symbolize(name)
|
288
|
+
|
289
|
+
new_line_type(record)
|
290
|
+
end
|
291
|
+
|
292
|
+
# Generate a file from a bunch of hash records.
|
293
|
+
def to_file(records)
|
294
|
+
text = records.collect { |record| to_line(record) }.join(line_separator)
|
295
|
+
|
296
|
+
if trailing_separator
|
297
|
+
text += line_separator
|
298
|
+
end
|
299
|
+
|
300
|
+
return text
|
301
|
+
end
|
302
|
+
|
303
|
+
# Convert our parsed record into a text record.
|
304
|
+
def to_line(details)
|
305
|
+
unless record = record_type(details[:record_type])
|
306
|
+
raise ArgumentError, "Invalid record type %s" % details[:record_type]
|
307
|
+
end
|
308
|
+
|
309
|
+
if record.respond_to?(:pre_gen)
|
310
|
+
details = details.dup
|
311
|
+
record.send(:pre_gen, details)
|
312
|
+
end
|
313
|
+
|
314
|
+
case record.type
|
315
|
+
when :text: return details[:line]
|
316
|
+
else
|
317
|
+
if record.respond_to?(:to_line)
|
318
|
+
return record.to_line(details)
|
319
|
+
end
|
320
|
+
|
321
|
+
line = record.join(details)
|
322
|
+
|
323
|
+
if regex = record.rts
|
324
|
+
# If they say true, then use whitespace; else, use their regex.
|
325
|
+
if regex == true
|
326
|
+
regex = /\s+$/
|
327
|
+
end
|
328
|
+
return line.sub(regex,'')
|
329
|
+
else
|
330
|
+
return line
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
# Whether to add a trailing separator to the file. Defaults to true
|
336
|
+
def trailing_separator
|
337
|
+
if defined? @trailing_separator
|
338
|
+
return @trailing_separator
|
339
|
+
else
|
340
|
+
return true
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
def valid_attr?(type, attr)
|
345
|
+
type = symbolize(type)
|
346
|
+
if record = record_type(type) and record.fields.include?(symbolize(attr))
|
347
|
+
return true
|
348
|
+
else
|
349
|
+
if symbolize(attr) == :ensure
|
350
|
+
return true
|
351
|
+
else
|
352
|
+
false
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
private
|
358
|
+
|
359
|
+
# Define a new type of record.
|
360
|
+
def new_line_type(record)
|
361
|
+
@record_types ||= {}
|
362
|
+
@record_order ||= []
|
363
|
+
|
364
|
+
if @record_types.include?(record.name)
|
365
|
+
raise ArgumentError, "Line type %s is already defined" % record.name
|
366
|
+
end
|
367
|
+
|
368
|
+
@record_types[record.name] = record
|
369
|
+
@record_order << record
|
370
|
+
|
371
|
+
return record
|
372
|
+
end
|
373
|
+
|
374
|
+
# Retrive the record object.
|
375
|
+
def record_type(type)
|
376
|
+
@record_types[symbolize(type)]
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
# $Id: fileparsing.rb 2407 2007-04-23 18:01:36Z luke $
|