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,54 @@
|
|
1
|
+
# A simple wrapper for templates, so they don't have full access to
|
2
|
+
# the scope objects.
|
3
|
+
class Puppet::Parser::TemplateWrapper
|
4
|
+
attr_accessor :scope, :file
|
5
|
+
include Puppet::Util
|
6
|
+
Puppet::Util.logmethods(self)
|
7
|
+
|
8
|
+
def initialize(scope, file)
|
9
|
+
@scope = scope
|
10
|
+
@file = Puppet::Module::find_template(file)
|
11
|
+
|
12
|
+
unless FileTest.exists?(@file)
|
13
|
+
raise Puppet::ParseError,
|
14
|
+
"Could not find template %s" % file
|
15
|
+
end
|
16
|
+
|
17
|
+
# We'll only ever not have an interpreter in testing, but, eh.
|
18
|
+
if @scope.interp
|
19
|
+
@scope.interp.newfile(@file)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Ruby treats variables like methods, so we can cheat here and
|
24
|
+
# trap missing vars like they were missing methods.
|
25
|
+
def method_missing(name, *args)
|
26
|
+
# We have to tell lookupvar to return :undefined to us when
|
27
|
+
# appropriate; otherwise it converts to "".
|
28
|
+
value = @scope.lookupvar(name.to_s, false)
|
29
|
+
if value != :undefined
|
30
|
+
return value
|
31
|
+
else
|
32
|
+
# Just throw an error immediately, instead of searching for
|
33
|
+
# other missingmethod things or whatever.
|
34
|
+
raise Puppet::ParseError,
|
35
|
+
"Could not find value for '%s'" % name
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def result
|
40
|
+
result = nil
|
41
|
+
benchmark(:debug, "Interpolated template #{@file}") do
|
42
|
+
template = ERB.new(File.read(@file), 0, "-")
|
43
|
+
result = template.result(binding)
|
44
|
+
end
|
45
|
+
|
46
|
+
result
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
"template[%s]" % @file
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# $Id: templatewrapper.rb 2277 2007-03-09 00:48:28Z lutter $
|
@@ -0,0 +1,208 @@
|
|
1
|
+
# Created by Luke A. Kanies on 2006-11-24.
|
2
|
+
# Copyright (c) 2006. All rights reserved.
|
3
|
+
|
4
|
+
require 'puppet/external/gratr/digraph'
|
5
|
+
require 'puppet/external/gratr/import'
|
6
|
+
require 'puppet/external/gratr/dot'
|
7
|
+
require 'puppet/relationship'
|
8
|
+
|
9
|
+
# This class subclasses a graph class in order to handle relationships
|
10
|
+
# among resources.
|
11
|
+
class Puppet::PGraph < GRATR::Digraph
|
12
|
+
# This is the type used for splicing.
|
13
|
+
attr_accessor :container_type
|
14
|
+
|
15
|
+
include Puppet::Util
|
16
|
+
|
17
|
+
def add_edge!(*args)
|
18
|
+
@reversal = nil
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_vertex!(*args)
|
23
|
+
@reversal = nil
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def clear
|
28
|
+
@vertex_dict.clear
|
29
|
+
if defined? @edge_number
|
30
|
+
@edge_number.clear
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Make sure whichever edge has a label keeps the label
|
35
|
+
def copy_label(source, target, label)
|
36
|
+
# 'require' relationships will not have a label,
|
37
|
+
# and all 'subscribe' relationships have the same
|
38
|
+
# label, at least for now.
|
39
|
+
|
40
|
+
# Labels default to {}, so we can't just test for nil.
|
41
|
+
newlabel = label || {}
|
42
|
+
oldlabel = edge_label(source, target) || {}
|
43
|
+
if ! newlabel.empty? and oldlabel.empty?
|
44
|
+
edge_label_set(source, target, label)
|
45
|
+
# We should probably check to see if the labels both exist
|
46
|
+
# and don't match, but we'd just throw an error which the user
|
47
|
+
# couldn't do anyting about.
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Fail in a somewhat informative way if the graph has become cyclic.
|
52
|
+
def check_cycle(sorted)
|
53
|
+
return true if sorted.size == size()
|
54
|
+
|
55
|
+
bad = []
|
56
|
+
vertices.each do |v|
|
57
|
+
bad << v unless sorted.include?(v)
|
58
|
+
end
|
59
|
+
|
60
|
+
if bad.length > 0
|
61
|
+
raise Puppet::Error,
|
62
|
+
"Found dependency cycle involving %s" % bad.collect do |v|
|
63
|
+
v.to_s
|
64
|
+
end.join(", ")
|
65
|
+
else
|
66
|
+
raise Puppet::Error,
|
67
|
+
"Found dependency cycle but could not find the cause"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Which resources a given resource depends upon.
|
72
|
+
def dependents(resource)
|
73
|
+
tree_from_vertex2(resource).keys
|
74
|
+
end
|
75
|
+
|
76
|
+
# Which resources depend upon the given resource.
|
77
|
+
def dependencies(resource)
|
78
|
+
# Cache the reversal graph, because it's somewhat expensive
|
79
|
+
# to create.
|
80
|
+
unless defined? @reversal and @reversal
|
81
|
+
@reversal = reversal
|
82
|
+
end
|
83
|
+
# Strangely, it's significantly faster to search a reversed
|
84
|
+
# tree in the :out direction than to search a normal tree
|
85
|
+
# in the :in direction.
|
86
|
+
@reversal.tree_from_vertex2(resource, :out).keys
|
87
|
+
#tree_from_vertex2(resource, :in).keys
|
88
|
+
end
|
89
|
+
|
90
|
+
# Override this method to use our class instead.
|
91
|
+
def edge_class()
|
92
|
+
Puppet::Relationship
|
93
|
+
end
|
94
|
+
|
95
|
+
# Determine all of the leaf nodes below a given vertex.
|
96
|
+
def leaves(vertex, type = :dfs)
|
97
|
+
tree = tree_from_vertex(vertex, type)
|
98
|
+
l = tree.keys.find_all { |c| adjacent(c, :direction => :out).empty? }
|
99
|
+
return l
|
100
|
+
end
|
101
|
+
|
102
|
+
# Collect all of the edges that the passed events match. Returns
|
103
|
+
# an array of edges.
|
104
|
+
def matching_edges(events, base = nil)
|
105
|
+
events.collect do |event|
|
106
|
+
source = base || event.source
|
107
|
+
|
108
|
+
unless vertex?(source)
|
109
|
+
Puppet.warning "Got an event from invalid vertex %s" % source.ref
|
110
|
+
next
|
111
|
+
end
|
112
|
+
# Get all of the edges that this vertex should forward events
|
113
|
+
# to, which is the same thing as saying all edges directly below
|
114
|
+
# This vertex in the graph.
|
115
|
+
adjacent(source, :direction => :out, :type => :edges).find_all do |edge|
|
116
|
+
edge.match?(event.event)
|
117
|
+
end
|
118
|
+
end.flatten
|
119
|
+
end
|
120
|
+
|
121
|
+
# Take container information from another graph and use it
|
122
|
+
# to replace any container vertices with their respective leaves.
|
123
|
+
# This creates direct relationships where there were previously
|
124
|
+
# indirect relationships through the containers.
|
125
|
+
def splice!(other, type)
|
126
|
+
# We have to get the container list via a topological sort on the
|
127
|
+
# configuration graph, because otherwise containers that contain
|
128
|
+
# other containers will add those containers back into the
|
129
|
+
# graph. We could get a similar affect by only setting relationships
|
130
|
+
# to container leaves, but that would result in many more
|
131
|
+
# relationships.
|
132
|
+
containers = other.topsort.find_all { |v| v.is_a?(type) and vertex?(v) }
|
133
|
+
containers.each do |container|
|
134
|
+
# Get the list of children from the other graph.
|
135
|
+
children = other.adjacent(container, :direction => :out)
|
136
|
+
|
137
|
+
# Just remove the container if it's empty.
|
138
|
+
if children.empty?
|
139
|
+
remove_vertex!(container)
|
140
|
+
next
|
141
|
+
end
|
142
|
+
|
143
|
+
# First create new edges for each of the :in edges
|
144
|
+
[:in, :out].each do |dir|
|
145
|
+
edges = adjacent(container, :direction => dir, :type => :edges)
|
146
|
+
edges.each do |edge|
|
147
|
+
children.each do |child|
|
148
|
+
if dir == :in
|
149
|
+
s = edge.source
|
150
|
+
t = child
|
151
|
+
else
|
152
|
+
s = child
|
153
|
+
t = edge.target
|
154
|
+
end
|
155
|
+
|
156
|
+
# We don't want to add multiple copies of the
|
157
|
+
# same edge, but we *do* want to make sure we
|
158
|
+
# keep labels around.
|
159
|
+
# XXX This will *not* work when we support multiple
|
160
|
+
# types of labels, and only works now because
|
161
|
+
# you can only do simple subscriptions.
|
162
|
+
if edge?(s, t)
|
163
|
+
copy_label(s, t, edge.label)
|
164
|
+
next
|
165
|
+
end
|
166
|
+
add_edge!(s, t, edge.label)
|
167
|
+
end
|
168
|
+
|
169
|
+
# Now get rid of the edge, so remove_vertex! works correctly.
|
170
|
+
remove_edge!(edge)
|
171
|
+
Puppet.debug "%s: %s => %s: %s" % [container,
|
172
|
+
edge.source, edge.target, edge?(edge)]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
remove_vertex!(container)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
# For some reason, unconnected vertices do not show up in
|
180
|
+
# this graph.
|
181
|
+
def to_jpg(path, name)
|
182
|
+
gv = vertices()
|
183
|
+
Dir.chdir(path) do
|
184
|
+
induced_subgraph(gv).write_to_graphic_file('jpg', name)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# A different way of walking a tree, and a much faster way than the
|
189
|
+
# one that comes with GRATR.
|
190
|
+
def tree_from_vertex2(start, direction = :out)
|
191
|
+
predecessor={}
|
192
|
+
walk(start, direction) do |parent, child|
|
193
|
+
predecessor[child] = parent
|
194
|
+
end
|
195
|
+
predecessor
|
196
|
+
end
|
197
|
+
|
198
|
+
# A support method for tree_from_vertex2. Just walk the tree and pass
|
199
|
+
# the parents and children.
|
200
|
+
def walk(source, direction, &block)
|
201
|
+
adjacent(source, :direction => direction).each do |target|
|
202
|
+
yield source, target
|
203
|
+
walk(target, direction, &block)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# $Id: pgraph.rb 2308 2007-03-19 04:40:25Z luke $
|
@@ -0,0 +1,143 @@
|
|
1
|
+
# the class responsible for actually doing any work
|
2
|
+
|
3
|
+
# enables no-op and logging/rollback
|
4
|
+
|
5
|
+
module Puppet
|
6
|
+
# Handle all of the work around performing an actual change,
|
7
|
+
# including calling 'sync' on the properties and producing events.
|
8
|
+
class PropertyChange
|
9
|
+
attr_accessor :is, :should, :type, :path, :property, :transaction, :changed, :proxy
|
10
|
+
|
11
|
+
# The log file generated when this object was changed.
|
12
|
+
attr_reader :report
|
13
|
+
|
14
|
+
# Switch the goals of the property, thus running the change in reverse.
|
15
|
+
def backward
|
16
|
+
@property.should = @is
|
17
|
+
@property.retrieve
|
18
|
+
|
19
|
+
unless defined? @transaction
|
20
|
+
raise Puppet::Error,
|
21
|
+
"PropertyChange '%s' tried to be executed outside of transaction" %
|
22
|
+
self
|
23
|
+
end
|
24
|
+
unless @property.insync?
|
25
|
+
@property.info "Backing %s" % self
|
26
|
+
return self.go
|
27
|
+
else
|
28
|
+
@property.debug "rollback is already in sync: %s vs. %s" %
|
29
|
+
[@property.is.inspect, @property.should.inspect]
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def changed?
|
35
|
+
self.changed
|
36
|
+
end
|
37
|
+
|
38
|
+
# Create our event object.
|
39
|
+
def event(name)
|
40
|
+
# default to a simple event type
|
41
|
+
unless name.is_a?(Symbol)
|
42
|
+
@property.warning("Property '%s' returned invalid event '%s'; resetting to default" %
|
43
|
+
[@property.class,event])
|
44
|
+
|
45
|
+
event = @property.parent.class.name.id2name + "_changed"
|
46
|
+
end
|
47
|
+
|
48
|
+
Puppet::Event.new(
|
49
|
+
:event => name,
|
50
|
+
:transaction => @transaction,
|
51
|
+
:source => self.source
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize(property)
|
56
|
+
unless property.is_a?(Puppet::Type::Property)
|
57
|
+
raise Puppet::DevError, "Got a %s instead of a property" %
|
58
|
+
property.class
|
59
|
+
end
|
60
|
+
@property = property
|
61
|
+
@path = [property.path,"change"].flatten
|
62
|
+
@is = property.is
|
63
|
+
|
64
|
+
@should = property.should
|
65
|
+
|
66
|
+
@changed = false
|
67
|
+
end
|
68
|
+
|
69
|
+
# Perform the actual change. This method can go either forward or
|
70
|
+
# backward, and produces an event.
|
71
|
+
def go
|
72
|
+
if skip?
|
73
|
+
if self.noop
|
74
|
+
return [event(:noop)]
|
75
|
+
else
|
76
|
+
return nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# The transaction catches any exceptions here.
|
81
|
+
events = @property.sync
|
82
|
+
if events.nil?
|
83
|
+
return nil
|
84
|
+
end
|
85
|
+
|
86
|
+
if events.is_a?(Array)
|
87
|
+
if events.empty?
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
else
|
91
|
+
events = [events]
|
92
|
+
end
|
93
|
+
|
94
|
+
return events.collect { |name|
|
95
|
+
@report = @property.log(@property.change_to_s)
|
96
|
+
event(name)
|
97
|
+
}
|
98
|
+
end
|
99
|
+
|
100
|
+
def forward
|
101
|
+
#@property.debug "moving change forward"
|
102
|
+
|
103
|
+
unless defined? @transaction
|
104
|
+
raise Puppet::Error,
|
105
|
+
"PropertyChange '%s' tried to be executed outside of transaction" %
|
106
|
+
self
|
107
|
+
end
|
108
|
+
|
109
|
+
return self.go
|
110
|
+
end
|
111
|
+
|
112
|
+
def noop
|
113
|
+
return @property.noop
|
114
|
+
end
|
115
|
+
|
116
|
+
def skip?
|
117
|
+
if @property.insync?
|
118
|
+
@property.info "Already in sync"
|
119
|
+
return true
|
120
|
+
end
|
121
|
+
|
122
|
+
if @property.noop
|
123
|
+
@property.log "is %s, should be %s (noop)" %
|
124
|
+
[property.is_to_s, property.should_to_s]
|
125
|
+
#@property.debug "%s is noop" % @property
|
126
|
+
return true
|
127
|
+
end
|
128
|
+
return false
|
129
|
+
end
|
130
|
+
|
131
|
+
def source
|
132
|
+
self.proxy || @property.parent
|
133
|
+
end
|
134
|
+
|
135
|
+
def to_s
|
136
|
+
return "change %s.%s(%s)" %
|
137
|
+
[@transaction.object_id, self.object_id, @property.change_to_s]
|
138
|
+
#return "change %s.%s" % [@transaction.object_id, self.object_id]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# $Id: propertychange.rb 2286 2007-03-17 23:16:37Z luke $
|
@@ -0,0 +1,302 @@
|
|
1
|
+
# The container class for implementations.
|
2
|
+
class Puppet::Provider
|
3
|
+
include Puppet::Util
|
4
|
+
include Puppet::Util::Errors
|
5
|
+
|
6
|
+
Puppet::Util.logmethods(self, true)
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Include the util module so we have access to things like 'binary'
|
10
|
+
include Puppet::Util, Puppet::Util::Docs
|
11
|
+
include Puppet::Util::Logging
|
12
|
+
attr_accessor :name
|
13
|
+
attr_reader :model
|
14
|
+
attr_writer :doc
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_accessor :model
|
18
|
+
|
19
|
+
def self.command(name)
|
20
|
+
name = symbolize(name)
|
21
|
+
|
22
|
+
if defined?(@commands) and command = @commands[name]
|
23
|
+
# nothing
|
24
|
+
elsif superclass.respond_to? :command and command = superclass.command(name)
|
25
|
+
# nothing
|
26
|
+
else
|
27
|
+
raise Puppet::DevError, "No command %s defined for provider %s" %
|
28
|
+
[name, self.name]
|
29
|
+
end
|
30
|
+
|
31
|
+
if command == :missing
|
32
|
+
return nil
|
33
|
+
end
|
34
|
+
|
35
|
+
command
|
36
|
+
end
|
37
|
+
|
38
|
+
# Define commands that are not optional.
|
39
|
+
def self.commands(hash)
|
40
|
+
optional_commands(hash) do |name, path|
|
41
|
+
confine :exists => path
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.confine(hash)
|
46
|
+
hash.each do |p,v|
|
47
|
+
if v.is_a? Array
|
48
|
+
@confines[p] += v
|
49
|
+
else
|
50
|
+
@confines[p] << v
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Does this implementation match all of the default requirements? If
|
56
|
+
# defaults are empty, we return false.
|
57
|
+
def self.default?
|
58
|
+
return false if @defaults.empty?
|
59
|
+
if @defaults.find do |fact, values|
|
60
|
+
values = [values] unless values.is_a? Array
|
61
|
+
if fval = Facter.value(fact).to_s and fval != ""
|
62
|
+
fval = fval.to_s.downcase.intern
|
63
|
+
else
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
|
67
|
+
# If any of the values match, we're a default.
|
68
|
+
if values.find do |value| fval == value.to_s.downcase.intern end
|
69
|
+
false
|
70
|
+
else
|
71
|
+
true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
return false
|
75
|
+
else
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Store how to determine defaults.
|
81
|
+
def self.defaultfor(hash)
|
82
|
+
hash.each do |d,v|
|
83
|
+
@defaults[d] = v
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.defaultnum
|
88
|
+
@defaults.length
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.initvars
|
92
|
+
@defaults = {}
|
93
|
+
@commands = {}
|
94
|
+
@origcommands = {}
|
95
|
+
@confines = Hash.new do |hash, key|
|
96
|
+
hash[key] = []
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Create the methods for a given command.
|
101
|
+
def self.make_command_methods(name)
|
102
|
+
# Now define a method for that command
|
103
|
+
unless metaclass.method_defined? name
|
104
|
+
meta_def(name) do |*args|
|
105
|
+
unless command(name)
|
106
|
+
raise Puppet::Error, "Command %s is missing" % name
|
107
|
+
end
|
108
|
+
if args.empty?
|
109
|
+
cmd = [command(name)]
|
110
|
+
else
|
111
|
+
cmd = [command(name)] + args
|
112
|
+
end
|
113
|
+
# This might throw an ExecutionFailure, but the system above
|
114
|
+
# will catch it, if so.
|
115
|
+
return execute(cmd)
|
116
|
+
end
|
117
|
+
|
118
|
+
# And then define an instance method that just calls the class method.
|
119
|
+
# We need both, so both instances and classes can easily run the commands.
|
120
|
+
unless method_defined? name
|
121
|
+
define_method(name) do |*args|
|
122
|
+
self.class.send(name, *args)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Create getter/setter methods for each property our model supports.
|
129
|
+
# They all get stored in @property_hash. This method is useful
|
130
|
+
# for those providers that use prefetch and flush.
|
131
|
+
def self.mkmodelmethods
|
132
|
+
[model.validproperties, model.parameters].flatten.each do |attr|
|
133
|
+
attr = symbolize(attr)
|
134
|
+
define_method(attr) do
|
135
|
+
@property_hash[attr] || :absent
|
136
|
+
end
|
137
|
+
|
138
|
+
define_method(attr.to_s + "=") do |val|
|
139
|
+
@property_hash[attr] = val
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Add the feature module immediately, so its methods are available to the
|
145
|
+
# providers.
|
146
|
+
def self.model=(model)
|
147
|
+
@model = model
|
148
|
+
#if mod = model.feature_module
|
149
|
+
# extend(mod)
|
150
|
+
# include(mod)
|
151
|
+
#end
|
152
|
+
end
|
153
|
+
|
154
|
+
self.initvars
|
155
|
+
|
156
|
+
# Define one or more binaries we'll be using. If a block is passed, yield the name
|
157
|
+
# and path to the block (really only used by 'commands').
|
158
|
+
def self.optional_commands(hash)
|
159
|
+
hash.each do |name, path|
|
160
|
+
name = symbolize(name)
|
161
|
+
@origcommands[name] = path
|
162
|
+
|
163
|
+
# Try to find the full path (or verify already-full paths); otherwise
|
164
|
+
# store that the command is missing so we know it's defined but absent.
|
165
|
+
if tmp = binary(path)
|
166
|
+
path = tmp
|
167
|
+
@commands[name] = path
|
168
|
+
else
|
169
|
+
@commands[name] = :missing
|
170
|
+
end
|
171
|
+
|
172
|
+
if block_given?
|
173
|
+
yield(name, path)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Now define the class and instance methods.
|
177
|
+
make_command_methods(name)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# Check whether this implementation is suitable for our platform.
|
182
|
+
def self.suitable?
|
183
|
+
# A single false result is sufficient to turn the whole thing down.
|
184
|
+
# We don't return 'true' until the very end, though, so that every
|
185
|
+
# confine is tested.
|
186
|
+
@confines.each do |check, values|
|
187
|
+
case check
|
188
|
+
when :exists:
|
189
|
+
values.each do |value|
|
190
|
+
unless value and FileTest.exists? value
|
191
|
+
debug "Not suitable: missing %s" % value
|
192
|
+
return false
|
193
|
+
end
|
194
|
+
end
|
195
|
+
when :true:
|
196
|
+
values.each do |v|
|
197
|
+
debug "Not suitable: false value"
|
198
|
+
return false unless v
|
199
|
+
end
|
200
|
+
when :false:
|
201
|
+
values.each do |v|
|
202
|
+
debug "Not suitable: true value"
|
203
|
+
return false if v
|
204
|
+
end
|
205
|
+
else # Just delegate everything else to facter
|
206
|
+
if result = Facter.value(check)
|
207
|
+
result = result.to_s.downcase.intern
|
208
|
+
|
209
|
+
found = values.find do |v|
|
210
|
+
result == v.to_s.downcase.intern
|
211
|
+
end
|
212
|
+
unless found
|
213
|
+
debug "Not suitable: %s not in %s" % [check, values]
|
214
|
+
return false
|
215
|
+
end
|
216
|
+
else
|
217
|
+
return false
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
return true
|
223
|
+
end
|
224
|
+
|
225
|
+
# Does this provider support the specified parameter?
|
226
|
+
def self.supports_parameter?(param)
|
227
|
+
if param.is_a?(Class)
|
228
|
+
klass = param
|
229
|
+
else
|
230
|
+
unless klass = @model.attrclass(param)
|
231
|
+
raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, @model.name]
|
232
|
+
end
|
233
|
+
end
|
234
|
+
return true unless features = klass.required_features
|
235
|
+
|
236
|
+
if satisfies?(*features)
|
237
|
+
return true
|
238
|
+
else
|
239
|
+
return false
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def self.to_s
|
244
|
+
unless defined? @str
|
245
|
+
if self.model
|
246
|
+
@str = "%s provider %s" % [@model.name, self.name]
|
247
|
+
else
|
248
|
+
@str = "unattached provider %s" % [self.name]
|
249
|
+
end
|
250
|
+
end
|
251
|
+
@str
|
252
|
+
end
|
253
|
+
|
254
|
+
dochook(:defaults) do
|
255
|
+
if @defaults.length > 0
|
256
|
+
return " Default for " + @defaults.collect do |f, v|
|
257
|
+
"``#{f}`` == ``#{v}``"
|
258
|
+
end.join(" and ") + "."
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
dochook(:commands) do
|
263
|
+
if @origcommands.length > 0
|
264
|
+
return " Required binaries: " + @origcommands.collect do |n, c|
|
265
|
+
"``#{c}``"
|
266
|
+
end.join(", ") + "."
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
dochook(:features) do
|
271
|
+
if features().length > 0
|
272
|
+
return " Supported features: " + features().collect do |f|
|
273
|
+
"``#{f}``"
|
274
|
+
end.join(", ") + "."
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
# Remove the reference to the model, so GC can clean up.
|
279
|
+
def clear
|
280
|
+
@model = nil
|
281
|
+
end
|
282
|
+
|
283
|
+
# Retrieve a named command.
|
284
|
+
def command(name)
|
285
|
+
self.class.command(name)
|
286
|
+
end
|
287
|
+
|
288
|
+
def initialize(model)
|
289
|
+
@model = model
|
290
|
+
@property_hash = {}
|
291
|
+
end
|
292
|
+
|
293
|
+
def name
|
294
|
+
@model.name
|
295
|
+
end
|
296
|
+
|
297
|
+
def to_s
|
298
|
+
"%s(provider=%s)" % [@model.to_s, self.class.name]
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
# $Id: provider.rb 2444 2007-05-01 03:14:09Z luke $
|