puppet 0.23.2 → 0.24.0
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 +112 -1
- data/README +1 -1
- data/Rakefile +1 -2
- data/bin/filebucket +2 -3
- data/bin/puppet +55 -39
- data/bin/puppetca +20 -11
- data/bin/puppetd +30 -31
- data/bin/puppetdoc +27 -28
- data/bin/puppetmasterd +24 -42
- data/bin/puppetrun +3 -4
- data/bin/ralsh +5 -7
- data/conf/redhat/puppet.spec +4 -1
- data/conf/solaris/smf/svc-puppetd +1 -1
- data/conf/solaris/smf/svc-puppetmasterd +1 -1
- data/examples/code/allatonce +1 -1
- data/examples/code/assignments +1 -1
- data/examples/code/components +1 -1
- data/examples/code/file.bl +1 -1
- data/examples/code/filedefaults +1 -1
- data/examples/code/fileparsing +1 -1
- data/examples/code/filerecursion +1 -1
- data/examples/code/functions +1 -1
- data/examples/code/groups +1 -1
- data/examples/code/head +1 -1
- data/examples/code/importing +1 -1
- data/examples/code/modules/sample-module.pp +10 -0
- data/examples/code/modules/sample-module/README.txt +17 -0
- data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
- data/examples/code/modules/sample-module/manifests/init.pp +12 -0
- data/examples/code/modules/sample-module/templates/sample.erb +5 -0
- data/examples/code/nodes +1 -1
- data/examples/code/one +1 -1
- data/examples/code/relationships +1 -1
- data/examples/code/selectors +1 -1
- data/examples/code/simpletests +1 -1
- data/examples/root/etc/init.d/sleeper +1 -1
- data/examples/root/etc/puppet/fileserver.conf +1 -1
- data/ext/ldap/puppet.schema +1 -1
- data/ext/module_puppet +30 -21
- data/ext/puppet-test +3 -3
- data/ext/vim/filetype.vim +1 -1
- data/install.rb +1 -2
- data/lib/puppet.rb +20 -19
- data/lib/puppet/checksum.rb +57 -0
- data/lib/puppet/config_stores/rest.rb +1 -1
- data/lib/puppet/daemon.rb +0 -1
- data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
- data/lib/puppet/dsl.rb +22 -116
- data/lib/puppet/error.rb +0 -9
- data/lib/puppet/event.rb +0 -1
- data/lib/puppet/external/gratr/rdot.rb +0 -1
- data/lib/puppet/external/lock.rb +0 -1
- data/lib/puppet/feature/base.rb +3 -2
- data/lib/puppet/feature/rails.rb +0 -1
- data/lib/puppet/file_serving.rb +7 -0
- data/lib/puppet/file_serving/configuration.rb +129 -0
- data/lib/puppet/file_serving/configuration/parser.rb +124 -0
- data/lib/puppet/file_serving/content.rb +34 -0
- data/lib/puppet/file_serving/file_base.rb +63 -0
- data/lib/puppet/file_serving/fileset.rb +138 -0
- data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
- data/lib/puppet/file_serving/metadata.rb +69 -0
- data/lib/puppet/file_serving/mount.rb +186 -0
- data/lib/puppet/file_serving/terminus_helper.rb +19 -0
- data/lib/puppet/indirector.rb +68 -0
- data/lib/puppet/indirector/catalog/compiler.rb +173 -0
- data/lib/puppet/indirector/catalog/yaml.rb +24 -0
- data/lib/puppet/indirector/checksum/file.rb +33 -0
- data/lib/puppet/indirector/code.rb +6 -0
- data/lib/puppet/indirector/direct_file_server.rb +27 -0
- data/lib/puppet/indirector/exec.rb +57 -0
- data/lib/puppet/indirector/facts/facter.rb +65 -0
- data/lib/puppet/indirector/facts/memory.rb +9 -0
- data/lib/puppet/indirector/facts/yaml.rb +7 -0
- data/lib/puppet/indirector/file.rb +54 -0
- data/lib/puppet/indirector/file_content.rb +5 -0
- data/lib/puppet/indirector/file_content/file.rb +11 -0
- data/lib/puppet/indirector/file_content/file_server.rb +11 -0
- data/lib/puppet/indirector/file_content/modules.rb +11 -0
- data/lib/puppet/indirector/file_content/rest.rb +12 -0
- data/lib/puppet/indirector/file_metadata.rb +5 -0
- data/lib/puppet/indirector/file_metadata/file.rb +26 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
- data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
- data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
- data/lib/puppet/indirector/file_server.rb +56 -0
- data/lib/puppet/indirector/indirection.rb +237 -0
- data/lib/puppet/indirector/ldap.rb +90 -0
- data/lib/puppet/indirector/memory.rb +21 -0
- data/lib/puppet/indirector/module_files.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +52 -0
- data/lib/puppet/indirector/node/ldap.rb +120 -0
- data/lib/puppet/indirector/node/memory.rb +10 -0
- data/lib/puppet/indirector/node/plain.rb +19 -0
- data/lib/puppet/indirector/node/rest.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +7 -0
- data/lib/puppet/indirector/plain.rb +9 -0
- data/lib/puppet/indirector/report/processor.rb +50 -0
- data/lib/puppet/indirector/rest.rb +8 -0
- data/lib/puppet/indirector/ssl_rsa.rb +5 -0
- data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
- data/lib/puppet/indirector/terminus.rb +178 -0
- data/lib/puppet/indirector/yaml.rb +57 -0
- data/lib/puppet/metatype/attributes.rb +3 -3
- data/lib/puppet/metatype/closure.rb +0 -66
- data/lib/puppet/metatype/container.rb +0 -9
- data/lib/puppet/metatype/evaluation.rb +10 -2
- data/lib/puppet/metatype/instances.rb +16 -30
- data/lib/puppet/metatype/manager.rb +1 -2
- data/lib/puppet/metatype/metaparams.rb +27 -21
- data/lib/puppet/metatype/providers.rb +3 -2
- data/lib/puppet/metatype/relationships.rb +1 -2
- data/lib/puppet/metatype/schedules.rb +0 -1
- data/lib/puppet/metatype/tags.rb +0 -1
- data/lib/puppet/module.rb +60 -32
- data/lib/puppet/network/authconfig.rb +0 -1
- data/lib/puppet/network/authorization.rb +0 -1
- data/lib/puppet/network/authstore.rb +0 -1
- data/lib/puppet/network/client.rb +13 -4
- data/lib/puppet/network/client/ca.rb +4 -5
- data/lib/puppet/network/client/dipper.rb +0 -1
- data/lib/puppet/network/client/file.rb +0 -1
- data/lib/puppet/network/client/master.rb +127 -235
- data/lib/puppet/network/client/proxy.rb +0 -1
- data/lib/puppet/network/client/report.rb +0 -1
- data/lib/puppet/network/client/resource.rb +0 -1
- data/lib/puppet/network/client/runner.rb +0 -1
- data/lib/puppet/network/client/status.rb +0 -1
- data/lib/puppet/network/client_request.rb +0 -1
- data/lib/puppet/network/handler.rb +5 -2
- data/lib/puppet/network/handler/ca.rb +1 -2
- data/lib/puppet/network/handler/configuration.rb +184 -0
- data/lib/puppet/network/handler/filebucket.rb +1 -2
- data/lib/puppet/network/handler/fileserver.rb +279 -107
- data/lib/puppet/network/handler/master.rb +57 -152
- data/lib/puppet/network/handler/report.rb +6 -65
- data/lib/puppet/network/handler/resource.rb +5 -13
- data/lib/puppet/network/handler/runner.rb +3 -4
- data/lib/puppet/network/handler/status.rb +0 -1
- data/lib/puppet/network/http.rb +13 -0
- data/lib/puppet/network/http/handler.rb +109 -0
- data/lib/puppet/network/http/mongrel.rb +54 -0
- data/lib/puppet/network/http/mongrel/rest.rb +37 -0
- data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
- data/lib/puppet/network/http/webrick.rb +51 -0
- data/lib/puppet/network/http/webrick/rest.rb +41 -0
- data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
- data/lib/puppet/network/http_server.rb +3 -0
- data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
- data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
- data/lib/puppet/network/rest_controller.rb +2 -0
- data/lib/puppet/network/rights.rb +0 -1
- data/lib/puppet/network/server.rb +63 -3
- data/lib/puppet/network/xmlrpc/client.rb +90 -23
- data/lib/puppet/network/xmlrpc/processor.rb +0 -1
- data/lib/puppet/network/xmlrpc/server.rb +0 -1
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
- data/lib/puppet/node.rb +165 -0
- data/lib/puppet/node/catalog.rb +480 -0
- data/lib/puppet/node/environment.rb +46 -0
- data/lib/puppet/node/facts.rb +36 -0
- data/lib/puppet/parameter.rb +34 -28
- data/lib/puppet/parser/ast.rb +0 -1
- data/lib/puppet/parser/ast/astarray.rb +30 -53
- data/lib/puppet/parser/ast/branch.rb +0 -10
- data/lib/puppet/parser/ast/caseopt.rb +0 -11
- data/lib/puppet/parser/ast/casestatement.rb +0 -12
- data/lib/puppet/parser/ast/collection.rb +1 -3
- data/lib/puppet/parser/ast/collexpr.rb +0 -2
- data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
- data/lib/puppet/parser/ast/else.rb +0 -10
- data/lib/puppet/parser/ast/function.rb +0 -2
- data/lib/puppet/parser/ast/hostclass.rb +21 -19
- data/lib/puppet/parser/ast/ifstatement.rb +0 -13
- data/lib/puppet/parser/ast/leaf.rb +0 -8
- data/lib/puppet/parser/ast/node.rb +13 -10
- data/lib/puppet/parser/ast/resource.rb +75 -0
- data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
- data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
- data/lib/puppet/parser/ast/resource_reference.rb +66 -0
- data/lib/puppet/parser/ast/resourceparam.rb +0 -14
- data/lib/puppet/parser/ast/selector.rb +0 -10
- data/lib/puppet/parser/ast/tag.rb +0 -2
- data/lib/puppet/parser/ast/vardef.rb +0 -14
- data/lib/puppet/parser/collector.rb +83 -101
- data/lib/puppet/parser/compile.rb +509 -0
- data/lib/puppet/parser/functions.rb +10 -10
- data/lib/puppet/parser/interpreter.rb +44 -662
- data/lib/puppet/parser/lexer.rb +1 -3
- data/lib/puppet/parser/parser.rb +674 -701
- data/lib/puppet/parser/parser_support.rb +33 -24
- data/lib/puppet/parser/resource.rb +219 -162
- data/lib/puppet/parser/resource/param.rb +1 -2
- data/lib/puppet/parser/resource/reference.rb +24 -16
- data/lib/puppet/parser/scope.rb +48 -459
- data/lib/puppet/parser/templatewrapper.rb +4 -5
- data/lib/puppet/pgraph.rb +10 -13
- data/lib/puppet/property.rb +25 -41
- data/lib/puppet/propertychange.rb +0 -2
- data/lib/puppet/provider.rb +15 -11
- data/lib/puppet/provider/cron/crontab.rb +6 -7
- data/lib/puppet/provider/group/groupadd.rb +0 -1
- data/lib/puppet/provider/group/netinfo.rb +0 -1
- data/lib/puppet/provider/group/pw.rb +0 -1
- data/lib/puppet/provider/host/netinfo.rb +0 -1
- data/lib/puppet/provider/host/parsed.rb +0 -1
- data/lib/puppet/provider/interface/redhat.rb +90 -91
- data/lib/puppet/provider/interface/sunos.rb +98 -81
- data/lib/puppet/provider/mailalias/aliases.rb +0 -1
- data/lib/puppet/provider/maillist/mailman.rb +2 -3
- data/lib/puppet/provider/mount.rb +10 -9
- data/lib/puppet/provider/mount/netinfo.rb +0 -1
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/nameservice.rb +0 -1
- data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
- data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
- data/lib/puppet/provider/nameservice/pw.rb +0 -1
- data/lib/puppet/provider/package.rb +0 -2
- data/lib/puppet/provider/package/appdmg.rb +0 -1
- data/lib/puppet/provider/package/apple.rb +0 -1
- data/lib/puppet/provider/package/apt.rb +0 -1
- data/lib/puppet/provider/package/aptitude.rb +0 -1
- data/lib/puppet/provider/package/aptrpm.rb +0 -1
- data/lib/puppet/provider/package/blastwave.rb +0 -1
- data/lib/puppet/provider/package/darwinport.rb +0 -1
- data/lib/puppet/provider/package/dpkg.rb +9 -1
- data/lib/puppet/provider/package/fink.rb +0 -1
- data/lib/puppet/provider/package/freebsd.rb +0 -1
- data/lib/puppet/provider/package/gem.rb +0 -1
- data/lib/puppet/provider/package/openbsd.rb +1 -2
- data/lib/puppet/provider/package/pkgdmg.rb +14 -15
- data/lib/puppet/provider/package/portage.rb +6 -7
- data/lib/puppet/provider/package/ports.rb +1 -4
- data/lib/puppet/provider/package/rpm.rb +31 -45
- data/lib/puppet/provider/package/sun.rb +0 -3
- data/lib/puppet/provider/package/sunfreeware.rb +0 -1
- data/lib/puppet/provider/package/up2date.rb +0 -1
- data/lib/puppet/provider/package/urpmi.rb +0 -1
- data/lib/puppet/provider/package/yum.rb +45 -14
- data/lib/puppet/provider/package/yumhelper.py +37 -0
- data/lib/puppet/provider/parsedfile.rb +2 -3
- data/lib/puppet/provider/port/parsed.rb +0 -1
- data/lib/puppet/provider/service/base.rb +4 -1
- data/lib/puppet/provider/service/debian.rb +5 -2
- data/lib/puppet/provider/service/freebsd.rb +51 -0
- data/lib/puppet/provider/service/init.rb +16 -40
- data/lib/puppet/provider/service/redhat.rb +1 -6
- data/lib/puppet/provider/service/smf.rb +0 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -1
- data/lib/puppet/provider/user/netinfo.rb +0 -1
- data/lib/puppet/provider/user/pw.rb +0 -1
- data/lib/puppet/provider/user/useradd.rb +0 -1
- data/lib/puppet/provider/zone/solaris.rb +0 -1
- data/lib/puppet/rails.rb +35 -30
- data/lib/puppet/rails/database/schema.rb +0 -1
- data/lib/puppet/rails/host.rb +6 -15
- data/lib/puppet/rails/param_name.rb +1 -2
- data/lib/puppet/rails/param_value.rb +0 -1
- data/lib/puppet/rails/puppet_class.rb +0 -1
- data/lib/puppet/rails/resource.rb +3 -5
- data/lib/puppet/reference/configuration.rb +12 -6
- data/lib/puppet/reference/indirection.rb +34 -0
- data/lib/puppet/reference/node_source.rb +9 -0
- data/lib/puppet/relationship.rb +10 -8
- data/lib/puppet/reports.rb +51 -0
- data/lib/puppet/reports/log.rb +2 -3
- data/lib/puppet/reports/rrdgraph.rb +2 -5
- data/lib/puppet/reports/store.rb +6 -7
- data/lib/puppet/reports/tagmail.rb +2 -3
- data/lib/puppet/resource_reference.rb +79 -0
- data/lib/puppet/simple_graph.rb +251 -0
- data/lib/puppet/sslcertificates.rb +19 -15
- data/lib/puppet/sslcertificates/ca.rb +56 -15
- data/lib/puppet/sslcertificates/certificate.rb +0 -1
- data/lib/puppet/sslcertificates/inventory.rb +2 -6
- data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
- data/lib/puppet/sslcertificates/support.rb +4 -5
- data/lib/puppet/transaction.rb +93 -96
- data/lib/puppet/transaction/report.rb +5 -1
- data/lib/puppet/transportable.rb +79 -125
- data/lib/puppet/type.rb +44 -10
- data/lib/puppet/type/component.rb +25 -110
- data/lib/puppet/type/cron.rb +1 -2
- data/lib/puppet/type/exec.rb +19 -13
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/host.rb +0 -1
- data/lib/puppet/type/interface.rb +6 -3
- data/lib/puppet/type/k5login.rb +87 -0
- data/lib/puppet/type/mailalias.rb +0 -1
- data/lib/puppet/type/maillist.rb +0 -1
- data/lib/puppet/type/mount.rb +7 -13
- data/lib/puppet/type/notify.rb +0 -1
- data/lib/puppet/type/package.rb +7 -63
- data/lib/puppet/type/pfile.rb +25 -32
- data/lib/puppet/type/pfile/checksum.rb +0 -1
- data/lib/puppet/type/pfile/content.rb +18 -3
- data/lib/puppet/type/pfile/ensure.rb +5 -6
- data/lib/puppet/type/pfile/group.rb +4 -1
- data/lib/puppet/type/pfile/mode.rb +0 -1
- data/lib/puppet/type/pfile/owner.rb +6 -9
- data/lib/puppet/type/pfile/source.rb +28 -11
- data/lib/puppet/type/pfile/target.rb +2 -1
- data/lib/puppet/type/pfile/type.rb +0 -1
- data/lib/puppet/type/pfilebucket.rb +0 -1
- data/lib/puppet/type/port.rb +0 -1
- data/lib/puppet/type/resources.rb +0 -1
- data/lib/puppet/type/schedule.rb +17 -15
- data/lib/puppet/type/service.rb +23 -159
- data/lib/puppet/type/sshkey.rb +0 -1
- data/lib/puppet/type/tidy.rb +15 -7
- data/lib/puppet/type/user.rb +0 -1
- data/lib/puppet/type/zone.rb +0 -1
- data/lib/puppet/util.rb +1 -2
- data/lib/puppet/util/autoload.rb +21 -23
- data/lib/puppet/util/checksums.rb +37 -0
- data/lib/puppet/util/classgen.rb +0 -1
- data/lib/puppet/util/diff.rb +71 -0
- data/lib/puppet/util/docs.rb +8 -2
- data/lib/puppet/util/errors.rb +0 -1
- data/lib/puppet/util/execution.rb +0 -1
- data/lib/puppet/util/fact_store.rb +0 -1
- data/lib/puppet/util/feature.rb +31 -22
- data/lib/puppet/util/fileparsing.rb +3 -2
- data/lib/puppet/util/filetype.rb +30 -12
- data/lib/puppet/util/graph.rb +0 -1
- data/lib/puppet/util/inifile.rb +0 -1
- data/lib/puppet/util/instance_loader.rb +11 -4
- data/lib/puppet/util/loadedfile.rb +0 -1
- data/lib/puppet/util/log.rb +0 -1
- data/lib/puppet/util/log_paths.rb +0 -1
- data/lib/puppet/util/logging.rb +0 -1
- data/lib/puppet/util/metaid.rb +0 -1
- data/lib/puppet/util/methodhelper.rb +0 -2
- data/lib/puppet/util/metric.rb +1 -2
- data/lib/puppet/util/plist.rb +0 -1
- data/lib/puppet/util/plist/generator.rb +0 -1
- data/lib/puppet/util/plist/parser.rb +0 -1
- data/lib/puppet/util/posix.rb +7 -1
- data/lib/puppet/util/provider_features.rb +11 -12
- data/lib/puppet/util/rails/collection_merger.rb +0 -1
- data/lib/puppet/util/reference.rb +2 -3
- data/lib/puppet/util/{config.rb → settings.rb} +424 -300
- data/lib/puppet/util/storage.rb +1 -3
- data/lib/puppet/util/subclass_loader.rb +0 -1
- data/lib/puppet/util/suidmanager.rb +25 -42
- data/lib/puppet/util/uri_helper.rb +22 -0
- data/lib/puppet/util/variables.rb +0 -1
- data/lib/puppet/util/warnings.rb +0 -1
- data/test/Rakefile +1 -1
- data/test/certmgr/ca.rb +8 -2
- data/test/certmgr/certmgr.rb +14 -6
- data/test/certmgr/inventory.rb +18 -30
- data/test/certmgr/support.rb +3 -2
- data/test/executables/filebucket.rb +1 -2
- data/test/executables/puppetbin.rb +1 -2
- data/test/executables/puppetca.rb +7 -2
- data/test/executables/puppetd.rb +23 -29
- data/test/executables/puppetmasterd.rb +1 -2
- data/test/executables/puppetmodule.rb +1 -2
- data/test/language/ast.rb +24 -29
- data/test/language/ast/casestatement.rb +1 -2
- data/test/language/ast/definition.rb +166 -0
- data/test/language/ast/hostclass.rb +50 -29
- data/test/language/ast/resource.rb +59 -0
- data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
- data/test/language/ast/selector.rb +1 -2
- data/test/language/ast/variable.rb +1 -2
- data/test/language/compile.rb +569 -0
- data/test/language/functions.rb +57 -76
- data/test/language/lexer.rb +20 -3
- data/test/language/parser.rb +45 -33
- data/test/language/resource.rb +275 -308
- data/test/language/scope.rb +135 -410
- data/test/language/snippets.rb +19 -41
- data/test/language/transportable.rb +8 -29
- data/test/lib/mocha/auto_verify.rb +6 -6
- data/test/lib/mocha/deprecation.rb +22 -0
- data/test/lib/mocha/exception_raiser.rb +17 -0
- data/test/lib/mocha/expectation.rb +167 -84
- data/test/lib/mocha/infinite_range.rb +4 -6
- data/test/lib/mocha/inspect.rb +3 -1
- data/test/lib/mocha/is_a.rb +9 -0
- data/test/lib/mocha/missing_expectation.rb +27 -0
- data/test/lib/mocha/mock.rb +192 -5
- data/test/lib/mocha/multiple_yields.rb +20 -0
- data/test/lib/mocha/no_yields.rb +11 -0
- data/test/lib/mocha/object.rb +11 -1
- data/test/lib/mocha/parameter_matchers.rb +9 -0
- data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
- data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
- data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
- data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
- data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
- data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
- data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
- data/test/lib/mocha/return_values.rb +31 -0
- data/test/lib/mocha/single_return_value.rb +24 -0
- data/test/lib/mocha/single_yield.rb +18 -0
- data/test/lib/mocha/standalone.rb +2 -0
- data/test/lib/mocha/stub.rb +18 -0
- data/test/lib/mocha/test_case_adapter.rb +3 -3
- data/test/lib/mocha/yield_parameters.rb +31 -0
- data/test/lib/puppettest.rb +38 -20
- data/test/lib/puppettest/certificates.rb +0 -1
- data/test/lib/puppettest/exetest.rb +0 -1
- data/test/lib/puppettest/fakes.rb +0 -1
- data/test/lib/puppettest/fileparsing.rb +8 -15
- data/test/lib/puppettest/filetesting.rb +0 -1
- data/test/lib/puppettest/parsertesting.rb +37 -23
- data/test/lib/puppettest/railstesting.rb +3 -6
- data/test/lib/puppettest/reporttesting.rb +0 -1
- data/test/lib/puppettest/resourcetesting.rb +6 -34
- data/test/lib/puppettest/runnable_test.rb +30 -0
- data/test/lib/puppettest/servertest.rb +2 -3
- data/test/lib/puppettest/support/assertions.rb +13 -41
- data/test/lib/puppettest/support/collection.rb +0 -1
- data/test/lib/puppettest/support/helpers.rb +0 -1
- data/test/lib/puppettest/support/resources.rb +17 -17
- data/test/lib/puppettest/support/utils.rb +45 -27
- data/test/lib/puppettest/testcase.rb +2 -21
- data/test/lib/rake/puppet_test_loader.rb +0 -1
- data/test/lib/rake/puppet_testtask.rb +0 -1
- data/test/network/authconfig.rb +1 -2
- data/test/network/authorization.rb +1 -2
- data/test/network/authstore.rb +1 -2
- data/test/network/client/ca.rb +12 -7
- data/test/network/client/client.rb +17 -22
- data/test/network/client/dipper.rb +1 -2
- data/test/network/client/master.rb +70 -184
- data/test/network/client/resource.rb +9 -2
- data/test/network/client_request.rb +1 -2
- data/test/network/daemon.rb +1 -2
- data/test/network/handler/bucket.rb +2 -31
- data/test/network/handler/ca.rb +9 -3
- data/test/network/handler/configuration.rb +160 -0
- data/test/network/handler/fileserver.rb +24 -5
- data/test/network/handler/handler.rb +1 -2
- data/test/network/handler/master.rb +38 -243
- data/test/network/handler/report.rb +2 -104
- data/test/network/handler/resource.rb +5 -3
- data/test/network/handler/runner.rb +22 -60
- data/test/network/rights.rb +1 -2
- data/test/network/server/mongrel_test.rb +2 -3
- data/test/network/server/webrick.rb +17 -11
- data/test/network/xmlrpc/client.rb +27 -12
- data/test/network/xmlrpc/processor.rb +3 -4
- data/test/network/xmlrpc/server.rb +1 -2
- data/test/network/xmlrpc/webrick_servlet.rb +8 -2
- data/test/other/dsl.rb +2 -4
- data/test/other/events.rb +14 -56
- data/test/other/overrides.rb +3 -6
- data/test/other/propertychange.rb +1 -2
- data/test/other/provider.rb +1 -2
- data/test/other/puppet.rb +1 -2
- data/test/other/relationships.rb +15 -17
- data/test/other/report.rb +14 -20
- data/test/other/transactions.rb +109 -192
- data/test/puppet/conffiles.rb +3 -5
- data/test/puppet/defaults.rb +1 -28
- data/test/puppet/errortest.rb +1 -2
- data/test/puppet/tc_suidmanager.rb +77 -63
- data/test/rails/ast.rb +4 -4
- data/test/rails/configuration.rb +71 -0
- data/test/rails/host.rb +19 -30
- data/test/rails/rails.rb +1 -2
- data/test/rails/railsparameter.rb +3 -4
- data/test/rails/railsresource.rb +6 -5
- data/test/ral/manager/attributes.rb +1 -2
- data/test/ral/manager/instances.rb +3 -3
- data/test/ral/manager/manager.rb +1 -2
- data/test/ral/manager/provider.rb +1 -2
- data/test/ral/manager/type.rb +89 -93
- data/test/ral/providers/cron/crontab.rb +9 -11
- data/test/ral/providers/group.rb +1 -2
- data/test/ral/providers/host/netinfo.rb +1 -2
- data/test/ral/providers/host/parsed.rb +1 -2
- data/test/ral/providers/mailalias/aliases.rb +1 -2
- data/test/ral/providers/mount/netinfo.rb +1 -2
- data/test/ral/providers/nameservice.rb +1 -2
- data/test/ral/providers/package.rb +5 -4
- data/test/ral/providers/package/apt.rb +0 -1
- data/test/ral/providers/package/aptrpm.rb +0 -1
- data/test/ral/providers/parsedfile.rb +1 -2
- data/test/ral/providers/port/parsed.rb +1 -2
- data/test/ral/providers/provider.rb +10 -5
- data/test/ral/providers/service/base.rb +1 -2
- data/test/ral/providers/service/debian.rb +58 -0
- data/test/ral/providers/sshkey/parsed.rb +1 -2
- data/test/ral/providers/user.rb +3 -2
- data/test/ral/providers/user/useradd.rb +0 -1
- data/test/ral/types/basic.rb +4 -9
- data/test/ral/types/cron.rb +6 -12
- data/test/ral/types/exec.rb +6 -7
- data/test/ral/types/file.rb +35 -14
- data/test/ral/types/file/target.rb +6 -5
- data/test/ral/types/filebucket.rb +3 -2
- data/test/ral/types/fileignoresource.rb +10 -42
- data/test/ral/types/filesources.rb +21 -60
- data/test/ral/types/group.rb +3 -3
- data/test/ral/types/host.rb +6 -3
- data/test/ral/types/mailalias.rb +1 -2
- data/test/ral/types/parameter.rb +5 -3
- data/test/ral/types/port.rb +1 -2
- data/test/ral/types/property.rb +3 -3
- data/test/ral/types/resources.rb +1 -2
- data/test/ral/types/service.rb +5 -3
- data/test/ral/types/sshkey.rb +5 -3
- data/test/ral/types/tidy.rb +63 -3
- data/test/ral/types/user.rb +10 -11
- data/test/ral/types/yumrepo.rb +1 -1
- data/test/ral/types/zone.rb +1 -2
- data/test/util/autoload.rb +23 -27
- data/test/util/classgen.rb +1 -2
- data/test/util/execution.rb +1 -2
- data/test/util/features.rb +1 -3
- data/test/util/fileparsing.rb +11 -3
- data/test/util/filetype.rb +1 -2
- data/test/util/inifile.rb +1 -1
- data/test/util/instance_loader.rb +5 -6
- data/test/util/loadedfile.rb +1 -2
- data/test/util/log.rb +1 -2
- data/test/util/metrics.rb +1 -2
- data/test/util/package.rb +1 -2
- data/test/util/posixtest.rb +1 -2
- data/test/util/{config.rb → settings.rb} +123 -265
- data/test/util/storage.rb +1 -2
- data/test/util/subclass_loader.rb +1 -2
- data/test/util/utiltest.rb +1 -111
- metadata +130 -112
- data/ext/tools/passwd2puppet +0 -45
- data/lib/puppet/fact_stores/yaml.rb +0 -42
- data/lib/puppet/network/handler/facts.rb +0 -70
- data/lib/puppet/parser/ast/resourcedef.rb +0 -222
- data/lib/puppet/parser/ast/resourceref.rb +0 -58
- data/test/language/ast/component.rb +0 -142
- data/test/language/collector.rb +0 -179
- data/test/language/interpreter.rb +0 -804
- data/test/language/node.rb +0 -126
- data/test/lib/mocha/mock_methods.rb +0 -122
- data/test/lib/puppettest/graph.rb +0 -41
- data/test/lib/spec.rb +0 -8
- data/test/lib/spec/callback.rb +0 -11
- data/test/lib/spec/callback/callback_container.rb +0 -60
- data/test/lib/spec/callback/extensions/module.rb +0 -24
- data/test/lib/spec/callback/extensions/object.rb +0 -37
- data/test/lib/spec/deprecated.rb +0 -3
- data/test/lib/spec/expectations.rb +0 -59
- data/test/lib/spec/expectations/differs/default.rb +0 -62
- data/test/lib/spec/expectations/errors.rb +0 -6
- data/test/lib/spec/expectations/extensions.rb +0 -3
- data/test/lib/spec/expectations/extensions/object.rb +0 -109
- data/test/lib/spec/expectations/extensions/proc.rb +0 -57
- data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/test/lib/spec/expectations/handler.rb +0 -47
- data/test/lib/spec/expectations/should.rb +0 -5
- data/test/lib/spec/expectations/should/base.rb +0 -64
- data/test/lib/spec/expectations/should/change.rb +0 -69
- data/test/lib/spec/expectations/should/have.rb +0 -128
- data/test/lib/spec/expectations/should/not.rb +0 -74
- data/test/lib/spec/expectations/should/should.rb +0 -81
- data/test/lib/spec/expectations/sugar.rb +0 -47
- data/test/lib/spec/matchers.rb +0 -160
- data/test/lib/spec/matchers/be.rb +0 -161
- data/test/lib/spec/matchers/be_close.rb +0 -37
- data/test/lib/spec/matchers/change.rb +0 -120
- data/test/lib/spec/matchers/eql.rb +0 -43
- data/test/lib/spec/matchers/equal.rb +0 -43
- data/test/lib/spec/matchers/has.rb +0 -44
- data/test/lib/spec/matchers/have.rb +0 -140
- data/test/lib/spec/matchers/include.rb +0 -50
- data/test/lib/spec/matchers/match.rb +0 -41
- data/test/lib/spec/matchers/raise_error.rb +0 -100
- data/test/lib/spec/matchers/respond_to.rb +0 -35
- data/test/lib/spec/matchers/satisfy.rb +0 -47
- data/test/lib/spec/matchers/throw_symbol.rb +0 -75
- data/test/lib/spec/mocks.rb +0 -232
- data/test/lib/spec/mocks/argument_expectation.rb +0 -132
- data/test/lib/spec/mocks/error_generator.rb +0 -85
- data/test/lib/spec/mocks/errors.rb +0 -10
- data/test/lib/spec/mocks/extensions/object.rb +0 -3
- data/test/lib/spec/mocks/message_expectation.rb +0 -231
- data/test/lib/spec/mocks/methods.rb +0 -40
- data/test/lib/spec/mocks/mock.rb +0 -26
- data/test/lib/spec/mocks/mock_handler.rb +0 -166
- data/test/lib/spec/mocks/order_group.rb +0 -29
- data/test/lib/spec/rake/spectask.rb +0 -173
- data/test/lib/spec/rake/verify_rcov.rb +0 -47
- data/test/lib/spec/runner.rb +0 -132
- data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
- data/test/lib/spec/runner/command_line.rb +0 -34
- data/test/lib/spec/runner/context.rb +0 -154
- data/test/lib/spec/runner/context_eval.rb +0 -142
- data/test/lib/spec/runner/context_runner.rb +0 -55
- data/test/lib/spec/runner/drb_command_line.rb +0 -21
- data/test/lib/spec/runner/execution_context.rb +0 -17
- data/test/lib/spec/runner/extensions/kernel.rb +0 -17
- data/test/lib/spec/runner/extensions/object.rb +0 -32
- data/test/lib/spec/runner/formatter.rb +0 -5
- data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
- data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
- data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
- data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
- data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
- data/test/lib/spec/runner/heckle_runner.rb +0 -71
- data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
- data/test/lib/spec/runner/option_parser.rb +0 -224
- data/test/lib/spec/runner/reporter.rb +0 -105
- data/test/lib/spec/runner/spec_matcher.rb +0 -25
- data/test/lib/spec/runner/spec_parser.rb +0 -41
- data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
- data/test/lib/spec/runner/specification.rb +0 -114
- data/test/lib/spec/translator.rb +0 -87
- data/test/lib/spec/version.rb +0 -30
- data/test/network/handler/facts.rb +0 -112
- data/test/other/pgraph.rb +0 -290
- data/test/other/relationship.rb +0 -74
- data/test/puppet/modules.rb +0 -59
- data/test/rails/collection.rb +0 -247
- data/test/rails/interpreter.rb +0 -91
- data/test/ral/providers/mount/parsed.rb +0 -251
- data/test/ral/providers/service.rb +0 -235
- data/test/ral/types/component.rb +0 -113
- data/test/ral/types/interface.rb +0 -40
- data/test/ral/types/mount.rb +0 -362
- data/test/ral/types/package.rb +0 -154
- data/test/ral/types/schedule.rb +0 -357
- data/test/tagging/tagging.rb +0 -170
- data/test/util/fact_store.rb +0 -67
- data/test/util/graph.rb +0 -108
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'puppet/node/facts'
|
2
|
+
require 'puppet/indirector/memory'
|
3
|
+
|
4
|
+
class Puppet::Node::Facts::Memory < Puppet::Indirector::Memory
|
5
|
+
desc "Keep track of facts in memory but nowhere else. This is used for
|
6
|
+
one-time compiles, such as what the stand-alone ``puppet`` does.
|
7
|
+
To use this terminus, you must load it with the data you want it
|
8
|
+
to contain."
|
9
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'puppet/indirector/terminus'
|
2
|
+
|
3
|
+
# An empty terminus type, meant to just return empty objects.
|
4
|
+
class Puppet::Indirector::File < Puppet::Indirector::Terminus
|
5
|
+
def destroy(file)
|
6
|
+
if respond_to?(:path)
|
7
|
+
path = path(file.name)
|
8
|
+
else
|
9
|
+
path = file.path
|
10
|
+
end
|
11
|
+
raise Puppet::Error.new("File %s does not exist; cannot destroy" % [file]) unless File.exist?(path)
|
12
|
+
|
13
|
+
begin
|
14
|
+
File.unlink(path)
|
15
|
+
rescue => detail
|
16
|
+
raise Puppet::Error, "Could not remove %s: %s" % [file, detail]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def find(name)
|
21
|
+
if respond_to?(:path)
|
22
|
+
path = path(name)
|
23
|
+
else
|
24
|
+
path = name
|
25
|
+
end
|
26
|
+
|
27
|
+
return nil unless File.exist?(path)
|
28
|
+
|
29
|
+
begin
|
30
|
+
content = File.read(path)
|
31
|
+
rescue => detail
|
32
|
+
raise Puppet::Error, "Could not retrieve path %s: %s" % [path, detail]
|
33
|
+
end
|
34
|
+
|
35
|
+
return model.new(content)
|
36
|
+
end
|
37
|
+
|
38
|
+
def save(file)
|
39
|
+
if respond_to?(:path)
|
40
|
+
path = path(file.name)
|
41
|
+
else
|
42
|
+
path = file.path
|
43
|
+
end
|
44
|
+
dir = File.dirname(path)
|
45
|
+
|
46
|
+
raise Puppet::Error.new("Cannot save %s; parent directory %s does not exist" % [file, dir]) unless File.directory?(dir)
|
47
|
+
|
48
|
+
begin
|
49
|
+
File.open(path, "w") { |f| f.print file.content }
|
50
|
+
rescue => detail
|
51
|
+
raise Puppet::Error, "Could not write %s: %s" % [file, detail]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-16.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/content'
|
6
|
+
require 'puppet/indirector/file_content'
|
7
|
+
require 'puppet/indirector/direct_file_server'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileContent::File < Puppet::Indirector::DirectFileServer
|
10
|
+
desc "Retrieve file contents from disk."
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/content'
|
6
|
+
require 'puppet/indirector/file_content'
|
7
|
+
require 'puppet/indirector/file_server'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileContent::FileServer < Puppet::Indirector::FileServer
|
10
|
+
desc "Retrieve file contents using Puppet's fileserver."
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/content'
|
6
|
+
require 'puppet/indirector/file_content'
|
7
|
+
require 'puppet/indirector/module_files'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileContent::Modules < Puppet::Indirector::ModuleFiles
|
10
|
+
desc "Retrieve file contents from modules."
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/content'
|
6
|
+
require 'puppet/util/uri_helper'
|
7
|
+
require 'puppet/indirector/file_content'
|
8
|
+
require 'puppet/indirector/rest'
|
9
|
+
|
10
|
+
class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
|
11
|
+
desc "Retrieve file contents via a REST HTTP interface."
|
12
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-16.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/metadata'
|
6
|
+
require 'puppet/indirector/file_metadata'
|
7
|
+
require 'puppet/indirector/direct_file_server'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileMetadata::File < Puppet::Indirector::DirectFileServer
|
10
|
+
desc "Retrieve file metadata directly from the local filesystem."
|
11
|
+
|
12
|
+
def find(key, options = {})
|
13
|
+
return unless data = super
|
14
|
+
data.collect_attributes
|
15
|
+
|
16
|
+
return data
|
17
|
+
end
|
18
|
+
|
19
|
+
def search(key, options = {})
|
20
|
+
return unless result = super
|
21
|
+
|
22
|
+
result.each { |instance| instance.collect_attributes }
|
23
|
+
|
24
|
+
return result
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/metadata'
|
6
|
+
require 'puppet/indirector/file_metadata'
|
7
|
+
require 'puppet/indirector/file_server'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileMetadata::FileServer < Puppet::Indirector::FileServer
|
10
|
+
desc "Retrieve file metadata using Puppet's fileserver."
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/metadata'
|
6
|
+
require 'puppet/indirector/file_metadata'
|
7
|
+
require 'puppet/indirector/module_files'
|
8
|
+
|
9
|
+
class Puppet::Indirector::FileMetadata::Modules < Puppet::Indirector::ModuleFiles
|
10
|
+
desc "Retrieve file metadata from modules."
|
11
|
+
|
12
|
+
def find(*args)
|
13
|
+
return unless instance = super
|
14
|
+
instance.collect_attributes
|
15
|
+
instance
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving/metadata'
|
6
|
+
require 'puppet/util/uri_helper'
|
7
|
+
require 'puppet/indirector/file_metadata'
|
8
|
+
require 'puppet/indirector/rest'
|
9
|
+
|
10
|
+
class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
|
11
|
+
desc "Retrieve file metadata via a REST HTTP interface."
|
12
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-19.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/util/uri_helper'
|
6
|
+
require 'puppet/file_serving/configuration'
|
7
|
+
require 'puppet/file_serving/fileset'
|
8
|
+
require 'puppet/file_serving/terminus_helper'
|
9
|
+
require 'puppet/indirector/terminus'
|
10
|
+
|
11
|
+
# Look files up using the file server.
|
12
|
+
class Puppet::Indirector::FileServer < Puppet::Indirector::Terminus
|
13
|
+
include Puppet::Util::URIHelper
|
14
|
+
include Puppet::FileServing::TerminusHelper
|
15
|
+
|
16
|
+
# Is the client authorized to perform this action?
|
17
|
+
def authorized?(method, key, options = {})
|
18
|
+
return false unless [:find, :search].include?(method)
|
19
|
+
|
20
|
+
uri = key2uri(key)
|
21
|
+
|
22
|
+
configuration.authorized?(uri.path, :node => options[:node], :ipaddress => options[:ipaddress])
|
23
|
+
end
|
24
|
+
|
25
|
+
# Find our key using the fileserver.
|
26
|
+
def find(key, options = {})
|
27
|
+
return nil unless path = find_path(key, options)
|
28
|
+
result = model.new(key, :path => path)
|
29
|
+
result.links = options[:links] if options[:links]
|
30
|
+
return result
|
31
|
+
end
|
32
|
+
|
33
|
+
# Search for files. This returns an array rather than a single
|
34
|
+
# file.
|
35
|
+
def search(key, options = {})
|
36
|
+
return nil unless path = find_path(key, options)
|
37
|
+
|
38
|
+
path2instances(key, path, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# Our fileserver configuration, if needed.
|
44
|
+
def configuration
|
45
|
+
Puppet::FileServing::Configuration.create
|
46
|
+
end
|
47
|
+
|
48
|
+
# Find our path; used by :find and :search.
|
49
|
+
def find_path(key, options)
|
50
|
+
uri = key2uri(key)
|
51
|
+
|
52
|
+
return nil unless path = configuration.file_path(uri.path, :node => options[:node])
|
53
|
+
|
54
|
+
return path
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,237 @@
|
|
1
|
+
require 'puppet/util/docs'
|
2
|
+
|
3
|
+
# The class that connects functional classes with their different collection
|
4
|
+
# back-ends. Each indirection has a set of associated terminus classes,
|
5
|
+
# each of which is a subclass of Puppet::Indirector::Terminus.
|
6
|
+
class Puppet::Indirector::Indirection
|
7
|
+
include Puppet::Util::Docs
|
8
|
+
|
9
|
+
@@indirections = []
|
10
|
+
|
11
|
+
# Clear all cached termini from all indirections.
|
12
|
+
def self.clear_cache
|
13
|
+
@@indirections.each { |ind| ind.clear_cache }
|
14
|
+
end
|
15
|
+
|
16
|
+
# Find an indirection by name. This is provided so that Terminus classes
|
17
|
+
# can specifically hook up with the indirections they are associated with.
|
18
|
+
def self.instance(name)
|
19
|
+
@@indirections.find { |i| i.name == name }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return a list of all known indirections. Used to generate the
|
23
|
+
# reference.
|
24
|
+
def self.instances
|
25
|
+
@@indirections.collect { |i| i.name }
|
26
|
+
end
|
27
|
+
|
28
|
+
# Find an indirected model by name. This is provided so that Terminus classes
|
29
|
+
# can specifically hook up with the indirections they are associated with.
|
30
|
+
def self.model(name)
|
31
|
+
match = @@indirections.find { |i| i.name == name }
|
32
|
+
return nil unless match
|
33
|
+
match.model
|
34
|
+
end
|
35
|
+
|
36
|
+
attr_accessor :name, :model
|
37
|
+
|
38
|
+
# Create and return our cache terminus.
|
39
|
+
def cache
|
40
|
+
raise(Puppet::DevError, "Tried to cache when no cache class was set") unless cache_class
|
41
|
+
terminus(cache_class)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Should we use a cache?
|
45
|
+
def cache?
|
46
|
+
cache_class ? true : false
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_reader :cache_class
|
50
|
+
# Define a terminus class to be used for caching.
|
51
|
+
def cache_class=(class_name)
|
52
|
+
validate_terminus_class(class_name)
|
53
|
+
@cache_class = class_name
|
54
|
+
end
|
55
|
+
|
56
|
+
# Clear our cached list of termini, and reset the cache name
|
57
|
+
# so it's looked up again.
|
58
|
+
# This is only used for testing.
|
59
|
+
def clear_cache
|
60
|
+
@termini.clear
|
61
|
+
end
|
62
|
+
|
63
|
+
# This is only used for testing.
|
64
|
+
def delete
|
65
|
+
@@indirections.delete(self) if @@indirections.include?(self)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Generate the full doc string.
|
69
|
+
def doc
|
70
|
+
text = ""
|
71
|
+
|
72
|
+
if defined? @doc and @doc
|
73
|
+
text += scrub(@doc) + "\n\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
if s = terminus_setting()
|
77
|
+
text += "* **Terminus Setting**: %s" % terminus_setting
|
78
|
+
end
|
79
|
+
|
80
|
+
text
|
81
|
+
end
|
82
|
+
|
83
|
+
def initialize(model, name, options = {})
|
84
|
+
@model = model
|
85
|
+
@name = name
|
86
|
+
|
87
|
+
@termini = {}
|
88
|
+
@cache_class = nil
|
89
|
+
@terminus_class = nil
|
90
|
+
|
91
|
+
raise(ArgumentError, "Indirection %s is already defined" % @name) if @@indirections.find { |i| i.name == @name }
|
92
|
+
@@indirections << self
|
93
|
+
|
94
|
+
if mod = options[:extend]
|
95
|
+
extend(mod)
|
96
|
+
options.delete(:extend)
|
97
|
+
end
|
98
|
+
|
99
|
+
# This is currently only used for cache_class and terminus_class.
|
100
|
+
options.each do |name, value|
|
101
|
+
begin
|
102
|
+
send(name.to_s + "=", value)
|
103
|
+
rescue NoMethodError
|
104
|
+
raise ArgumentError, "%s is not a valid Indirection parameter" % name
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Return the singleton terminus for this indirection.
|
110
|
+
def terminus(terminus_name = nil)
|
111
|
+
# Get the name of the terminus.
|
112
|
+
unless terminus_name ||= terminus_class
|
113
|
+
raise Puppet::DevError, "No terminus specified for %s; cannot redirect" % self.name
|
114
|
+
end
|
115
|
+
|
116
|
+
return @termini[terminus_name] ||= make_terminus(terminus_name)
|
117
|
+
end
|
118
|
+
|
119
|
+
# This can be used to select the terminus class.
|
120
|
+
attr_accessor :terminus_setting
|
121
|
+
|
122
|
+
# Determine the terminus class.
|
123
|
+
def terminus_class
|
124
|
+
unless @terminus_class
|
125
|
+
if setting = self.terminus_setting
|
126
|
+
self.terminus_class = Puppet.settings[setting].to_sym
|
127
|
+
else
|
128
|
+
raise Puppet::DevError, "No terminus class nor terminus setting was provided for indirection %s" % self.name
|
129
|
+
end
|
130
|
+
end
|
131
|
+
@terminus_class
|
132
|
+
end
|
133
|
+
|
134
|
+
# Specify the terminus class to use.
|
135
|
+
def terminus_class=(klass)
|
136
|
+
validate_terminus_class(klass)
|
137
|
+
@terminus_class = klass
|
138
|
+
end
|
139
|
+
|
140
|
+
# This is used by terminus_class= and cache=.
|
141
|
+
def validate_terminus_class(terminus_class)
|
142
|
+
unless terminus_class and terminus_class.to_s != ""
|
143
|
+
raise ArgumentError, "Invalid terminus name %s" % terminus_class.inspect
|
144
|
+
end
|
145
|
+
unless Puppet::Indirector::Terminus.terminus_class(self.name, terminus_class)
|
146
|
+
raise ArgumentError, "Could not find terminus %s for indirection %s" % [terminus_class, self.name]
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def find(key, *args)
|
151
|
+
# Select the appropriate terminus if there's a hook
|
152
|
+
# for doing so. This allows the caller to pass in some kind
|
153
|
+
# of URI that the indirection can use for routing to the appropriate
|
154
|
+
# terminus.
|
155
|
+
if respond_to?(:select_terminus)
|
156
|
+
terminus_name = select_terminus(key, *args)
|
157
|
+
else
|
158
|
+
terminus_name = terminus_class
|
159
|
+
end
|
160
|
+
|
161
|
+
check_authorization(:find, terminus_name, ([key] + args))
|
162
|
+
|
163
|
+
# See if our instance is in the cache and up to date.
|
164
|
+
if cache? and cache.has_most_recent?(key, terminus(terminus_name).version(key))
|
165
|
+
Puppet.info "Using cached %s %s" % [self.name, key]
|
166
|
+
return cache.find(key, *args)
|
167
|
+
end
|
168
|
+
|
169
|
+
# Otherwise, return the result from the terminus, caching if appropriate.
|
170
|
+
if result = terminus(terminus_name).find(key, *args)
|
171
|
+
result.version ||= Time.now.utc
|
172
|
+
if cache?
|
173
|
+
Puppet.info "Caching %s %s" % [self.name, key]
|
174
|
+
cache.save(result, *args)
|
175
|
+
end
|
176
|
+
|
177
|
+
terminus(terminus_name).post_find(result) if terminus(terminus_name).respond_to?(:post_find)
|
178
|
+
|
179
|
+
return result
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def destroy(*args)
|
184
|
+
check_authorization(:destroy, terminus_class, args)
|
185
|
+
|
186
|
+
terminus.destroy(*args)
|
187
|
+
end
|
188
|
+
|
189
|
+
def search(*args)
|
190
|
+
check_authorization(:search, terminus_class, args)
|
191
|
+
|
192
|
+
result = terminus.search(*args)
|
193
|
+
|
194
|
+
terminus().post_search(result) if terminus().respond_to?(:post_search)
|
195
|
+
|
196
|
+
result
|
197
|
+
end
|
198
|
+
|
199
|
+
# these become instance methods
|
200
|
+
def save(instance, *args)
|
201
|
+
check_authorization(:save, terminus_class, ([instance] + args))
|
202
|
+
|
203
|
+
instance.version ||= Time.now.utc
|
204
|
+
dest = cache? ? cache : terminus
|
205
|
+
return if dest.has_most_recent?(instance.name, instance.version)
|
206
|
+
Puppet.info "Caching %s %s" % [self.name, instance.name] if cache?
|
207
|
+
cache.save(instance, *args) if cache?
|
208
|
+
terminus.save(instance, *args)
|
209
|
+
end
|
210
|
+
|
211
|
+
def version(*args)
|
212
|
+
terminus.version(*args)
|
213
|
+
end
|
214
|
+
|
215
|
+
private
|
216
|
+
|
217
|
+
# Check authorization if there's a hook available; fail if there is one
|
218
|
+
# and it returns false.
|
219
|
+
def check_authorization(method, terminus_name, arguments)
|
220
|
+
# Don't check authorization if there's no node.
|
221
|
+
# LAK:FIXME This is a hack and is quite possibly not the design we want.
|
222
|
+
return unless arguments[-1].is_a?(Hash) and arguments[-1][:node]
|
223
|
+
|
224
|
+
if terminus(terminus_name).respond_to?(:authorized?) and ! terminus(terminus_name).authorized?(method, *arguments)
|
225
|
+
raise ArgumentError, "Not authorized to call %s with %s" % [method, arguments[0]]
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
# Create a new terminus instance.
|
230
|
+
def make_terminus(terminus_class)
|
231
|
+
# Load our terminus class.
|
232
|
+
unless klass = Puppet::Indirector::Terminus.terminus_class(self.name, terminus_class)
|
233
|
+
raise ArgumentError, "Could not find terminus %s for indirection %s" % [terminus_class, self.name]
|
234
|
+
end
|
235
|
+
return klass.new
|
236
|
+
end
|
237
|
+
end
|