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,153 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2006 Shawn Patrick Garbett
|
3
|
+
# Copyright (c) 2002,2004,2005 by Horst Duchene
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
# are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice(s),
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer in the documentation
|
12
|
+
# and/or other materials provided with the distribution.
|
13
|
+
# * Neither the name of the Shawn Garbett nor the names of its contributors
|
14
|
+
# may be used to endorse or promote products derived from this software
|
15
|
+
# without specific prior written permission.
|
16
|
+
#
|
17
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
18
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
20
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
21
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
22
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
23
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
24
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
25
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
#++
|
28
|
+
|
29
|
+
|
30
|
+
require 'puppet/external/gratr/adjacency_graph'
|
31
|
+
require 'puppet/external/gratr/search'
|
32
|
+
require 'puppet/external/gratr/biconnected'
|
33
|
+
require 'puppet/external/gratr/comparability'
|
34
|
+
require 'set'
|
35
|
+
|
36
|
+
module GRATR
|
37
|
+
class UndirectedGraph
|
38
|
+
include AdjacencyGraph
|
39
|
+
include Graph::Search
|
40
|
+
include Graph::Biconnected
|
41
|
+
include Graph::Comparability
|
42
|
+
|
43
|
+
def initialize(*params)
|
44
|
+
raise ArgumentError if params.any? do |p|
|
45
|
+
!(p.kind_of? GRATR::Graph or p.kind_of? Array)
|
46
|
+
end if self.class == GRATR::UndirectedGraph
|
47
|
+
super(*params)
|
48
|
+
end
|
49
|
+
|
50
|
+
# UndirectedGraph is by definition undirected, always returns false
|
51
|
+
def directed?() false; end
|
52
|
+
|
53
|
+
# Redefine degree (default was sum)
|
54
|
+
def degree(v) in_degree(v); end
|
55
|
+
|
56
|
+
# A vertex of an undirected graph is balanced by definition
|
57
|
+
def balanced?(v) true; end
|
58
|
+
|
59
|
+
# UndirectedGraph uses UndirectedEdge for the edge class.
|
60
|
+
def edge_class() @parallel_edges ? GRATR::MultiUndirectedEdge : GRATR::UndirectedEdge; end
|
61
|
+
|
62
|
+
def remove_edge!(u, v=nil)
|
63
|
+
unless u.kind_of? GRATR::Edge
|
64
|
+
raise ArgumentError if @parallel_edges
|
65
|
+
u = edge_class[u,v]
|
66
|
+
end
|
67
|
+
super(u.reverse) unless u.source == u.target
|
68
|
+
super(u)
|
69
|
+
end
|
70
|
+
|
71
|
+
# A triangulated graph is an undirected perfect graph that every cycle of length greater than
|
72
|
+
# three possesses a chord. They have also been called chordal, rigid circuit, monotone transitive,
|
73
|
+
# and perfect elimination graphs.
|
74
|
+
#
|
75
|
+
# Implementation taken from Golumbic's, "Algorithmic Graph Theory and
|
76
|
+
# Perfect Graphs" pg. 90
|
77
|
+
def triangulated?
|
78
|
+
a = Hash.new {|h,k| h[k]=Set.new}; sigma=lexicograph_bfs
|
79
|
+
inv_sigma = sigma.inject({}) {|acc,val| acc[val] = sigma.index(val); acc}
|
80
|
+
sigma[0..-2].each do |v|
|
81
|
+
x = adjacent(v).select {|w| inv_sigma[v] < inv_sigma[w] }
|
82
|
+
unless x.empty?
|
83
|
+
u = sigma[x.map {|y| inv_sigma[y]}.min]
|
84
|
+
a[u].merge(x - [u])
|
85
|
+
end
|
86
|
+
return false unless a[v].all? {|z| adjacent?(v,z)}
|
87
|
+
end
|
88
|
+
true
|
89
|
+
end
|
90
|
+
|
91
|
+
def chromatic_number
|
92
|
+
return triangulated_chromatic_number if triangulated?
|
93
|
+
raise NotImplementedError
|
94
|
+
end
|
95
|
+
|
96
|
+
# An interval graph can have its vertices into one-to-one
|
97
|
+
# correspondence with a set of intervals F of a linearly ordered
|
98
|
+
# set (like the real line) such that two vertices are connected
|
99
|
+
# by an edge of G if and only if their corresponding intervals
|
100
|
+
# have nonempty intersection.
|
101
|
+
def interval?() triangulated? and complement.comparability?; end
|
102
|
+
|
103
|
+
# A permutation diagram consists of n points on each of two parallel
|
104
|
+
# lines and n straight line segments matchin the points. The intersection
|
105
|
+
# graph of the line segments is called a permutation graph.
|
106
|
+
def permutation?() comparability? and complement.comparability?; end
|
107
|
+
|
108
|
+
# An undirected graph is defined to be split if there is a partition
|
109
|
+
# V = S + K of its vertex set into a stable set S and a complete set K.
|
110
|
+
def split?() triangulated? and complement.triangulated?; end
|
111
|
+
|
112
|
+
private
|
113
|
+
# Implementation taken from Golumbic's, "Algorithmic Graph Theory and
|
114
|
+
# Perfect Graphs" pg. 99
|
115
|
+
def triangulated_chromatic_number
|
116
|
+
chi = 1; s= Hash.new {|h,k| h[k]=0}
|
117
|
+
sigma=lexicograph_bfs
|
118
|
+
inv_sigma = sigma.inject({}) {|acc,val| acc[val] = sigma.index(val); acc}
|
119
|
+
sigma.each do |v|
|
120
|
+
x = adjacent(v).select {|w| inv_sigma[v] < inv_sigma[w] }
|
121
|
+
unless x.empty?
|
122
|
+
u = sigma[x.map {|y| inv_sigma[y]}.min]
|
123
|
+
s[u] = [s[u], x.size-1].max
|
124
|
+
chi = [chi, x.size+1].max if s[v] < x.size
|
125
|
+
end
|
126
|
+
end; chi
|
127
|
+
end
|
128
|
+
|
129
|
+
end # UndirectedGraph
|
130
|
+
|
131
|
+
# This is a UndirectedGraph that allows for parallel edges, but does not
|
132
|
+
# allow loops
|
133
|
+
class UndirectedPseudoGraph < UndirectedGraph
|
134
|
+
def initialize(*params)
|
135
|
+
raise ArgumentError if params.any? do |p|
|
136
|
+
!(p.kind_of? Graph or p.kind_of? Array)
|
137
|
+
end
|
138
|
+
super(:parallel_edges, *params)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# This is a UndirectedGraph that allows for parallel edges and loops
|
143
|
+
class UndirectedMultiGraph < UndirectedGraph
|
144
|
+
def initialize(*params)
|
145
|
+
raise ArgumentError if params.any? do |p|
|
146
|
+
!(p.kind_of? Graph or p.kind_of? Array)
|
147
|
+
end
|
148
|
+
super(:parallel_edges, :loops, *params)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
end # GRATR
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Created by Luke Kanies on 2006-04-30.
|
2
|
+
# Copyright (c) 2006. All rights reserved.
|
3
|
+
|
4
|
+
require 'puppet/util/feature'
|
5
|
+
|
6
|
+
# Add the simple features, all in one file.
|
7
|
+
|
8
|
+
# We've got LDAP available.
|
9
|
+
Puppet.features.add(:ldap, :libs => ["ldap"])
|
10
|
+
|
11
|
+
# We have the Rdoc::Usage library.
|
12
|
+
Puppet.features.add(:usage, :libs => %w{rdoc/ri/ri_paths rdoc/usage})
|
13
|
+
|
14
|
+
# We have libshadow, useful for managing passwords.
|
15
|
+
Puppet.features.add(:libshadow, :libs => ["shadow"])
|
16
|
+
|
17
|
+
# We're running as root.
|
18
|
+
Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 }
|
19
|
+
|
20
|
+
# $Id: base.rb 2441 2007-04-30 19:41:18Z luke $
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Created by Luke Kanies on 2006-11-07.
|
2
|
+
# Copyright (c) 2006. All rights reserved.
|
3
|
+
|
4
|
+
require 'puppet/util/feature'
|
5
|
+
|
6
|
+
Puppet.features.add(:rails) do
|
7
|
+
begin
|
8
|
+
require 'active_record'
|
9
|
+
rescue LoadError => detail
|
10
|
+
if Facter["operatingsystem"].value == "Debian" and
|
11
|
+
FileTest.exists?("/usr/share/rails")
|
12
|
+
count = 0
|
13
|
+
Dir.entries("/usr/share/rails").each do |dir|
|
14
|
+
libdir = File.join("/usr/share/rails", dir, "lib")
|
15
|
+
if FileTest.exists?(libdir) and ! $:.include?(libdir)
|
16
|
+
count += 1
|
17
|
+
$: << libdir
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if count > 0
|
22
|
+
retry
|
23
|
+
end
|
24
|
+
else
|
25
|
+
#If ActiveRecord was installed only via rubygems this is required
|
26
|
+
require 'rubygems'
|
27
|
+
require 'active_record'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# If we couldn't find it the normal way, try using a Gem.
|
32
|
+
unless defined? ActiveRecord
|
33
|
+
begin
|
34
|
+
require 'rubygems'
|
35
|
+
require 'rails'
|
36
|
+
rescue LoadError
|
37
|
+
# Nothing
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# We check a fairly specific class, so that we can be sure that we've
|
42
|
+
# loaded a new enough version of AR that will support the features we
|
43
|
+
# actually use.
|
44
|
+
if defined? ActiveRecord::Associations::BelongsToPolymorphicAssociation
|
45
|
+
require 'puppet/rails'
|
46
|
+
true
|
47
|
+
else
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# $Id: rails.rb 2195 2007-02-15 22:36:38Z shadoi $
|
@@ -0,0 +1,719 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'puppet/type'
|
3
|
+
|
4
|
+
class Puppet::Type
|
5
|
+
class << self
|
6
|
+
include Puppet::Util::ClassGen
|
7
|
+
include Puppet::Util::Warnings
|
8
|
+
attr_reader :properties
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.states
|
12
|
+
warnonce "The states method is deprecated; use properties"
|
13
|
+
properties()
|
14
|
+
end
|
15
|
+
|
16
|
+
# All parameters, in the appropriate order. The namevar comes first,
|
17
|
+
# then the properties, then the params and metaparams in the order they
|
18
|
+
# were specified in the files.
|
19
|
+
def self.allattrs
|
20
|
+
# now get all of the arguments, in a specific order
|
21
|
+
# Cache this, since it gets called so many times
|
22
|
+
namevar = self.namevar
|
23
|
+
|
24
|
+
order = [namevar]
|
25
|
+
if self.parameters.include?(:provider)
|
26
|
+
order << :provider
|
27
|
+
end
|
28
|
+
order << [self.properties.collect { |property| property.name },
|
29
|
+
self.parameters - [:provider],
|
30
|
+
self.metaparams].flatten.reject { |param|
|
31
|
+
# we don't want our namevar in there multiple times
|
32
|
+
param == namevar
|
33
|
+
}
|
34
|
+
|
35
|
+
order.flatten!
|
36
|
+
|
37
|
+
return order
|
38
|
+
end
|
39
|
+
|
40
|
+
# Retrieve an attribute alias, if there is one.
|
41
|
+
def self.attr_alias(param)
|
42
|
+
@attr_aliases[symbolize(param)]
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create an alias to an existing attribute. This will cause the aliased
|
46
|
+
# attribute to be valid when setting and retrieving values on the instance.
|
47
|
+
def self.set_attr_alias(hash)
|
48
|
+
hash.each do |new, old|
|
49
|
+
@attr_aliases[symbolize(new)] = symbolize(old)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Find the class associated with any given attribute.
|
54
|
+
def self.attrclass(name)
|
55
|
+
@attrclasses ||= {}
|
56
|
+
|
57
|
+
# We cache the value, since this method gets called such a huge number
|
58
|
+
# of times (as in, hundreds of thousands in a given run).
|
59
|
+
unless @attrclasses.include?(name)
|
60
|
+
@attrclasses[name] = case self.attrtype(name)
|
61
|
+
when :property: @validproperties[name]
|
62
|
+
when :meta: @@metaparamhash[name]
|
63
|
+
when :param: @paramhash[name]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
@attrclasses[name]
|
67
|
+
end
|
68
|
+
|
69
|
+
# What type of parameter are we dealing with? Cache the results, because
|
70
|
+
# this method gets called so many times.
|
71
|
+
def self.attrtype(attr)
|
72
|
+
@attrtypes ||= {}
|
73
|
+
unless @attrtypes.include?(attr)
|
74
|
+
@attrtypes[attr] = case
|
75
|
+
when @validproperties.include?(attr): :property
|
76
|
+
when @paramhash.include?(attr): :param
|
77
|
+
when @@metaparamhash.include?(attr): :meta
|
78
|
+
else
|
79
|
+
raise Puppet::DevError,
|
80
|
+
"Invalid attribute '%s' for class '%s'" %
|
81
|
+
[attr, self.name]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
@attrtypes[attr]
|
86
|
+
end
|
87
|
+
|
88
|
+
# Copy an existing class parameter. This allows other types to avoid
|
89
|
+
# duplicating a parameter definition, and is mostly used by subclasses
|
90
|
+
# of the File class.
|
91
|
+
def self.copyparam(klass, name)
|
92
|
+
param = klass.attrclass(name)
|
93
|
+
|
94
|
+
unless param
|
95
|
+
raise Puppet::DevError, "Class %s has no param %s" % [klass, name]
|
96
|
+
end
|
97
|
+
@parameters << param
|
98
|
+
@parameters.each { |p| @paramhash[name] = p }
|
99
|
+
|
100
|
+
if param.isnamevar?
|
101
|
+
@namevar = param.name
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# A similar function but one that yields the class and type.
|
106
|
+
# This is mainly so that setdefaults doesn't call quite so many functions.
|
107
|
+
def self.eachattr(*ary)
|
108
|
+
if ary.empty?
|
109
|
+
ary = nil
|
110
|
+
end
|
111
|
+
|
112
|
+
# We have to do this in a specific order, so that defaults are
|
113
|
+
# created in that order (e.g., providers should be set up before
|
114
|
+
# anything else).
|
115
|
+
allattrs.each do |name|
|
116
|
+
next unless ary.nil? or ary.include?(name)
|
117
|
+
if obj = @properties.find { |p| p.name == name }
|
118
|
+
yield obj, :property
|
119
|
+
elsif obj = @parameters.find { |p| p.name == name }
|
120
|
+
yield obj, :param
|
121
|
+
elsif obj = @@metaparams.find { |p| p.name == name }
|
122
|
+
yield obj, :meta
|
123
|
+
else
|
124
|
+
raise Puppet::DevError, "Could not find parameter %s" % name
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.eachmetaparam
|
130
|
+
@@metaparams.each { |p| yield p.name }
|
131
|
+
end
|
132
|
+
|
133
|
+
# Create the 'ensure' class. This is a separate method so other types
|
134
|
+
# can easily call it and create their own 'ensure' values.
|
135
|
+
def self.ensurable(&block)
|
136
|
+
if block_given?
|
137
|
+
self.newproperty(:ensure, :parent => Puppet::Property::Ensure, &block)
|
138
|
+
else
|
139
|
+
self.newproperty(:ensure, :parent => Puppet::Property::Ensure) do
|
140
|
+
self.defaultvalues
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Should we add the 'ensure' property to this class?
|
146
|
+
def self.ensurable?
|
147
|
+
# If the class has all three of these methods defined, then it's
|
148
|
+
# ensurable.
|
149
|
+
ens = [:exists?, :create, :destroy].inject { |set, method|
|
150
|
+
set &&= self.public_method_defined?(method)
|
151
|
+
}
|
152
|
+
|
153
|
+
return ens
|
154
|
+
end
|
155
|
+
|
156
|
+
# Deal with any options passed into parameters.
|
157
|
+
def self.handle_param_options(name, options)
|
158
|
+
# If it's a boolean parameter, create a method to test the value easily
|
159
|
+
if options[:boolean]
|
160
|
+
define_method(name.to_s + "?") do
|
161
|
+
val = self[name]
|
162
|
+
if val == :true or val == true
|
163
|
+
return true
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# If this param handles relationships, store that information
|
169
|
+
end
|
170
|
+
|
171
|
+
# Is the parameter in question a meta-parameter?
|
172
|
+
def self.metaparam?(param)
|
173
|
+
@@metaparamhash.include?(symbolize(param))
|
174
|
+
end
|
175
|
+
|
176
|
+
# Find the metaparameter class associated with a given metaparameter name.
|
177
|
+
def self.metaparamclass(name)
|
178
|
+
@@metaparamhash[symbolize(name)]
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.metaparams
|
182
|
+
@@metaparams.collect { |param| param.name }
|
183
|
+
end
|
184
|
+
|
185
|
+
def self.metaparamdoc(metaparam)
|
186
|
+
@@metaparamhash[metaparam].doc
|
187
|
+
end
|
188
|
+
|
189
|
+
# Create a new metaparam. Requires a block and a name, stores it in the
|
190
|
+
# @parameters array, and does some basic checking on it.
|
191
|
+
def self.newmetaparam(name, options = {}, &block)
|
192
|
+
@@metaparams ||= []
|
193
|
+
@@metaparamhash ||= {}
|
194
|
+
name = symbolize(name)
|
195
|
+
|
196
|
+
param = genclass(name,
|
197
|
+
:parent => options[:parent] || Puppet::Parameter,
|
198
|
+
:prefix => "MetaParam",
|
199
|
+
:hash => @@metaparamhash,
|
200
|
+
:array => @@metaparams,
|
201
|
+
:attributes => options[:attributes],
|
202
|
+
&block
|
203
|
+
)
|
204
|
+
|
205
|
+
# Grr.
|
206
|
+
if options[:required_features]
|
207
|
+
param.required_features = options[:required_features]
|
208
|
+
end
|
209
|
+
|
210
|
+
handle_param_options(name, options)
|
211
|
+
|
212
|
+
param.metaparam = true
|
213
|
+
|
214
|
+
return param
|
215
|
+
end
|
216
|
+
|
217
|
+
# Find the namevar
|
218
|
+
def self.namevar
|
219
|
+
unless defined? @namevar
|
220
|
+
params = @parameters.find_all { |param|
|
221
|
+
param.isnamevar? or param.name == :name
|
222
|
+
}
|
223
|
+
|
224
|
+
if params.length > 1
|
225
|
+
raise Puppet::DevError, "Found multiple namevars for %s" % self.name
|
226
|
+
elsif params.length == 1
|
227
|
+
@namevar = params[0].name
|
228
|
+
else
|
229
|
+
raise Puppet::DevError, "No namevar for %s" % self.name
|
230
|
+
end
|
231
|
+
end
|
232
|
+
@namevar
|
233
|
+
end
|
234
|
+
|
235
|
+
# Create a new parameter. Requires a block and a name, stores it in the
|
236
|
+
# @parameters array, and does some basic checking on it.
|
237
|
+
def self.newparam(name, options = {}, &block)
|
238
|
+
options[:attributes] ||= {}
|
239
|
+
options[:attributes][:element] = self
|
240
|
+
param = genclass(name,
|
241
|
+
:parent => options[:parent] || Puppet::Parameter,
|
242
|
+
:attributes => options[:attributes],
|
243
|
+
:block => block,
|
244
|
+
:prefix => "Parameter",
|
245
|
+
:array => @parameters,
|
246
|
+
:hash => @paramhash
|
247
|
+
)
|
248
|
+
|
249
|
+
handle_param_options(name, options)
|
250
|
+
|
251
|
+
# Grr.
|
252
|
+
if options[:required_features]
|
253
|
+
param.required_features = options[:required_features]
|
254
|
+
end
|
255
|
+
|
256
|
+
# These might be enabled later.
|
257
|
+
# define_method(name) do
|
258
|
+
# @parameters[name].value
|
259
|
+
# end
|
260
|
+
#
|
261
|
+
# define_method(name.to_s + "=") do |value|
|
262
|
+
# newparam(param, value)
|
263
|
+
# end
|
264
|
+
|
265
|
+
if param.isnamevar?
|
266
|
+
@namevar = param.name
|
267
|
+
end
|
268
|
+
|
269
|
+
return param
|
270
|
+
end
|
271
|
+
|
272
|
+
def self.newstate(name, options = {}, &block)
|
273
|
+
Puppet.warning "newstate() has been deprecrated; use newproperty(%s)" %
|
274
|
+
name
|
275
|
+
newproperty(name, options, &block)
|
276
|
+
end
|
277
|
+
|
278
|
+
# Create a new property. The first parameter must be the name of the property;
|
279
|
+
# this is how users will refer to the property when creating new instances.
|
280
|
+
# The second parameter is a hash of options; the options are:
|
281
|
+
# * <tt>:parent</tt>: The parent class for the property. Defaults to Puppet::Property.
|
282
|
+
# * <tt>:retrieve</tt>: The method to call on the provider or @parent object (if
|
283
|
+
# the provider is not set) to retrieve the current value.
|
284
|
+
def self.newproperty(name, options = {}, &block)
|
285
|
+
name = symbolize(name)
|
286
|
+
|
287
|
+
# This is here for types that might still have the old method of defining
|
288
|
+
# a parent class.
|
289
|
+
unless options.is_a? Hash
|
290
|
+
raise Puppet::DevError,
|
291
|
+
"Options must be a hash, not %s" % options.inspect
|
292
|
+
end
|
293
|
+
|
294
|
+
if @validproperties.include?(name)
|
295
|
+
raise Puppet::DevError, "Class %s already has a property named %s" %
|
296
|
+
[self.name, name]
|
297
|
+
end
|
298
|
+
|
299
|
+
# We have to create our own, new block here because we want to define
|
300
|
+
# an initial :retrieve method, if told to, and then eval the passed
|
301
|
+
# block if available.
|
302
|
+
prop = genclass(name,
|
303
|
+
:parent => options[:parent] || Puppet::Property,
|
304
|
+
:hash => @validproperties
|
305
|
+
) do
|
306
|
+
# If they've passed a retrieve method, then override the retrieve
|
307
|
+
# method on the class.
|
308
|
+
if options[:retrieve]
|
309
|
+
define_method(:retrieve) do
|
310
|
+
instance_variable_set(
|
311
|
+
"@is", provider.send(options[:retrieve])
|
312
|
+
)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
if block
|
317
|
+
class_eval(&block)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
# If it's the 'ensure' property, always put it first.
|
322
|
+
if name == :ensure
|
323
|
+
@properties.unshift prop
|
324
|
+
else
|
325
|
+
@properties << prop
|
326
|
+
end
|
327
|
+
|
328
|
+
if options[:event]
|
329
|
+
prop.event = options[:event]
|
330
|
+
end
|
331
|
+
|
332
|
+
# Grr.
|
333
|
+
if options[:required_features]
|
334
|
+
prop.required_features = options[:required_features]
|
335
|
+
end
|
336
|
+
|
337
|
+
# define_method(name) do
|
338
|
+
# @parameters[name].should
|
339
|
+
# end
|
340
|
+
#
|
341
|
+
# define_method(name.to_s + "=") do |value|
|
342
|
+
# newproperty(name, :should => value)
|
343
|
+
# end
|
344
|
+
|
345
|
+
return prop
|
346
|
+
end
|
347
|
+
|
348
|
+
def self.paramdoc(param)
|
349
|
+
@paramhash[param].doc
|
350
|
+
end
|
351
|
+
|
352
|
+
# Return the parameter names
|
353
|
+
def self.parameters
|
354
|
+
return [] unless defined? @parameters
|
355
|
+
@parameters.collect { |klass| klass.name }
|
356
|
+
end
|
357
|
+
|
358
|
+
# Find the parameter class associated with a given parameter name.
|
359
|
+
def self.paramclass(name)
|
360
|
+
@paramhash[name]
|
361
|
+
end
|
362
|
+
|
363
|
+
# Return the property class associated with a name
|
364
|
+
def self.propertybyname(name)
|
365
|
+
@validproperties[name]
|
366
|
+
end
|
367
|
+
|
368
|
+
def self.validattr?(name)
|
369
|
+
name = symbolize(name)
|
370
|
+
return true if name == :name
|
371
|
+
@validattrs ||= {}
|
372
|
+
|
373
|
+
unless @validattrs.include?(name)
|
374
|
+
if self.validproperty?(name) or self.validparameter?(name) or self.metaparam?(name)
|
375
|
+
@validattrs[name] = true
|
376
|
+
else
|
377
|
+
@validattrs[name] = false
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
@validattrs[name]
|
382
|
+
end
|
383
|
+
|
384
|
+
# does the name reflect a valid property?
|
385
|
+
def self.validproperty?(name)
|
386
|
+
name = symbolize(name)
|
387
|
+
if @validproperties.include?(name)
|
388
|
+
return @validproperties[name]
|
389
|
+
else
|
390
|
+
return false
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
# Return the list of validproperties
|
395
|
+
def self.validproperties
|
396
|
+
return {} unless defined? @parameters
|
397
|
+
|
398
|
+
return @validproperties.keys
|
399
|
+
end
|
400
|
+
|
401
|
+
# does the name reflect a valid parameter?
|
402
|
+
def self.validparameter?(name)
|
403
|
+
unless defined? @parameters
|
404
|
+
raise Puppet::DevError, "Class %s has not defined parameters" % self
|
405
|
+
end
|
406
|
+
if @paramhash.include?(name) or @@metaparamhash.include?(name)
|
407
|
+
return true
|
408
|
+
else
|
409
|
+
return false
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
# fix any namevar => param translations
|
414
|
+
def argclean(oldhash)
|
415
|
+
# This duplication is here because it might be a transobject.
|
416
|
+
hash = oldhash.dup.to_hash
|
417
|
+
|
418
|
+
if hash.include?(:parent)
|
419
|
+
hash.delete(:parent)
|
420
|
+
end
|
421
|
+
namevar = self.class.namevar
|
422
|
+
|
423
|
+
# Do a simple translation for those cases where they've passed :name
|
424
|
+
# but that's not our namevar
|
425
|
+
if hash.include? :name and namevar != :name
|
426
|
+
if hash.include? namevar
|
427
|
+
raise ArgumentError, "Cannot provide both name and %s" % namevar
|
428
|
+
end
|
429
|
+
hash[namevar] = hash[:name]
|
430
|
+
hash.delete(:name)
|
431
|
+
end
|
432
|
+
|
433
|
+
# Make sure we have a name, one way or another
|
434
|
+
unless hash.include? namevar
|
435
|
+
if defined? @title and @title
|
436
|
+
hash[namevar] = @title
|
437
|
+
else
|
438
|
+
raise Puppet::Error,
|
439
|
+
"Was not passed a namevar or title"
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
return hash
|
444
|
+
end
|
445
|
+
|
446
|
+
# Return either the attribute alias or the attribute.
|
447
|
+
def attr_alias(name)
|
448
|
+
name = symbolize(name)
|
449
|
+
if synonym = self.class.attr_alias(name)
|
450
|
+
return synonym
|
451
|
+
else
|
452
|
+
return name
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
# Are we deleting this resource?
|
457
|
+
def deleting?
|
458
|
+
obj = @parameters[:ensure] and obj.should == :absent
|
459
|
+
end
|
460
|
+
|
461
|
+
# Allow an outside party to specify the 'is' value for a property. The
|
462
|
+
# arguments are an array because you can't use parens with 'is=' calls.
|
463
|
+
# Most classes won't use this.
|
464
|
+
def is=(ary)
|
465
|
+
param, value = ary
|
466
|
+
param = attr_alias(param)
|
467
|
+
if self.class.validproperty?(param)
|
468
|
+
unless prop = @parameters[param]
|
469
|
+
prop = self.newattr(param)
|
470
|
+
end
|
471
|
+
prop.is = value
|
472
|
+
else
|
473
|
+
self[param] = value
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
# abstract accessing parameters and properties, and normalize
|
478
|
+
# access to always be symbols, not strings
|
479
|
+
# This returns a value, not an object. It returns the 'is'
|
480
|
+
# value, but you can also specifically return 'is' and 'should'
|
481
|
+
# values using 'object.is(:property)' or 'object.should(:property)'.
|
482
|
+
def [](name)
|
483
|
+
name = attr_alias(name)
|
484
|
+
|
485
|
+
unless self.class.validattr?(name)
|
486
|
+
raise TypeError.new("Invalid parameter %s(%s)" % [name, name.inspect])
|
487
|
+
end
|
488
|
+
|
489
|
+
if name == :name
|
490
|
+
name = self.class.namevar
|
491
|
+
end
|
492
|
+
|
493
|
+
if obj = @parameters[name]
|
494
|
+
if obj.is_a?(Puppet::Type::Property)
|
495
|
+
return obj.is
|
496
|
+
else
|
497
|
+
return obj.value
|
498
|
+
end
|
499
|
+
else
|
500
|
+
return nil
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
# Abstract setting parameters and properties, and normalize
|
505
|
+
# access to always be symbols, not strings. This sets the 'should'
|
506
|
+
# value on properties, and otherwise just sets the appropriate parameter.
|
507
|
+
def []=(name,value)
|
508
|
+
name = attr_alias(name)
|
509
|
+
|
510
|
+
unless self.class.validattr?(name)
|
511
|
+
raise TypeError.new("Invalid parameter %s" % [name])
|
512
|
+
end
|
513
|
+
|
514
|
+
if name == :name
|
515
|
+
name = self.class.namevar
|
516
|
+
end
|
517
|
+
if value.nil?
|
518
|
+
raise Puppet::Error.new("Got nil value for %s" % name)
|
519
|
+
end
|
520
|
+
|
521
|
+
if obj = @parameters[name]
|
522
|
+
obj.value = value
|
523
|
+
return nil
|
524
|
+
else
|
525
|
+
self.newattr(name, :value => value)
|
526
|
+
end
|
527
|
+
|
528
|
+
nil
|
529
|
+
end
|
530
|
+
|
531
|
+
# remove a property from the object; useful in testing or in cleanup
|
532
|
+
# when an error has been encountered
|
533
|
+
def delete(attr)
|
534
|
+
attr = symbolize(attr)
|
535
|
+
case attr
|
536
|
+
when Puppet::Type
|
537
|
+
if @children.include?(attr)
|
538
|
+
@children.delete(attr)
|
539
|
+
end
|
540
|
+
else
|
541
|
+
if @parameters.has_key?(attr)
|
542
|
+
@parameters.delete(attr)
|
543
|
+
else
|
544
|
+
raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
|
545
|
+
end
|
546
|
+
end
|
547
|
+
end
|
548
|
+
|
549
|
+
# iterate across the existing properties
|
550
|
+
def eachproperty
|
551
|
+
# properties() is a private method
|
552
|
+
properties().each { |property|
|
553
|
+
yield property
|
554
|
+
}
|
555
|
+
end
|
556
|
+
|
557
|
+
# retrieve the 'is' value for a specified property
|
558
|
+
def is(name)
|
559
|
+
name = attr_alias(name)
|
560
|
+
if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
|
561
|
+
return prop.is
|
562
|
+
else
|
563
|
+
return nil
|
564
|
+
end
|
565
|
+
end
|
566
|
+
|
567
|
+
# retrieve the 'should' value for a specified property
|
568
|
+
def should(name)
|
569
|
+
name = attr_alias(name)
|
570
|
+
if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
|
571
|
+
return prop.should
|
572
|
+
else
|
573
|
+
return nil
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
577
|
+
# Create the actual attribute instance. Requires either the attribute
|
578
|
+
# name or class as the first argument, then an optional hash of
|
579
|
+
# attributes to set during initialization.
|
580
|
+
def newattr(name, options = {})
|
581
|
+
if name.is_a?(Class)
|
582
|
+
klass = name
|
583
|
+
name = klass.name
|
584
|
+
end
|
585
|
+
|
586
|
+
unless klass = self.class.attrclass(name)
|
587
|
+
raise Puppet::Error, "Resource type %s does not support parameter %s" % [self.class.name, name]
|
588
|
+
end
|
589
|
+
|
590
|
+
if @parameters.include?(name)
|
591
|
+
raise Puppet::Error, "Parameter '%s' is already defined in %s" %
|
592
|
+
[name, self.ref]
|
593
|
+
end
|
594
|
+
|
595
|
+
if provider and ! provider.class.supports_parameter?(klass)
|
596
|
+
missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
|
597
|
+
info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
|
598
|
+
return nil
|
599
|
+
end
|
600
|
+
|
601
|
+
# Add parent information at creation time, so it's available
|
602
|
+
# during validation.
|
603
|
+
options[:parent] = self
|
604
|
+
begin
|
605
|
+
# make sure the parameter doesn't have any errors
|
606
|
+
return @parameters[name] = klass.new(options)
|
607
|
+
rescue => detail
|
608
|
+
error = Puppet::Error.new("Parameter %s failed: %s" %
|
609
|
+
[name, detail])
|
610
|
+
error.set_backtrace(detail.backtrace)
|
611
|
+
raise error
|
612
|
+
end
|
613
|
+
end
|
614
|
+
|
615
|
+
# return the value of a parameter
|
616
|
+
def parameter(name)
|
617
|
+
unless name.is_a? Symbol
|
618
|
+
name = name.intern
|
619
|
+
end
|
620
|
+
return @parameters[name].value
|
621
|
+
end
|
622
|
+
|
623
|
+
# Is the named property defined?
|
624
|
+
def propertydefined?(name)
|
625
|
+
unless name.is_a? Symbol
|
626
|
+
name = name.intern
|
627
|
+
end
|
628
|
+
return @parameters.include?(name)
|
629
|
+
end
|
630
|
+
|
631
|
+
# return an actual type by name; to return the value, use 'inst[name]'
|
632
|
+
# FIXME this method should go away
|
633
|
+
def property(name)
|
634
|
+
if obj = @parameters[symbolize(name)] and obj.is_a?(Puppet::Type::Property)
|
635
|
+
return obj
|
636
|
+
else
|
637
|
+
return nil
|
638
|
+
end
|
639
|
+
end
|
640
|
+
|
641
|
+
# def set(name, value)
|
642
|
+
# send(name.to_s + "=", value)
|
643
|
+
# end
|
644
|
+
#
|
645
|
+
# def get(name)
|
646
|
+
# send(name)
|
647
|
+
# end
|
648
|
+
|
649
|
+
# For any parameters or properties that have defaults and have not yet been
|
650
|
+
# set, set them now. This method can be handed a list of attributes,
|
651
|
+
# and if so it will only set defaults for those attributes.
|
652
|
+
def setdefaults(*ary)
|
653
|
+
#self.class.eachattr(*ary) { |klass, type|
|
654
|
+
self.class.eachattr(*ary) { |klass, type|
|
655
|
+
# not many attributes will have defaults defined, so we short-circuit
|
656
|
+
# those away
|
657
|
+
next unless klass.method_defined?(:default)
|
658
|
+
next if @parameters[klass.name]
|
659
|
+
|
660
|
+
next unless obj = self.newattr(klass)
|
661
|
+
|
662
|
+
# We have to check for nil values, not "truth", so we allow defaults
|
663
|
+
# to false.
|
664
|
+
value = obj.default and ! value.nil?
|
665
|
+
if ! value.nil?
|
666
|
+
obj.value = value
|
667
|
+
else
|
668
|
+
@parameters.delete(obj.name)
|
669
|
+
end
|
670
|
+
}
|
671
|
+
end
|
672
|
+
|
673
|
+
# Convert our object to a hash. This just includes properties.
|
674
|
+
def to_hash
|
675
|
+
rethash = {}
|
676
|
+
|
677
|
+
@parameters.each do |name, obj|
|
678
|
+
rethash[name] = obj.value
|
679
|
+
end
|
680
|
+
|
681
|
+
rethash
|
682
|
+
end
|
683
|
+
|
684
|
+
# Return a specific value for an attribute.
|
685
|
+
def value(name)
|
686
|
+
name = attr_alias(name)
|
687
|
+
|
688
|
+
if obj = @parameters[name] and obj.respond_to?(:value)
|
689
|
+
return obj.value
|
690
|
+
else
|
691
|
+
return nil
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
695
|
+
# Meta-parameter methods: These methods deal with the results
|
696
|
+
# of specifying metaparameters
|
697
|
+
|
698
|
+
private
|
699
|
+
|
700
|
+
# Return all of the property objects, in the order specified in the
|
701
|
+
# class.
|
702
|
+
def properties
|
703
|
+
#debug "%s has %s properties" % [self,@parameters.length]
|
704
|
+
props = self.class.properties.collect { |prop|
|
705
|
+
@parameters[prop.name]
|
706
|
+
}.find_all { |p|
|
707
|
+
! p.nil?
|
708
|
+
}.each do |prop|
|
709
|
+
unless prop.is_a?(Puppet::Type::Property)
|
710
|
+
raise Puppet::DevError, "got a non-property %s(%s)" %
|
711
|
+
[prop.class, prop.class.name]
|
712
|
+
end
|
713
|
+
end
|
714
|
+
|
715
|
+
props
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
# $Id: attributes.rb 2444 2007-05-01 03:14:09Z luke $
|