puppet 0.18.4 → 0.22.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +288 -0
- data/README +2 -2
- data/Rakefile +78 -5
- data/bin/puppet +28 -36
- data/bin/puppetca +81 -38
- data/bin/puppetd +65 -62
- data/bin/puppetdoc +409 -140
- data/bin/puppetmasterd +59 -47
- data/bin/puppetrun +38 -23
- data/conf/freebsd/puppetd +26 -0
- data/conf/freebsd/puppetmasterd +26 -0
- data/conf/gentoo/conf.d/puppet +5 -0
- data/conf/gentoo/conf.d/puppetmaster +12 -0
- data/conf/gentoo/init.d/puppet +38 -0
- data/conf/gentoo/init.d/puppetmaster +50 -0
- data/conf/gentoo/puppet/fileserver.conf +12 -0
- data/conf/gentoo/puppet/puppetca.conf +29 -0
- data/conf/gentoo/puppet/puppetd.conf +29 -0
- data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
- data/conf/redhat/client.init +10 -5
- data/conf/redhat/client.sysconfig +1 -1
- data/conf/redhat/fileserver.conf +2 -2
- data/conf/redhat/logrotate +1 -1
- data/conf/redhat/no-lockdir.patch +13 -0
- data/conf/redhat/puppet.spec +65 -8
- data/conf/redhat/puppetd.conf +0 -4
- data/conf/redhat/server.init +3 -6
- data/conf/solaris/pkginfo +1 -1
- data/conf/solaris/smf/svc-puppetd +2 -2
- data/conf/suse/client.init +142 -0
- data/conf/suse/puppet.spec +221 -0
- data/conf/suse/server.init +162 -0
- data/examples/code/mac_automount.pp +16 -0
- data/examples/root/bin/sleeper +3 -5
- data/examples/root/etc/init.d/sleeper +8 -2
- data/examples/root/etc/puppet/fileserver.conf +12 -2
- data/examples/root/etc/puppet/namespaceauth.conf +20 -0
- data/examples/root/etc/puppet/puppetd.conf +4 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
- data/examples/root/etc/puppet/tagmail.conf +1 -0
- data/ext/emacs/puppet-mode.el +46 -1
- data/ext/logcheck/puppet +15 -0
- data/ext/module_puppet +15 -23
- data/ext/vim/puppet.vim +4 -2
- data/install.rb +2 -1
- data/lib/puppet.rb +76 -207
- data/lib/puppet/configuration.rb +331 -0
- data/lib/puppet/daemon.rb +63 -246
- data/lib/puppet/dsl.rb +371 -0
- data/lib/puppet/element.rb +8 -26
- data/lib/puppet/error.rb +54 -0
- data/lib/puppet/event.rb +8 -243
- data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
- data/lib/puppet/external/event-loop.rb +1 -0
- data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
- data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
- data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
- data/lib/puppet/external/gratr.rb +33 -0
- data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
- data/lib/puppet/external/gratr/base.rb +34 -0
- data/lib/puppet/external/gratr/biconnected.rb +116 -0
- data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
- data/lib/puppet/external/gratr/common.rb +73 -0
- data/lib/puppet/external/gratr/comparability.rb +92 -0
- data/lib/puppet/external/gratr/digraph.rb +116 -0
- data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
- data/lib/puppet/external/gratr/dot.rb +90 -0
- data/lib/puppet/external/gratr/edge.rb +145 -0
- data/lib/puppet/external/gratr/graph.rb +303 -0
- data/lib/puppet/external/gratr/graph_api.rb +83 -0
- data/lib/puppet/external/gratr/import.rb +44 -0
- data/lib/puppet/external/gratr/labels.rb +90 -0
- data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
- data/lib/puppet/external/gratr/rdot.rb +327 -0
- data/lib/puppet/external/gratr/search.rb +409 -0
- data/lib/puppet/external/gratr/strong_components.rb +127 -0
- data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
- data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
- data/lib/puppet/feature/base.rb +20 -0
- data/lib/puppet/feature/rails.rb +52 -0
- data/lib/puppet/metatype/attributes.rb +719 -0
- data/lib/puppet/metatype/closure.rb +111 -0
- data/lib/puppet/metatype/container.rb +94 -0
- data/lib/puppet/metatype/evaluation.rb +118 -0
- data/lib/puppet/metatype/instances.rb +261 -0
- data/lib/puppet/metatype/manager.rb +169 -0
- data/lib/puppet/metatype/metaparams.rb +409 -0
- data/lib/puppet/metatype/providers.rb +260 -0
- data/lib/puppet/metatype/relationships.rb +116 -0
- data/lib/puppet/metatype/schedules.rb +39 -0
- data/lib/puppet/metatype/tags.rb +39 -0
- data/lib/puppet/modules.rb +113 -0
- data/lib/puppet/network/authconfig.rb +168 -0
- data/lib/puppet/network/authorization.rb +84 -0
- data/lib/puppet/network/authstore.rb +293 -0
- data/lib/puppet/network/client.rb +187 -0
- data/lib/puppet/network/client/ca.rb +56 -0
- data/lib/puppet/network/client/dipper.rb +81 -0
- data/lib/puppet/network/client/file.rb +7 -0
- data/lib/puppet/network/client/logger.rb +6 -0
- data/lib/puppet/network/client/master.rb +644 -0
- data/lib/puppet/{client → network/client}/proxy.rb +3 -3
- data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
- data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
- data/lib/puppet/network/client/runner.rb +13 -0
- data/lib/puppet/network/client/status.rb +5 -0
- data/lib/puppet/network/client_request.rb +32 -0
- data/lib/puppet/network/handler.rb +33 -0
- data/lib/puppet/{server → network/handler}/ca.rb +5 -6
- data/lib/puppet/network/handler/filebucket.rb +180 -0
- data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
- data/lib/puppet/{server → network/handler}/logger.rb +3 -5
- data/lib/puppet/{server → network/handler}/master.rb +42 -8
- data/lib/puppet/network/handler/report.rb +158 -0
- data/lib/puppet/network/handler/resource.rb +190 -0
- data/lib/puppet/{server → network/handler}/runner.rb +17 -18
- data/lib/puppet/network/handler/status.rb +13 -0
- data/lib/puppet/network/rights.rb +74 -0
- data/lib/puppet/network/server.rb +5 -0
- data/lib/puppet/network/server/mongrel.rb +138 -0
- data/lib/puppet/network/server/webrick.rb +153 -0
- data/lib/puppet/network/xmlrpc/client.rb +129 -0
- data/lib/puppet/network/xmlrpc/processor.rb +91 -0
- data/lib/puppet/network/xmlrpc/server.rb +20 -0
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
- data/lib/puppet/parameter.rb +390 -346
- data/lib/puppet/parser/ast.rb +116 -147
- data/lib/puppet/parser/ast/astarray.rb +17 -33
- data/lib/puppet/parser/ast/branch.rb +2 -0
- data/lib/puppet/parser/ast/caseopt.rb +7 -12
- data/lib/puppet/parser/ast/casestatement.rb +23 -32
- data/lib/puppet/parser/ast/collection.rb +19 -80
- data/lib/puppet/parser/ast/collexpr.rb +81 -0
- data/lib/puppet/parser/ast/component.rb +160 -89
- data/lib/puppet/parser/ast/else.rb +30 -0
- data/lib/puppet/parser/ast/function.rb +9 -2
- data/lib/puppet/parser/ast/hostclass.rb +47 -131
- data/lib/puppet/parser/ast/ifstatement.rb +43 -0
- data/lib/puppet/parser/ast/leaf.rb +10 -21
- data/lib/puppet/parser/ast/node.rb +32 -79
- data/lib/puppet/parser/ast/resourcedef.rb +222 -0
- data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
- data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
- data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
- data/lib/puppet/parser/ast/resourceref.rb +44 -0
- data/lib/puppet/parser/ast/selector.rb +16 -8
- data/lib/puppet/parser/ast/tag.rb +3 -1
- data/lib/puppet/parser/ast/vardef.rb +8 -12
- data/lib/puppet/parser/collector.rb +181 -0
- data/lib/puppet/parser/functions.rb +191 -36
- data/lib/puppet/parser/interpreter.rb +802 -380
- data/lib/puppet/parser/lexer.rb +86 -19
- data/lib/puppet/parser/parser.rb +1123 -960
- data/lib/puppet/parser/resource.rb +353 -0
- data/lib/puppet/parser/resource/param.rb +57 -0
- data/lib/puppet/parser/resource/reference.rb +71 -0
- data/lib/puppet/parser/scope.rb +573 -1000
- data/lib/puppet/parser/templatewrapper.rb +54 -0
- data/lib/puppet/pgraph.rb +208 -0
- data/lib/puppet/propertychange.rb +143 -0
- data/lib/puppet/provider.rb +302 -0
- data/lib/puppet/provider/cron/crontab.rb +187 -0
- data/lib/puppet/provider/group/groupadd.rb +29 -0
- data/lib/puppet/provider/group/netinfo.rb +12 -0
- data/lib/puppet/provider/group/pw.rb +31 -0
- data/lib/puppet/provider/host/netinfo.rb +18 -0
- data/lib/puppet/provider/host/parsed.rb +73 -0
- data/lib/puppet/provider/mount.rb +57 -0
- data/lib/puppet/provider/mount/netinfo.rb +38 -0
- data/lib/puppet/provider/mount/parsed.rb +37 -0
- data/lib/puppet/provider/nameservice.rb +344 -0
- data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
- data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
- data/lib/puppet/provider/nameservice/pw.rb +22 -0
- data/lib/puppet/provider/package/apple.rb +53 -0
- data/lib/puppet/provider/package/apt.rb +119 -0
- data/lib/puppet/provider/package/aptitude.rb +30 -0
- data/lib/puppet/provider/package/aptrpm.rb +79 -0
- data/lib/puppet/provider/package/blastwave.rb +114 -0
- data/lib/puppet/provider/package/darwinport.rb +88 -0
- data/lib/puppet/provider/package/dpkg.rb +109 -0
- data/lib/puppet/provider/package/freebsd.rb +43 -0
- data/lib/puppet/provider/package/gem.rb +104 -0
- data/lib/puppet/provider/package/openbsd.rb +93 -0
- data/lib/puppet/provider/package/pkgdmg.rb +119 -0
- data/lib/puppet/provider/package/portage.rb +112 -0
- data/lib/puppet/provider/package/ports.rb +94 -0
- data/lib/puppet/provider/package/rpm.rb +125 -0
- data/lib/puppet/provider/package/rug.rb +53 -0
- data/lib/puppet/provider/package/sun.rb +168 -0
- data/lib/puppet/provider/package/sunfreeware.rb +9 -0
- data/lib/puppet/provider/package/up2date.rb +45 -0
- data/lib/puppet/provider/package/yum.rb +54 -0
- data/lib/puppet/provider/parsedfile.rb +342 -0
- data/lib/puppet/provider/port/parsed.rb +174 -0
- data/lib/puppet/provider/service/base.rb +136 -0
- data/lib/puppet/provider/service/debian.rb +32 -0
- data/lib/puppet/provider/service/gentoo.rb +49 -0
- data/lib/puppet/{type → provider}/service/init.rb +42 -40
- data/lib/puppet/provider/service/redhat.rb +59 -0
- data/lib/puppet/{type → provider}/service/smf.rb +24 -13
- data/lib/puppet/provider/sshkey/parsed.rb +36 -0
- data/lib/puppet/provider/user/netinfo.rb +106 -0
- data/lib/puppet/provider/user/pw.rb +41 -0
- data/lib/puppet/provider/user/useradd.rb +67 -0
- data/lib/puppet/provider/zone/solaris.rb +208 -0
- data/lib/puppet/rails.rb +102 -66
- data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
- data/lib/puppet/rails/database/schema.rb +89 -0
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
- data/lib/puppet/rails/external/tagging/init.rb +5 -0
- data/lib/puppet/rails/external/tagging/tag.rb +50 -0
- data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
- data/lib/puppet/rails/fact_name.rb +7 -0
- data/lib/puppet/rails/fact_value.rb +5 -0
- data/lib/puppet/rails/host.rb +95 -46
- data/lib/puppet/rails/param_name.rb +28 -0
- data/lib/puppet/rails/param_value.rb +5 -0
- data/lib/puppet/rails/puppet_class.rb +9 -0
- data/lib/puppet/rails/resource.rb +95 -0
- data/lib/puppet/rails/source_file.rb +5 -0
- data/lib/puppet/relationship.rb +63 -0
- data/lib/puppet/reports/log.rb +14 -0
- data/lib/puppet/reports/rrdgraph.rb +114 -10
- data/lib/puppet/reports/store.rb +64 -0
- data/lib/puppet/reports/tagmail.rb +144 -71
- data/lib/puppet/sslcertificates.rb +38 -5
- data/lib/puppet/sslcertificates/ca.rb +142 -37
- data/lib/puppet/sslcertificates/certificate.rb +3 -3
- data/lib/puppet/sslcertificates/inventory.rb +53 -0
- data/lib/puppet/sslcertificates/support.rb +128 -0
- data/lib/puppet/transaction.rb +568 -189
- data/lib/puppet/transaction/report.rb +14 -3
- data/lib/puppet/transportable.rb +18 -10
- data/lib/puppet/type.rb +279 -2299
- data/lib/puppet/type/component.rb +63 -63
- data/lib/puppet/type/cron.rb +294 -710
- data/lib/puppet/type/exec.rb +185 -129
- data/lib/puppet/type/group.rb +38 -89
- data/lib/puppet/type/host.rb +110 -0
- data/lib/puppet/type/mount.rb +189 -0
- data/lib/puppet/type/notify.rb +47 -0
- data/lib/puppet/type/package.rb +129 -257
- data/lib/puppet/type/parsedtype.rb +172 -297
- data/lib/puppet/type/pfile.rb +540 -319
- data/lib/puppet/type/pfile/checksum.rb +103 -76
- data/lib/puppet/type/pfile/content.rb +16 -10
- data/lib/puppet/type/pfile/ensure.rb +52 -34
- data/lib/puppet/type/pfile/group.rb +25 -18
- data/lib/puppet/type/pfile/mode.rb +7 -4
- data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
- data/lib/puppet/type/pfile/source.rb +119 -124
- data/lib/puppet/type/pfile/target.rb +29 -45
- data/lib/puppet/type/pfile/type.rb +2 -2
- data/lib/puppet/type/pfilebucket.rb +18 -14
- data/lib/puppet/type/port.rb +121 -0
- data/lib/puppet/type/property.rb +530 -0
- data/lib/puppet/type/resources.rb +150 -0
- data/lib/puppet/type/schedule.rb +38 -22
- data/lib/puppet/type/service.rb +70 -326
- data/lib/puppet/type/sshkey.rb +76 -0
- data/lib/puppet/type/tidy.rb +197 -97
- data/lib/puppet/type/user.rb +107 -183
- data/lib/puppet/type/yumrepo.rb +53 -34
- data/lib/puppet/type/zone.rb +55 -208
- data/lib/puppet/util.rb +239 -201
- data/lib/puppet/util/autoload.rb +107 -0
- data/lib/puppet/util/classgen.rb +208 -0
- data/lib/puppet/{config.rb → util/config.rb} +102 -54
- data/lib/puppet/util/docs.rb +104 -0
- data/lib/puppet/util/errors.rb +55 -0
- data/lib/puppet/util/execution.rb +22 -0
- data/lib/puppet/util/feature.rb +76 -0
- data/lib/puppet/util/fileparsing.rb +380 -0
- data/lib/puppet/util/filetype.rb +300 -0
- data/lib/puppet/util/graph.rb +39 -0
- data/lib/puppet/util/inifile.rb +209 -0
- data/lib/puppet/util/loadedfile.rb +71 -0
- data/lib/puppet/util/log.rb +549 -0
- data/lib/puppet/util/logging.rb +20 -0
- data/lib/puppet/util/metaid.rb +22 -0
- data/lib/puppet/util/methodhelper.rb +37 -0
- data/lib/puppet/util/metric.rb +160 -0
- data/lib/puppet/util/package.rb +31 -0
- data/lib/puppet/util/pidlock.rb +68 -0
- data/lib/puppet/util/plist.rb +24 -0
- data/lib/puppet/util/plist/generator.rb +226 -0
- data/lib/puppet/util/plist/parser.rb +227 -0
- data/lib/puppet/util/posix.rb +87 -0
- data/lib/puppet/util/provider_features.rb +170 -0
- data/lib/puppet/util/rails/collection_merger.rb +42 -0
- data/lib/puppet/util/storage.rb +103 -0
- data/lib/puppet/util/subclass_loader.rb +83 -0
- data/lib/puppet/util/suidmanager.rb +86 -0
- data/lib/puppet/util/variables.rb +39 -0
- data/lib/puppet/util/warnings.rb +15 -0
- data/test/Rakefile +97 -0
- data/test/certmgr/ca.rb +81 -0
- data/test/certmgr/certmgr.rb +77 -50
- data/test/certmgr/inventory.rb +79 -0
- data/test/certmgr/support.rb +81 -0
- data/test/executables/filebucket.rb +49 -0
- data/test/executables/puppetbin.rb +28 -12
- data/test/executables/puppetca.rb +75 -54
- data/test/executables/puppetd.rb +10 -13
- data/test/executables/puppetmasterd.rb +12 -17
- data/test/executables/puppetmodule.rb +18 -17
- data/test/language/ast.rb +242 -798
- data/test/language/ast/casestatement.rb +104 -0
- data/test/language/ast/component.rb +133 -0
- data/test/language/ast/hostclass.rb +162 -0
- data/test/language/ast/selector.rb +62 -0
- data/test/language/ast/variable.rb +31 -0
- data/test/language/collector.rb +369 -0
- data/test/language/functions.rb +305 -18
- data/test/language/interpreter.rb +894 -125
- data/test/language/lexer.rb +98 -12
- data/test/language/node.rb +37 -53
- data/test/language/parser.rb +455 -148
- data/test/language/resource.rb +535 -0
- data/test/language/scope.rb +451 -561
- data/test/language/snippets.rb +101 -111
- data/test/language/transportable.rb +6 -8
- data/test/lib/mocha.rb +19 -0
- data/test/lib/mocha/any_instance_method.rb +35 -0
- data/test/lib/mocha/auto_verify.rb +113 -0
- data/test/lib/mocha/central.rb +35 -0
- data/test/lib/mocha/class_method.rb +62 -0
- data/test/lib/mocha/expectation.rb +295 -0
- data/test/lib/mocha/expectation_error.rb +6 -0
- data/test/lib/mocha/infinite_range.rb +27 -0
- data/test/lib/mocha/inspect.rb +37 -0
- data/test/lib/mocha/instance_method.rb +8 -0
- data/test/lib/mocha/metaclass.rb +7 -0
- data/test/lib/mocha/mock.rb +20 -0
- data/test/lib/mocha/mock_methods.rb +122 -0
- data/test/lib/mocha/object.rb +100 -0
- data/test/lib/mocha/pretty_parameters.rb +28 -0
- data/test/lib/mocha/setup_and_teardown.rb +23 -0
- data/test/lib/mocha/standalone.rb +30 -0
- data/test/lib/mocha/test_case_adapter.rb +49 -0
- data/test/lib/mocha_standalone.rb +2 -0
- data/test/lib/puppettest.rb +294 -0
- data/test/lib/puppettest/certificates.rb +61 -0
- data/test/lib/puppettest/exetest.rb +123 -0
- data/test/lib/puppettest/fakes.rb +194 -0
- data/test/lib/puppettest/fileparsing.rb +33 -0
- data/test/lib/puppettest/filetesting.rb +231 -0
- data/test/lib/puppettest/graph.rb +41 -0
- data/test/lib/puppettest/parsertesting.rb +392 -0
- data/test/lib/puppettest/railstesting.rb +56 -0
- data/test/lib/puppettest/reporttesting.rb +19 -0
- data/test/lib/puppettest/resourcetesting.rb +73 -0
- data/test/lib/puppettest/servertest.rb +72 -0
- data/test/lib/puppettest/support.rb +8 -0
- data/test/lib/puppettest/support/assertions.rb +101 -0
- data/test/lib/puppettest/support/helpers.rb +23 -0
- data/test/lib/puppettest/support/resources.rb +37 -0
- data/test/lib/puppettest/support/utils.rb +160 -0
- data/test/lib/puppettest/testcase.rb +48 -0
- data/test/lib/rake/puppet_test_loader.rb +17 -0
- data/test/lib/rake/puppet_testtask.rb +17 -0
- data/test/lib/spec.rb +8 -0
- data/test/lib/spec/callback.rb +11 -0
- data/test/lib/spec/callback/callback_container.rb +60 -0
- data/test/lib/spec/callback/extensions/module.rb +24 -0
- data/test/lib/spec/callback/extensions/object.rb +37 -0
- data/test/lib/spec/deprecated.rb +3 -0
- data/test/lib/spec/expectations.rb +59 -0
- data/test/lib/spec/expectations/differs/default.rb +62 -0
- data/test/lib/spec/expectations/errors.rb +6 -0
- data/test/lib/spec/expectations/extensions.rb +3 -0
- data/test/lib/spec/expectations/extensions/object.rb +109 -0
- data/test/lib/spec/expectations/extensions/proc.rb +57 -0
- data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/test/lib/spec/expectations/handler.rb +47 -0
- data/test/lib/spec/expectations/should.rb +5 -0
- data/test/lib/spec/expectations/should/base.rb +64 -0
- data/test/lib/spec/expectations/should/change.rb +69 -0
- data/test/lib/spec/expectations/should/have.rb +128 -0
- data/test/lib/spec/expectations/should/not.rb +74 -0
- data/test/lib/spec/expectations/should/should.rb +81 -0
- data/test/lib/spec/expectations/sugar.rb +47 -0
- data/test/lib/spec/matchers.rb +160 -0
- data/test/lib/spec/matchers/be.rb +161 -0
- data/test/lib/spec/matchers/be_close.rb +37 -0
- data/test/lib/spec/matchers/change.rb +120 -0
- data/test/lib/spec/matchers/eql.rb +43 -0
- data/test/lib/spec/matchers/equal.rb +43 -0
- data/test/lib/spec/matchers/has.rb +44 -0
- data/test/lib/spec/matchers/have.rb +140 -0
- data/test/lib/spec/matchers/include.rb +50 -0
- data/test/lib/spec/matchers/match.rb +41 -0
- data/test/lib/spec/matchers/raise_error.rb +100 -0
- data/test/lib/spec/matchers/respond_to.rb +35 -0
- data/test/lib/spec/matchers/satisfy.rb +47 -0
- data/test/lib/spec/matchers/throw_symbol.rb +75 -0
- data/test/lib/spec/mocks.rb +232 -0
- data/test/lib/spec/mocks/argument_expectation.rb +132 -0
- data/test/lib/spec/mocks/error_generator.rb +85 -0
- data/test/lib/spec/mocks/errors.rb +10 -0
- data/test/lib/spec/mocks/extensions/object.rb +3 -0
- data/test/lib/spec/mocks/message_expectation.rb +231 -0
- data/test/lib/spec/mocks/methods.rb +40 -0
- data/test/lib/spec/mocks/mock.rb +26 -0
- data/test/lib/spec/mocks/mock_handler.rb +166 -0
- data/test/lib/spec/mocks/order_group.rb +29 -0
- data/test/lib/spec/rake/spectask.rb +173 -0
- data/test/lib/spec/rake/verify_rcov.rb +47 -0
- data/test/lib/spec/runner.rb +132 -0
- data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
- data/test/lib/spec/runner/command_line.rb +34 -0
- data/test/lib/spec/runner/context.rb +154 -0
- data/test/lib/spec/runner/context_eval.rb +142 -0
- data/test/lib/spec/runner/context_runner.rb +55 -0
- data/test/lib/spec/runner/drb_command_line.rb +21 -0
- data/test/lib/spec/runner/execution_context.rb +17 -0
- data/test/lib/spec/runner/extensions/kernel.rb +17 -0
- data/test/lib/spec/runner/extensions/object.rb +32 -0
- data/test/lib/spec/runner/formatter.rb +5 -0
- data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
- data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
- data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
- data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
- data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
- data/test/lib/spec/runner/heckle_runner.rb +71 -0
- data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/test/lib/spec/runner/option_parser.rb +224 -0
- data/test/lib/spec/runner/reporter.rb +105 -0
- data/test/lib/spec/runner/spec_matcher.rb +25 -0
- data/test/lib/spec/runner/spec_parser.rb +41 -0
- data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
- data/test/lib/spec/runner/specification.rb +114 -0
- data/test/lib/spec/translator.rb +87 -0
- data/test/lib/spec/version.rb +30 -0
- data/test/lib/stubba.rb +2 -0
- data/test/network/authconfig.rb +72 -0
- data/test/network/authorization.rb +138 -0
- data/test/network/authstore.rb +450 -0
- data/test/network/client/ca.rb +38 -0
- data/test/{client → network/client}/client.rb +107 -24
- data/test/network/client/dipper.rb +35 -0
- data/test/network/client/master.rb +627 -0
- data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
- data/test/network/client_request.rb +39 -0
- data/test/network/daemon.rb +71 -0
- data/test/{server → network/handler}/bucket.rb +103 -27
- data/test/{server → network/handler}/ca.rb +14 -19
- data/test/{server → network/handler}/fileserver.rb +443 -68
- data/test/network/handler/handler.rb +64 -0
- data/test/{server → network/handler}/logger.rb +26 -26
- data/test/network/handler/master.rb +352 -0
- data/test/network/handler/report.rb +185 -0
- data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
- data/test/{server → network/handler}/runner.rb +17 -16
- data/test/network/rights.rb +38 -0
- data/test/network/server/webrick.rb +140 -0
- data/test/network/xmlrpc/client.rb +68 -0
- data/test/network/xmlrpc/processor.rb +80 -0
- data/test/network/xmlrpc/server.rb +28 -0
- data/test/network/xmlrpc/webrick_servlet.rb +26 -0
- data/test/other/dsl.rb +218 -0
- data/test/other/events.rb +22 -15
- data/test/other/overrides.rb +9 -14
- data/test/other/pgraph.rb +289 -0
- data/test/other/propertychange.rb +142 -0
- data/test/other/provider.rb +162 -0
- data/test/other/puppet.rb +63 -10
- data/test/other/relationship.rb +74 -0
- data/test/other/relationships.rb +199 -123
- data/test/other/report.rb +152 -23
- data/test/other/transactions.rb +824 -78
- data/test/puppet/conffiles.rb +16 -11
- data/test/puppet/defaults.rb +7 -10
- data/test/puppet/{error.rb → errortest.rb} +5 -8
- data/test/puppet/modules.rb +58 -0
- data/test/puppet/tc_suidmanager.rb +107 -0
- data/test/rails/host.rb +177 -0
- data/test/rails/rails.rb +27 -0
- data/test/rails/railsparameter.rb +62 -0
- data/test/rails/railsresource.rb +100 -0
- data/test/ral/manager/attributes.rb +296 -0
- data/test/ral/manager/manager.rb +55 -0
- data/test/ral/manager/provider.rb +54 -0
- data/test/ral/manager/type.rb +837 -0
- data/test/ral/providers/cron/crontab.rb +346 -0
- data/test/ral/providers/group.rb +252 -0
- data/test/ral/providers/host/netinfo.rb +58 -0
- data/test/ral/providers/host/parsed.rb +226 -0
- data/test/ral/providers/mount/netinfo.rb +80 -0
- data/test/ral/providers/mount/parsed.rb +223 -0
- data/test/ral/providers/nameservice.rb +33 -0
- data/test/ral/providers/package.rb +253 -0
- data/test/ral/providers/package/apt.rb +89 -0
- data/test/ral/providers/package/aptitude.rb +69 -0
- data/test/ral/providers/package/aptrpm.rb +89 -0
- data/test/ral/providers/package/dpkg.rb +64 -0
- data/test/ral/providers/parsedfile.rb +668 -0
- data/test/ral/providers/parsedport.rb +233 -0
- data/test/ral/providers/provider.rb +423 -0
- data/test/{types → ral/providers}/service.rb +20 -121
- data/test/ral/providers/service/base.rb +75 -0
- data/test/ral/providers/sshkey/parsed.rb +111 -0
- data/test/ral/providers/user.rb +567 -0
- data/test/ral/providers/user/useradd.rb +250 -0
- data/test/ral/types/basic.rb +90 -0
- data/test/ral/types/component.rb +113 -0
- data/test/ral/types/cron.rb +480 -0
- data/test/{types → ral/types}/exec.rb +278 -82
- data/test/ral/types/file.rb +1799 -0
- data/test/ral/types/file/target.rb +363 -0
- data/test/{types → ral/types}/filebucket.rb +15 -17
- data/test/{types → ral/types}/fileignoresource.rb +9 -15
- data/test/ral/types/filesources.rb +1046 -0
- data/test/ral/types/group.rb +169 -0
- data/test/ral/types/host.rb +155 -0
- data/test/ral/types/mount.rb +312 -0
- data/test/ral/types/package.rb +85 -0
- data/test/ral/types/parameter.rb +172 -0
- data/test/ral/types/port.rb +148 -0
- data/test/ral/types/property.rb +343 -0
- data/test/ral/types/resources.rb +221 -0
- data/test/{types → ral/types}/schedule.rb +34 -12
- data/test/ral/types/service.rb +37 -0
- data/test/{types → ral/types}/sshkey.rb +75 -65
- data/test/ral/types/tidy.rb +240 -0
- data/test/ral/types/user.rb +493 -0
- data/test/{types → ral/types}/yumrepo.rb +7 -11
- data/test/{types → ral/types}/zone.rb +45 -45
- data/test/tagging/tagging.rb +17 -26
- data/test/util/autoload.rb +130 -0
- data/test/util/classgen.rb +227 -0
- data/test/{other → util}/config.rb +373 -113
- data/test/util/execution.rb +34 -0
- data/test/util/features.rb +94 -0
- data/test/util/fileparsing.rb +677 -0
- data/test/{other → util}/filetype.rb +9 -12
- data/test/util/graph.rb +108 -0
- data/test/{other → util}/inifile.rb +24 -11
- data/test/util/loadedfile.rb +106 -0
- data/test/{other → util}/log.rb +96 -50
- data/test/{other → util}/metrics.rb +7 -17
- data/test/util/package.rb +27 -0
- data/test/util/pidlock.rb +126 -0
- data/test/util/posixtest.rb +173 -0
- data/test/util/storage.rb +123 -0
- data/test/util/subclass_loader.rb +100 -0
- data/test/util/utiltest.rb +368 -0
- metadata +449 -169
- data/examples/code/classing +0 -35
- data/examples/code/failers/badclassnoparam +0 -10
- data/examples/code/failers/badclassparam +0 -10
- data/examples/code/failers/badcompnoparam +0 -9
- data/examples/code/failers/badcompparam +0 -9
- data/examples/code/failers/badtypeparam +0 -3
- data/examples/code/failers/noobjectrvalue +0 -1
- data/examples/code/snippets/aliastest.pp +0 -16
- data/examples/code/snippets/argumentdefaults +0 -14
- data/examples/code/snippets/casestatement.pp +0 -58
- data/examples/code/snippets/classheirarchy.pp +0 -15
- data/examples/code/snippets/classincludes.pp +0 -17
- data/examples/code/snippets/classpathtest +0 -11
- data/examples/code/snippets/componentmetaparams.pp +0 -11
- data/examples/code/snippets/deepclassheirarchy.pp +0 -23
- data/examples/code/snippets/defineoverrides.pp +0 -17
- data/examples/code/snippets/dirchmod +0 -19
- data/examples/code/snippets/emptyclass.pp +0 -9
- data/examples/code/snippets/emptyexec.pp +0 -3
- data/examples/code/snippets/failmissingexecpath.pp +0 -13
- data/examples/code/snippets/falsevalues.pp +0 -3
- data/examples/code/snippets/filecreate +0 -11
- data/examples/code/snippets/implicititeration +0 -15
- data/examples/code/snippets/multipleinstances +0 -7
- data/examples/code/snippets/namevartest +0 -9
- data/examples/code/snippets/scopetest +0 -13
- data/examples/code/snippets/selectorvalues.pp +0 -42
- data/examples/code/snippets/simpledefaults +0 -5
- data/examples/code/snippets/simpleselector +0 -38
- data/examples/code/snippets/singleary.pp +0 -19
- data/examples/code/snippets/singlequote.pp +0 -11
- data/examples/code/snippets/singleselector.pp +0 -22
- data/examples/code/snippets/tag.pp +0 -9
- data/examples/code/snippets/tagged.pp +0 -35
- data/lib/puppet/client.rb +0 -177
- data/lib/puppet/client/ca.rb +0 -21
- data/lib/puppet/client/dipper.rb +0 -76
- data/lib/puppet/client/file.rb +0 -20
- data/lib/puppet/client/log.rb +0 -17
- data/lib/puppet/client/master.rb +0 -531
- data/lib/puppet/client/runner.rb +0 -17
- data/lib/puppet/client/status.rb +0 -7
- data/lib/puppet/event-loop.rb +0 -1
- data/lib/puppet/filetype.rb +0 -308
- data/lib/puppet/inifile.rb +0 -201
- data/lib/puppet/log.rb +0 -524
- data/lib/puppet/metric.rb +0 -132
- data/lib/puppet/networkclient.rb +0 -175
- data/lib/puppet/parsedfile.rb +0 -58
- data/lib/puppet/parser/ast/classdef.rb +0 -79
- data/lib/puppet/parser/ast/compdef.rb +0 -75
- data/lib/puppet/parser/ast/nodedef.rb +0 -73
- data/lib/puppet/parser/ast/objectdef.rb +0 -284
- data/lib/puppet/parser/ast/objectref.rb +0 -77
- data/lib/puppet/rails/database.rb +0 -40
- data/lib/puppet/rails/rails_object.rb +0 -42
- data/lib/puppet/rails/rails_parameter.rb +0 -5
- data/lib/puppet/server.rb +0 -196
- data/lib/puppet/server/authconfig.rb +0 -177
- data/lib/puppet/server/authstore.rb +0 -226
- data/lib/puppet/server/filebucket.rb +0 -155
- data/lib/puppet/server/pelement.rb +0 -188
- data/lib/puppet/server/report.rb +0 -184
- data/lib/puppet/server/rights.rb +0 -78
- data/lib/puppet/server/servlet.rb +0 -274
- data/lib/puppet/statechange.rb +0 -129
- data/lib/puppet/storage.rb +0 -98
- data/lib/puppet/type/nameservice.rb +0 -264
- data/lib/puppet/type/nameservice/netinfo.rb +0 -232
- data/lib/puppet/type/nameservice/objectadd.rb +0 -146
- data/lib/puppet/type/nameservice/posix.rb +0 -12
- data/lib/puppet/type/nameservice/pw.rb +0 -107
- data/lib/puppet/type/package/apple.rb +0 -41
- data/lib/puppet/type/package/apt.rb +0 -107
- data/lib/puppet/type/package/blastwave.rb +0 -136
- data/lib/puppet/type/package/darwinport.rb +0 -97
- data/lib/puppet/type/package/dpkg.rb +0 -113
- data/lib/puppet/type/package/freebsd.rb +0 -19
- data/lib/puppet/type/package/gem.rb +0 -119
- data/lib/puppet/type/package/openbsd.rb +0 -112
- data/lib/puppet/type/package/ports.rb +0 -103
- data/lib/puppet/type/package/rpm.rb +0 -121
- data/lib/puppet/type/package/sun.rb +0 -174
- data/lib/puppet/type/package/sunfreeware.rb +0 -7
- data/lib/puppet/type/package/yum.rb +0 -52
- data/lib/puppet/type/parsedtype/host.rb +0 -144
- data/lib/puppet/type/parsedtype/mount.rb +0 -271
- data/lib/puppet/type/parsedtype/port.rb +0 -261
- data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
- data/lib/puppet/type/service/base.rb +0 -12
- data/lib/puppet/type/service/debian.rb +0 -46
- data/lib/puppet/type/service/redhat.rb +0 -38
- data/lib/puppet/type/state.rb +0 -393
- data/lib/puppet/type/symlink.rb +0 -186
- data/test/client/master.rb +0 -207
- data/test/language/rails.rb +0 -105
- data/test/other/parsedfile.rb +0 -58
- data/test/other/storage.rb +0 -100
- data/test/puppet/utiltest.rb +0 -299
- data/test/puppettest.rb +0 -1170
- data/test/server/authconfig.rb +0 -56
- data/test/server/authstore.rb +0 -218
- data/test/server/master.rb +0 -201
- data/test/server/report.rb +0 -93
- data/test/server/rights.rb +0 -41
- data/test/server/server.rb +0 -152
- data/test/test +0 -61
- data/test/types/basic.rb +0 -117
- data/test/types/component.rb +0 -298
- data/test/types/cron.rb +0 -718
- data/test/types/file.rb +0 -1314
- data/test/types/filesources.rb +0 -590
- data/test/types/group.rb +0 -323
- data/test/types/host.rb +0 -186
- data/test/types/mount.rb +0 -294
- data/test/types/package.rb +0 -538
- data/test/types/parameter.rb +0 -107
- data/test/types/port.rb +0 -201
- data/test/types/query.rb +0 -101
- data/test/types/state.rb +0 -92
- data/test/types/symlink.rb +0 -120
- data/test/types/tidy.rb +0 -102
- data/test/types/type.rb +0 -469
- data/test/types/user.rb +0 -563
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
module Puppet
|
|
2
|
-
Puppet.type(:file).
|
|
3
|
-
attr_accessor :linkmaker
|
|
4
|
-
|
|
2
|
+
Puppet.type(:file).newproperty(:target) do
|
|
5
3
|
desc "The target for creating a link. Currently, symlinks are the
|
|
6
4
|
only type supported."
|
|
7
5
|
|
|
@@ -12,7 +10,12 @@ module Puppet
|
|
|
12
10
|
|
|
13
11
|
# Anything else, basically
|
|
14
12
|
newvalue(/./) do
|
|
15
|
-
if @parent.
|
|
13
|
+
if ! @parent.should(:ensure)
|
|
14
|
+
@parent[:ensure] = :link
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Only call mklink if ensure() didn't call us in the first place.
|
|
18
|
+
if @parent.property(:ensure).insync?
|
|
16
19
|
mklink()
|
|
17
20
|
end
|
|
18
21
|
end
|
|
@@ -21,20 +24,16 @@ module Puppet
|
|
|
21
24
|
def mklink
|
|
22
25
|
target = self.should
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
end
|
|
27
|
+
# Clean up any existing objects. The argument is just for logging,
|
|
28
|
+
# it doesn't determine what's removed.
|
|
29
|
+
@parent.remove_existing(target)
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
FileUtils.rmtree(@parent[:path])
|
|
32
|
-
else
|
|
33
|
-
File.unlink(@parent[:path])
|
|
34
|
-
end
|
|
31
|
+
if FileTest.exists?(@parent[:path])
|
|
32
|
+
raise Puppet::Error, "Could not remove existing file"
|
|
35
33
|
end
|
|
34
|
+
|
|
36
35
|
Dir.chdir(File.dirname(@parent[:path])) do
|
|
37
|
-
Puppet::Util.asuser(@parent.asuser()) do
|
|
36
|
+
Puppet::Util::SUIDManager.asuser(@parent.asuser()) do
|
|
38
37
|
mode = @parent.should(:mode)
|
|
39
38
|
if mode
|
|
40
39
|
Puppet::Util.withumask(000) do
|
|
@@ -49,41 +48,26 @@ module Puppet
|
|
|
49
48
|
end
|
|
50
49
|
end
|
|
51
50
|
|
|
52
|
-
def
|
|
53
|
-
if
|
|
54
|
-
|
|
55
|
-
@linkmaker = true
|
|
51
|
+
def insync?
|
|
52
|
+
if [:nochange, :notlink].include?(self.should) or @parent.recurse?
|
|
53
|
+
return true
|
|
56
54
|
else
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
unless @parent.recurse?
|
|
66
|
-
raise "wtf?"
|
|
67
|
-
end
|
|
68
|
-
warning "Changing ensure to directory; recurse is %s but %s" %
|
|
69
|
-
[@parent[:recurse].inspect, @parent.recurse?]
|
|
70
|
-
@parent[:ensure] = :directory
|
|
71
|
-
@is = should
|
|
72
|
-
@linkmaker = true
|
|
73
|
-
else
|
|
74
|
-
if stat.ftype == "link"
|
|
75
|
-
@is = File.readlink(@parent[:path])
|
|
76
|
-
@linkmaker = false
|
|
77
|
-
else
|
|
78
|
-
@is = :notlink
|
|
79
|
-
end
|
|
80
|
-
end
|
|
55
|
+
return super
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def retrieve
|
|
60
|
+
if stat = @parent.stat
|
|
61
|
+
if stat.ftype == "link"
|
|
62
|
+
@is = File.readlink(@parent[:path])
|
|
81
63
|
else
|
|
82
|
-
@is = :
|
|
64
|
+
@is = :notlink
|
|
83
65
|
end
|
|
66
|
+
else
|
|
67
|
+
@is = :absent
|
|
84
68
|
end
|
|
85
69
|
end
|
|
86
70
|
end
|
|
87
71
|
end
|
|
88
72
|
|
|
89
|
-
# $Id: target.rb
|
|
73
|
+
# $Id: target.rb 2269 2007-03-08 07:36:46Z luke $
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Puppet
|
|
2
|
-
Puppet.type(:file).
|
|
2
|
+
Puppet.type(:file).newproperty(:type) do
|
|
3
3
|
require 'etc'
|
|
4
4
|
desc "A read-only state to check the file type."
|
|
5
5
|
|
|
@@ -25,4 +25,4 @@ module Puppet
|
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
# $Id: type.rb
|
|
28
|
+
# $Id: type.rb 2169 2007-02-07 06:47:10Z luke $
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require 'puppet/server/filebucket'
|
|
2
|
-
|
|
3
1
|
module Puppet
|
|
2
|
+
require 'puppet/network/client'
|
|
3
|
+
|
|
4
4
|
newtype(:filebucket) do
|
|
5
5
|
@doc = "A repository for backing up files. If no filebucket is
|
|
6
6
|
defined, then files will be backed up in their current directory,
|
|
@@ -17,7 +17,7 @@ module Puppet
|
|
|
17
17
|
undo transactions.
|
|
18
18
|
|
|
19
19
|
You will normally want to define a single filebucket for your
|
|
20
|
-
whole network and then use that as the default backup location
|
|
20
|
+
whole network and then use that as the default backup location::
|
|
21
21
|
|
|
22
22
|
# Define the bucket
|
|
23
23
|
filebucket { main: server => puppet }
|
|
@@ -26,10 +26,7 @@ module Puppet
|
|
|
26
26
|
File { backup => main }
|
|
27
27
|
|
|
28
28
|
Puppetmaster servers create a filebucket by default, so this will
|
|
29
|
-
work in a default configuration.
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
@states = []
|
|
29
|
+
work in a default configuration."
|
|
33
30
|
|
|
34
31
|
newparam(:name) do
|
|
35
32
|
desc "The name of the filebucket."
|
|
@@ -54,7 +51,7 @@ module Puppet
|
|
|
54
51
|
not specified, then the bucket is remote and *server* must be
|
|
55
52
|
specified."
|
|
56
53
|
|
|
57
|
-
defaultto { Puppet[:
|
|
54
|
+
defaultto { Puppet[:clientbucketdir] }
|
|
58
55
|
end
|
|
59
56
|
|
|
60
57
|
# get the actual filebucket object
|
|
@@ -65,6 +62,13 @@ module Puppet
|
|
|
65
62
|
return nil
|
|
66
63
|
end
|
|
67
64
|
end
|
|
65
|
+
|
|
66
|
+
# Create a default filebucket.
|
|
67
|
+
def self.mkdefaultbucket
|
|
68
|
+
unless self["puppet"]
|
|
69
|
+
self.create :name => "puppet", :path => Puppet[:clientbucketdir]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
68
72
|
|
|
69
73
|
def self.list
|
|
70
74
|
self.collect do |obj| obj.name end
|
|
@@ -81,7 +85,7 @@ module Puppet
|
|
|
81
85
|
def mkbucket
|
|
82
86
|
if self[:server]
|
|
83
87
|
begin
|
|
84
|
-
@bucket = Puppet::Client
|
|
88
|
+
@bucket = Puppet::Network::Client.client(:Dipper).new(
|
|
85
89
|
:Server => self[:server],
|
|
86
90
|
:Port => self[:port]
|
|
87
91
|
)
|
|
@@ -91,14 +95,14 @@ module Puppet
|
|
|
91
95
|
)
|
|
92
96
|
end
|
|
93
97
|
else
|
|
94
|
-
unless self[:path]
|
|
95
|
-
self[:path] = Puppet[:bucketdir]
|
|
96
|
-
end
|
|
97
98
|
begin
|
|
98
|
-
@bucket = Puppet::Client
|
|
99
|
+
@bucket = Puppet::Network::Client.client(:Dipper).new(
|
|
99
100
|
:Path => self[:path]
|
|
100
101
|
)
|
|
101
102
|
rescue => detail
|
|
103
|
+
if Puppet[:trace]
|
|
104
|
+
puts detail.backtrace
|
|
105
|
+
end
|
|
102
106
|
self.fail(
|
|
103
107
|
"Could not create local filebucket: %s" % detail
|
|
104
108
|
)
|
|
@@ -110,4 +114,4 @@ module Puppet
|
|
|
110
114
|
end
|
|
111
115
|
end
|
|
112
116
|
|
|
113
|
-
# $Id: pfilebucket.rb
|
|
117
|
+
# $Id: pfilebucket.rb 2408 2007-04-24 02:41:16Z luke $
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require 'puppet/type/parsedtype'
|
|
2
|
+
|
|
3
|
+
#module Puppet
|
|
4
|
+
# newtype(:port) do
|
|
5
|
+
# @doc = "Installs and manages port entries. For most systems, these
|
|
6
|
+
# entries will just be in /etc/services, but some systems (notably OS X)
|
|
7
|
+
# will have different solutions."
|
|
8
|
+
#
|
|
9
|
+
# ensurable
|
|
10
|
+
#
|
|
11
|
+
# newproperty(:protocols) do
|
|
12
|
+
# desc "The protocols the port uses. Valid values are *udp* and *tcp*.
|
|
13
|
+
# Most services have both protocols, but not all. If you want
|
|
14
|
+
# both protocols, you must specify that; Puppet replaces the
|
|
15
|
+
# current values, it does not merge with them. If you specify
|
|
16
|
+
# multiple protocols they must be as an array."
|
|
17
|
+
#
|
|
18
|
+
# def is=(value)
|
|
19
|
+
# case value
|
|
20
|
+
# when String
|
|
21
|
+
# @is = value.split(/\s+/)
|
|
22
|
+
# else
|
|
23
|
+
# @is = value
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# def is
|
|
28
|
+
# @is
|
|
29
|
+
# end
|
|
30
|
+
#
|
|
31
|
+
# # We actually want to return the whole array here, not just the first
|
|
32
|
+
# # value.
|
|
33
|
+
# def should
|
|
34
|
+
# if defined? @should
|
|
35
|
+
# if @should[0] == :absent
|
|
36
|
+
# return :absent
|
|
37
|
+
# else
|
|
38
|
+
# return @should
|
|
39
|
+
# end
|
|
40
|
+
# else
|
|
41
|
+
# return nil
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# validate do |value|
|
|
46
|
+
# valids = ["udp", "tcp", "ddp", :absent]
|
|
47
|
+
# unless valids.include? value
|
|
48
|
+
# raise Puppet::Error,
|
|
49
|
+
# "Protocols can be either 'udp' or 'tcp', not %s" % value
|
|
50
|
+
# end
|
|
51
|
+
# end
|
|
52
|
+
# end
|
|
53
|
+
#
|
|
54
|
+
# newproperty(:number) do
|
|
55
|
+
# desc "The port number."
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
# newproperty(:description) do
|
|
59
|
+
# desc "The port description."
|
|
60
|
+
# end
|
|
61
|
+
#
|
|
62
|
+
# newproperty(:alias) do
|
|
63
|
+
# desc "Any aliases the port might have. Multiple values must be
|
|
64
|
+
# specified as an array. Note that this property has the same name as
|
|
65
|
+
# one of the metaparams; using this property to set aliases will make
|
|
66
|
+
# those aliases available in your Puppet scripts and also on disk."
|
|
67
|
+
#
|
|
68
|
+
# # We actually want to return the whole array here, not just the first
|
|
69
|
+
# # value.
|
|
70
|
+
# def should
|
|
71
|
+
# if defined? @should
|
|
72
|
+
# if @should[0] == :absent
|
|
73
|
+
# return :absent
|
|
74
|
+
# else
|
|
75
|
+
# return @should
|
|
76
|
+
# end
|
|
77
|
+
# else
|
|
78
|
+
# return nil
|
|
79
|
+
# end
|
|
80
|
+
# end
|
|
81
|
+
#
|
|
82
|
+
# validate do |value|
|
|
83
|
+
# if value.is_a? String and value =~ /\s/
|
|
84
|
+
# raise Puppet::Error,
|
|
85
|
+
# "Aliases cannot have whitespace in them: %s" %
|
|
86
|
+
# value.inspect
|
|
87
|
+
# end
|
|
88
|
+
# end
|
|
89
|
+
#
|
|
90
|
+
# munge do |value|
|
|
91
|
+
# unless value == "absent" or value == :absent
|
|
92
|
+
# # Add the :alias metaparam in addition to the property
|
|
93
|
+
# @parent.newmetaparam(
|
|
94
|
+
# @parent.class.metaparamclass(:alias), value
|
|
95
|
+
# )
|
|
96
|
+
# end
|
|
97
|
+
# value
|
|
98
|
+
# end
|
|
99
|
+
# end
|
|
100
|
+
#
|
|
101
|
+
# newproperty(:target) do
|
|
102
|
+
# desc "The file in which to store service information. Only used by
|
|
103
|
+
# those providers that write to disk (i.e., not NetInfo)."
|
|
104
|
+
#
|
|
105
|
+
# defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
|
|
106
|
+
# @parent.class.defaultprovider.default_target
|
|
107
|
+
# else
|
|
108
|
+
# nil
|
|
109
|
+
# end
|
|
110
|
+
# }
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
# newparam(:name) do
|
|
114
|
+
# desc "The port name."
|
|
115
|
+
#
|
|
116
|
+
# isnamevar
|
|
117
|
+
# end
|
|
118
|
+
# end
|
|
119
|
+
#end
|
|
120
|
+
|
|
121
|
+
# $Id: port.rb 2169 2007-02-07 06:47:10Z luke $
|
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
# The virtual base class for properties, which are the self-contained building
|
|
2
|
+
# blocks for actually doing work on the system.
|
|
3
|
+
|
|
4
|
+
require 'puppet'
|
|
5
|
+
require 'puppet/element'
|
|
6
|
+
require 'puppet/propertychange'
|
|
7
|
+
require 'puppet/parameter'
|
|
8
|
+
|
|
9
|
+
module Puppet
|
|
10
|
+
class Property < Puppet::Parameter
|
|
11
|
+
attr_accessor :is
|
|
12
|
+
|
|
13
|
+
# Because 'should' uses an array, we have a special method for handling
|
|
14
|
+
# it. We also want to keep copies of the original values, so that
|
|
15
|
+
# they can be retrieved and compared later when merging.
|
|
16
|
+
attr_reader :shouldorig
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
attr_accessor :unmanaged
|
|
20
|
+
attr_reader :name
|
|
21
|
+
|
|
22
|
+
def checkable
|
|
23
|
+
@checkable = true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def uncheckable
|
|
27
|
+
@checkable = false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def checkable?
|
|
31
|
+
if defined? @checkable
|
|
32
|
+
return @checkable
|
|
33
|
+
else
|
|
34
|
+
return true
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Look up a value's name, so we can find options and such.
|
|
40
|
+
def self.value_name(value)
|
|
41
|
+
name = symbolize(value)
|
|
42
|
+
if @parametervalues[name]
|
|
43
|
+
return name
|
|
44
|
+
elsif ary = self.match?(value)
|
|
45
|
+
return ary[0]
|
|
46
|
+
else
|
|
47
|
+
return nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Retrieve an option set when a value was defined.
|
|
52
|
+
def self.value_option(name, option)
|
|
53
|
+
if option.is_a?(String)
|
|
54
|
+
option = symbolize(option)
|
|
55
|
+
end
|
|
56
|
+
if hash = @parameteroptions[name]
|
|
57
|
+
hash[option]
|
|
58
|
+
else
|
|
59
|
+
nil
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Create the value management variables.
|
|
64
|
+
def self.initvars
|
|
65
|
+
@parametervalues = {}
|
|
66
|
+
@aliasvalues = {}
|
|
67
|
+
@parameterregexes = {}
|
|
68
|
+
@parameteroptions = {}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Define a new valid value for a property. You must provide the value itself,
|
|
72
|
+
# usually as a symbol, or a regex to match the value.
|
|
73
|
+
#
|
|
74
|
+
# The first argument to the method is either the value itself or a regex.
|
|
75
|
+
# The second argument is an option hash; valid options are:
|
|
76
|
+
# * <tt>:event</tt>: The event that should be returned when this value is set.
|
|
77
|
+
# * <tt>:call</tt>: When to call any associated block. The default value
|
|
78
|
+
# is ``instead``, which means to call the value instead of calling the
|
|
79
|
+
# provider. You can also specify ``before`` or ``after``, which will
|
|
80
|
+
# call both the block and the provider, according to the order you specify
|
|
81
|
+
# (the ``first`` refers to when the block is called, not the provider).
|
|
82
|
+
def self.newvalue(name, options = {}, &block)
|
|
83
|
+
name = name.intern if name.is_a? String
|
|
84
|
+
|
|
85
|
+
@parameteroptions[name] = {}
|
|
86
|
+
paramopts = @parameteroptions[name]
|
|
87
|
+
|
|
88
|
+
# Symbolize everything
|
|
89
|
+
options.each do |opt, val|
|
|
90
|
+
paramopts[symbolize(opt)] = symbolize(val)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# By default, call the block instead of the provider.
|
|
94
|
+
if block_given?
|
|
95
|
+
paramopts[:call] ||= :instead
|
|
96
|
+
else
|
|
97
|
+
paramopts[:call] ||= :none
|
|
98
|
+
end
|
|
99
|
+
# If there was no block given, we still want to store the information
|
|
100
|
+
# for validation, but we won't be defining a method
|
|
101
|
+
block ||= true
|
|
102
|
+
|
|
103
|
+
case name
|
|
104
|
+
when Symbol
|
|
105
|
+
if @parametervalues.include?(name)
|
|
106
|
+
Puppet.warning "%s reassigning value %s" % [self.name, name]
|
|
107
|
+
end
|
|
108
|
+
@parametervalues[name] = block
|
|
109
|
+
|
|
110
|
+
if block_given?
|
|
111
|
+
method = "set_" + name.to_s
|
|
112
|
+
settor = paramopts[:settor] || (self.name.to_s + "=")
|
|
113
|
+
define_method(method, &block)
|
|
114
|
+
paramopts[:method] = method
|
|
115
|
+
end
|
|
116
|
+
when Regexp
|
|
117
|
+
# The regexes are handled in parameter.rb. This value is used
|
|
118
|
+
# for validation.
|
|
119
|
+
@parameterregexes[name] = block
|
|
120
|
+
|
|
121
|
+
# This is used for looking up the block for execution.
|
|
122
|
+
if block_given?
|
|
123
|
+
paramopts[:block] = block
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
raise ArgumentError, "Invalid value %s of type %s" %
|
|
127
|
+
[name, name.class]
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Call the provider method.
|
|
132
|
+
def call_provider(value)
|
|
133
|
+
begin
|
|
134
|
+
provider.send(self.class.name.to_s + "=", value)
|
|
135
|
+
rescue NoMethodError
|
|
136
|
+
self.fail "The %s provider can not handle attribute %s" %
|
|
137
|
+
[provider.class.name, self.class.name]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Call the dynamically-created method associated with our value, if
|
|
142
|
+
# there is one.
|
|
143
|
+
def call_valuemethod(name, value)
|
|
144
|
+
event = nil
|
|
145
|
+
if method = self.class.value_option(name, :method) and self.respond_to?(method)
|
|
146
|
+
self.debug "setting %s (currently %s)" % [value, self.is]
|
|
147
|
+
|
|
148
|
+
begin
|
|
149
|
+
event = self.send(method)
|
|
150
|
+
rescue Puppet::Error
|
|
151
|
+
raise
|
|
152
|
+
rescue => detail
|
|
153
|
+
if Puppet[:trace]
|
|
154
|
+
puts detail.backtrace
|
|
155
|
+
end
|
|
156
|
+
error = Puppet::Error.new("Could not set %s on %s: %s" %
|
|
157
|
+
[value, self.class.name, detail], @parent.line, @parent.file)
|
|
158
|
+
error.set_backtrace detail.backtrace
|
|
159
|
+
raise error
|
|
160
|
+
end
|
|
161
|
+
elsif block = self.class.value_option(name, :block)
|
|
162
|
+
# FIXME It'd be better here to define a method, so that
|
|
163
|
+
# the blocks could return values.
|
|
164
|
+
# If the regex was defined with no associated block, then just pass
|
|
165
|
+
# through and the correct event will be passed back.
|
|
166
|
+
event = self.instance_eval(&block)
|
|
167
|
+
end
|
|
168
|
+
return event, name
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# How should a property change be printed as a string?
|
|
172
|
+
def change_to_s
|
|
173
|
+
begin
|
|
174
|
+
if @is == :absent
|
|
175
|
+
return "defined '%s' as '%s'" %
|
|
176
|
+
[self.name, self.should_to_s]
|
|
177
|
+
elsif self.should == :absent or self.should == [:absent]
|
|
178
|
+
return "undefined %s from '%s'" %
|
|
179
|
+
[self.name, self.is_to_s]
|
|
180
|
+
else
|
|
181
|
+
return "%s changed '%s' to '%s'" %
|
|
182
|
+
[self.name, self.is_to_s, self.should_to_s]
|
|
183
|
+
end
|
|
184
|
+
rescue Puppet::Error, Puppet::DevError
|
|
185
|
+
raise
|
|
186
|
+
rescue => detail
|
|
187
|
+
raise Puppet::DevError, "Could not convert change %s to string: %s" %
|
|
188
|
+
[self.name, detail]
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Figure out which event to return.
|
|
193
|
+
def event(name, event = nil)
|
|
194
|
+
if value_event = self.class.value_option(name, :event)
|
|
195
|
+
return value_event
|
|
196
|
+
else
|
|
197
|
+
if event and event.is_a?(Symbol)
|
|
198
|
+
if event == :nochange
|
|
199
|
+
return nil
|
|
200
|
+
else
|
|
201
|
+
return event
|
|
202
|
+
end
|
|
203
|
+
else
|
|
204
|
+
if self.class.name == :ensure
|
|
205
|
+
event = case self.should
|
|
206
|
+
when :present: (@parent.class.name.to_s + "_created").intern
|
|
207
|
+
when :absent: (@parent.class.name.to_s + "_removed").intern
|
|
208
|
+
else
|
|
209
|
+
(@parent.class.name.to_s + "_changed").intern
|
|
210
|
+
end
|
|
211
|
+
else
|
|
212
|
+
event = (@parent.class.name.to_s + "_changed").intern
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
return event
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# initialize our property
|
|
221
|
+
def initialize(hash = {})
|
|
222
|
+
@is = nil
|
|
223
|
+
super
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def inspect
|
|
227
|
+
str = "Property('%s', " % self.name
|
|
228
|
+
if self.is
|
|
229
|
+
str += "@is = '%s', " % [self.is]
|
|
230
|
+
else
|
|
231
|
+
str += "@is = nil, "
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
if defined? @should and @should
|
|
235
|
+
str += "@should = '%s')" % @should.join(", ")
|
|
236
|
+
else
|
|
237
|
+
str += "@should = nil)"
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Determine whether the property is in-sync or not. If @should is
|
|
242
|
+
# not defined or is set to a non-true value, then we do not have
|
|
243
|
+
# a valid value for it and thus consider the property to be in-sync
|
|
244
|
+
# since we cannot fix it. Otherwise, we expect our should value
|
|
245
|
+
# to be an array, and if @is matches any of those values, then
|
|
246
|
+
# we consider it to be in-sync.
|
|
247
|
+
def insync?
|
|
248
|
+
#debug "%s value is '%s', should be '%s'" %
|
|
249
|
+
# [self,self.is.inspect,self.should.inspect]
|
|
250
|
+
unless defined? @should and @should
|
|
251
|
+
return true
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
unless @should.is_a?(Array)
|
|
255
|
+
self.devfail "%s's should is not array" % self.class.name
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# an empty array is analogous to no should values
|
|
259
|
+
if @should.empty?
|
|
260
|
+
return true
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Look for a matching value
|
|
264
|
+
@should.each { |val|
|
|
265
|
+
if @is == val or @is == val.to_s
|
|
266
|
+
return true
|
|
267
|
+
end
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
# otherwise, return false
|
|
271
|
+
return false
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# because the @should and @is vars might be in weird formats,
|
|
275
|
+
# we need to set up a mechanism for pretty printing of the values
|
|
276
|
+
# default to just the values, but this way individual properties can
|
|
277
|
+
# override these methods
|
|
278
|
+
def is_to_s
|
|
279
|
+
@is
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Send a log message.
|
|
283
|
+
def log(msg)
|
|
284
|
+
unless @parent[:loglevel]
|
|
285
|
+
self.devfail "Parent %s has no loglevel" %
|
|
286
|
+
@parent.name
|
|
287
|
+
end
|
|
288
|
+
Puppet::Util::Log.create(
|
|
289
|
+
:level => @parent[:loglevel],
|
|
290
|
+
:message => msg,
|
|
291
|
+
:source => self
|
|
292
|
+
)
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# each property class must define the name() method, and property instances
|
|
296
|
+
# do not change that name
|
|
297
|
+
# this implicitly means that a given object can only have one property
|
|
298
|
+
# instance of a given property class
|
|
299
|
+
def name
|
|
300
|
+
return self.class.name
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# for testing whether we should actually do anything
|
|
304
|
+
def noop
|
|
305
|
+
unless defined? @noop
|
|
306
|
+
@noop = false
|
|
307
|
+
end
|
|
308
|
+
if self.parent.respond_to?(:noop)
|
|
309
|
+
tmp = @noop || self.parent.noop || Puppet[:noop] || false
|
|
310
|
+
else
|
|
311
|
+
tmp = @noop || Puppet[:noop] || false
|
|
312
|
+
end
|
|
313
|
+
return tmp
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# By default, call the method associated with the property name on our
|
|
317
|
+
# provider. In other words, if the property name is 'gid', we'll call
|
|
318
|
+
# 'provider.gid' to retrieve the current value.
|
|
319
|
+
def retrieve
|
|
320
|
+
@is = provider.send(self.class.name)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Set our value, using the provider, an associated block, or both.
|
|
324
|
+
def set(value)
|
|
325
|
+
# Set a name for looking up associated options like the event.
|
|
326
|
+
name = self.class.value_name(value)
|
|
327
|
+
|
|
328
|
+
call = self.class.value_option(name, :call)
|
|
329
|
+
|
|
330
|
+
# If we're supposed to call the block first or instead, call it now
|
|
331
|
+
if call == :before or call == :instead
|
|
332
|
+
event, tmp = call_valuemethod(name, value)
|
|
333
|
+
end
|
|
334
|
+
unless call == :instead
|
|
335
|
+
if @parent.provider
|
|
336
|
+
call_provider(value)
|
|
337
|
+
else
|
|
338
|
+
# They haven't provided a block, and our parent does not have
|
|
339
|
+
# a provider, so we have no idea how to handle this.
|
|
340
|
+
self.fail "%s cannot handle values of type %s" %
|
|
341
|
+
[self.class.name, value.inspect]
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
if call == :after
|
|
345
|
+
event, tmp = call_valuemethod(name, value)
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
return event(name, event)
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Only return the first value
|
|
352
|
+
def should
|
|
353
|
+
if defined? @should
|
|
354
|
+
unless @should.is_a?(Array)
|
|
355
|
+
self.devfail "should for %s on %s is not an array" %
|
|
356
|
+
[self.class.name, @parent.name]
|
|
357
|
+
end
|
|
358
|
+
return @should[0]
|
|
359
|
+
else
|
|
360
|
+
return nil
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# Set the should value.
|
|
365
|
+
def should=(values)
|
|
366
|
+
unless values.is_a?(Array)
|
|
367
|
+
values = [values]
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
@shouldorig = values
|
|
371
|
+
|
|
372
|
+
if self.respond_to?(:validate)
|
|
373
|
+
values.each { |val|
|
|
374
|
+
validate(val)
|
|
375
|
+
}
|
|
376
|
+
end
|
|
377
|
+
if self.respond_to?(:munge)
|
|
378
|
+
@should = values.collect { |val|
|
|
379
|
+
self.munge(val)
|
|
380
|
+
}
|
|
381
|
+
else
|
|
382
|
+
@should = values
|
|
383
|
+
end
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def should_to_s
|
|
387
|
+
if defined? @should
|
|
388
|
+
@should.join(" ")
|
|
389
|
+
else
|
|
390
|
+
return nil
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
# The default 'sync' method only selects among a list of registered
|
|
395
|
+
# values.
|
|
396
|
+
def sync
|
|
397
|
+
if self.insync?
|
|
398
|
+
self.info "already in sync"
|
|
399
|
+
return nil
|
|
400
|
+
end
|
|
401
|
+
unless self.class.values
|
|
402
|
+
self.devfail "No values defined for %s" %
|
|
403
|
+
self.class.name
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
if value = self.should
|
|
407
|
+
set(value)
|
|
408
|
+
else
|
|
409
|
+
self.devfail "Got a nil value for should"
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
# The properties need to return tags so that logs correctly collect them.
|
|
414
|
+
def tags
|
|
415
|
+
unless defined? @tags
|
|
416
|
+
@tags = []
|
|
417
|
+
# This might not be true in testing
|
|
418
|
+
if @parent.respond_to? :tags
|
|
419
|
+
@tags = @parent.tags
|
|
420
|
+
end
|
|
421
|
+
@tags << self.name
|
|
422
|
+
end
|
|
423
|
+
@tags
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
def to_s
|
|
427
|
+
return "%s(%s)" % [@parent.name,self.name]
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
# Provide a common hook for setting @should, just like params.
|
|
431
|
+
def value=(value)
|
|
432
|
+
self.should = value
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
# This property will get automatically added to any type that responds
|
|
436
|
+
# to the methods 'exists?', 'create', and 'destroy'.
|
|
437
|
+
class Ensure < Puppet::Property
|
|
438
|
+
@name = :ensure
|
|
439
|
+
|
|
440
|
+
def self.defaultvalues
|
|
441
|
+
newvalue(:present) do
|
|
442
|
+
if @parent.provider and @parent.provider.respond_to?(:create)
|
|
443
|
+
@parent.provider.create
|
|
444
|
+
else
|
|
445
|
+
@parent.create
|
|
446
|
+
end
|
|
447
|
+
nil # return nil so the event is autogenerated
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
newvalue(:absent) do
|
|
451
|
+
if @parent.provider and @parent.provider.respond_to?(:destroy)
|
|
452
|
+
@parent.provider.destroy
|
|
453
|
+
else
|
|
454
|
+
@parent.destroy
|
|
455
|
+
end
|
|
456
|
+
nil # return nil so the event is autogenerated
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
defaultto do
|
|
460
|
+
if @parent.managed?
|
|
461
|
+
:present
|
|
462
|
+
else
|
|
463
|
+
nil
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
# This doc will probably get overridden
|
|
468
|
+
@doc ||= "The basic property that the object should be in."
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
def self.inherited(sub)
|
|
472
|
+
# Add in the two properties that everyone will have.
|
|
473
|
+
sub.class_eval do
|
|
474
|
+
end
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
def change_to_s
|
|
478
|
+
begin
|
|
479
|
+
if @is == :absent or @is.nil?
|
|
480
|
+
return "created"
|
|
481
|
+
elsif self.should == :absent
|
|
482
|
+
return "removed"
|
|
483
|
+
else
|
|
484
|
+
return "%s changed '%s' to '%s'" %
|
|
485
|
+
[self.name, self.is_to_s, self.should_to_s]
|
|
486
|
+
end
|
|
487
|
+
rescue Puppet::Error, Puppet::DevError
|
|
488
|
+
raise
|
|
489
|
+
rescue => detail
|
|
490
|
+
raise Puppet::DevError, "Could not convert change %s to string: %s" %
|
|
491
|
+
[self.name, detail]
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
def retrieve
|
|
496
|
+
# XXX This is a problem -- whether the object exists or not often
|
|
497
|
+
# depends on the results of other properties, yet we're the first property
|
|
498
|
+
# to get checked, which means that those other properties do not have
|
|
499
|
+
# @is values set. This seems to be the source of quite a few bugs,
|
|
500
|
+
# although they're mostly logging bugs, not functional ones.
|
|
501
|
+
if prov = @parent.provider and prov.respond_to?(:exists?)
|
|
502
|
+
result = prov.exists?
|
|
503
|
+
elsif @parent.respond_to?(:exists?)
|
|
504
|
+
result = @parent.exists?
|
|
505
|
+
else
|
|
506
|
+
raise Puppet::DevError, "No ability to determine if %s exists" %
|
|
507
|
+
@parent.class.name
|
|
508
|
+
end
|
|
509
|
+
if result
|
|
510
|
+
@is = :present
|
|
511
|
+
else
|
|
512
|
+
@is = :absent
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
# If they're talking about the thing at all, they generally want to
|
|
517
|
+
# say it should exist.
|
|
518
|
+
#defaultto :present
|
|
519
|
+
defaultto do
|
|
520
|
+
if @parent.managed?
|
|
521
|
+
:present
|
|
522
|
+
else
|
|
523
|
+
nil
|
|
524
|
+
end
|
|
525
|
+
end
|
|
526
|
+
end
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
# $Id: property.rb 2328 2007-03-19 21:29:08Z luke $
|