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,34 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-16.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/indirector'
|
6
|
+
require 'puppet/file_serving'
|
7
|
+
require 'puppet/file_serving/file_base'
|
8
|
+
require 'puppet/file_serving/indirection_hooks'
|
9
|
+
|
10
|
+
# A class that handles retrieving file contents.
|
11
|
+
# It only reads the file when its content is specifically
|
12
|
+
# asked for.
|
13
|
+
class Puppet::FileServing::Content < Puppet::FileServing::FileBase
|
14
|
+
extend Puppet::Indirector
|
15
|
+
indirects :file_content, :extend => Puppet::FileServing::IndirectionHooks
|
16
|
+
|
17
|
+
attr_reader :path
|
18
|
+
|
19
|
+
# Read the content of our file in.
|
20
|
+
def content
|
21
|
+
# This stat can raise an exception, too.
|
22
|
+
raise(ArgumentError, "Cannot read the contents of links unless following links") if stat().ftype == "symlink"
|
23
|
+
|
24
|
+
::File.read(full_path())
|
25
|
+
end
|
26
|
+
|
27
|
+
# Just return the file contents as the yaml. This allows us to
|
28
|
+
# avoid escaping or any such thing. LAK:NOTE Not really sure how
|
29
|
+
# this will behave if the file contains yaml... I think the far
|
30
|
+
# side needs to understand that it's a plain string.
|
31
|
+
def to_yaml
|
32
|
+
content
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-22.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/file_serving'
|
6
|
+
|
7
|
+
# The base class for Content and Metadata; provides common
|
8
|
+
# functionality like the behaviour around links.
|
9
|
+
class Puppet::FileServing::FileBase
|
10
|
+
attr_accessor :key
|
11
|
+
|
12
|
+
# Return the full path to our file. Fails if there's no path set.
|
13
|
+
def full_path
|
14
|
+
raise(ArgumentError, "You must set a path to get a file's path") unless self.path
|
15
|
+
|
16
|
+
relative_path ? File.join(path, relative_path) : path
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(key, options = {})
|
20
|
+
raise ArgumentError.new("Files must not be fully qualified") if path =~ /^#{::File::SEPARATOR}/
|
21
|
+
|
22
|
+
@key = key
|
23
|
+
@links = :manage
|
24
|
+
|
25
|
+
options.each do |param, value|
|
26
|
+
begin
|
27
|
+
send param.to_s + "=", value
|
28
|
+
rescue NoMethodError
|
29
|
+
raise ArgumentError, "Invalid option %s for %s" % [param, self.class]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Determine how we deal with links.
|
35
|
+
attr_reader :links
|
36
|
+
def links=(value)
|
37
|
+
raise(ArgumentError, ":links can only be set to :manage or :follow") unless [:manage, :follow].include?(value)
|
38
|
+
@links = value
|
39
|
+
end
|
40
|
+
|
41
|
+
# Set our base path.
|
42
|
+
attr_reader :path
|
43
|
+
def path=(path)
|
44
|
+
raise ArgumentError.new("Paths must be fully qualified") unless path =~ /^#{::File::SEPARATOR}/
|
45
|
+
@path = path
|
46
|
+
end
|
47
|
+
|
48
|
+
# Set a relative path; this is used for recursion, and sets
|
49
|
+
# the file's path relative to the initial recursion point.
|
50
|
+
attr_reader :relative_path
|
51
|
+
def relative_path=(path)
|
52
|
+
raise ArgumentError.new("Relative paths must not be fully qualified") if path =~ /^#{::File::SEPARATOR}/
|
53
|
+
@relative_path = path
|
54
|
+
end
|
55
|
+
|
56
|
+
# Stat our file, using the appropriate link-sensitive method.
|
57
|
+
def stat
|
58
|
+
unless defined?(@stat_method)
|
59
|
+
@stat_method = self.links == :manage ? :lstat : :stat
|
60
|
+
end
|
61
|
+
File.send(@stat_method, full_path())
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-22.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'find'
|
6
|
+
require 'puppet/file_serving'
|
7
|
+
require 'puppet/file_serving/metadata'
|
8
|
+
|
9
|
+
# Operate recursively on a path, returning a set of file paths.
|
10
|
+
class Puppet::FileServing::Fileset
|
11
|
+
attr_reader :path, :ignore, :links
|
12
|
+
attr_accessor :recurse
|
13
|
+
|
14
|
+
# Return a list of all files in our fileset. This is different from the
|
15
|
+
# normal definition of find in that we support specific levels
|
16
|
+
# of recursion, which means we need to know when we're going another
|
17
|
+
# level deep, which Find doesn't do.
|
18
|
+
def files
|
19
|
+
files = perform_recursion
|
20
|
+
|
21
|
+
# Now strip off the leading path, so each file becomes relative, and remove
|
22
|
+
# any slashes that might end up at the beginning of the path.
|
23
|
+
result = files.collect { |file| file.sub(%r{^#{@path}/*}, '') }
|
24
|
+
|
25
|
+
# And add the path itself.
|
26
|
+
result.unshift(".")
|
27
|
+
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
# Should we ignore this path?
|
32
|
+
def ignore?(path)
|
33
|
+
# 'detect' normally returns the found result, whereas we just want true/false.
|
34
|
+
! @ignore.detect { |pattern| File.fnmatch?(pattern, path) }.nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
def ignore=(values)
|
38
|
+
values = [values] unless values.is_a?(Array)
|
39
|
+
@ignore = values
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(path, options = {})
|
43
|
+
raise ArgumentError.new("Fileset paths must be fully qualified") unless path =~ /^#{::File::SEPARATOR}/
|
44
|
+
|
45
|
+
@path = path
|
46
|
+
|
47
|
+
# Set our defaults.
|
48
|
+
@ignore = []
|
49
|
+
@links = :manage
|
50
|
+
@recurse = false
|
51
|
+
|
52
|
+
options.each do |option, value|
|
53
|
+
method = option.to_s + "="
|
54
|
+
begin
|
55
|
+
send(method, value)
|
56
|
+
rescue NoMethodError
|
57
|
+
raise ArgumentError, "Invalid option '%s'" % option
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
raise ArgumentError.new("Fileset paths must exist") unless stat = stat(path)
|
62
|
+
end
|
63
|
+
|
64
|
+
def links=(links)
|
65
|
+
links = links.intern if links.is_a?(String)
|
66
|
+
raise(ArgumentError, "Invalid :links value '%s'" % links) unless [:manage, :follow].include?(links)
|
67
|
+
@links = links
|
68
|
+
@stat_method = links == :manage ? :lstat : :stat
|
69
|
+
end
|
70
|
+
|
71
|
+
# Should we recurse further? This is basically a single
|
72
|
+
# place for all of the logic around recursion.
|
73
|
+
def recurse?(depth)
|
74
|
+
# If recurse is true, just return true
|
75
|
+
return true if self.recurse == true
|
76
|
+
|
77
|
+
# Return false if the value is false or zero.
|
78
|
+
return false if [false, 0].include?(self.recurse)
|
79
|
+
|
80
|
+
# Return true if our current depth is less than the allowed recursion depth.
|
81
|
+
return true if self.recurse.is_a?(Fixnum) and depth <= self.recurse
|
82
|
+
|
83
|
+
# Else, return false.
|
84
|
+
return false
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
# Pull the recursion logic into one place. It's moderately hairy, and this
|
90
|
+
# allows us to keep the hairiness apart from what we do with the files.
|
91
|
+
def perform_recursion
|
92
|
+
# Start out with just our base directory.
|
93
|
+
current_dirs = [@path]
|
94
|
+
|
95
|
+
next_dirs = []
|
96
|
+
|
97
|
+
depth = 1
|
98
|
+
|
99
|
+
result = []
|
100
|
+
return result unless recurse?(depth)
|
101
|
+
|
102
|
+
while dir_path = current_dirs.shift or ((depth += 1) and recurse?(depth) and current_dirs = next_dirs and next_dirs = [] and dir_path = current_dirs.shift)
|
103
|
+
next unless stat = stat(dir_path)
|
104
|
+
next unless stat.directory?
|
105
|
+
|
106
|
+
Dir.entries(dir_path).each do |file_path|
|
107
|
+
next if [".", ".."].include?(file_path)
|
108
|
+
|
109
|
+
# Note that this also causes matching directories not
|
110
|
+
# to be recursed into.
|
111
|
+
next if ignore?(file_path)
|
112
|
+
|
113
|
+
# Add it to our list of files to return
|
114
|
+
result << File.join(dir_path, file_path)
|
115
|
+
|
116
|
+
# And to our list of files/directories to iterate over.
|
117
|
+
next_dirs << File.join(dir_path, file_path)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
return result
|
122
|
+
end
|
123
|
+
|
124
|
+
# Stat a given file, using the links-appropriate method.
|
125
|
+
def stat(path)
|
126
|
+
unless defined?(@stat_method)
|
127
|
+
@stat_method = self.links == :manage ? :lstat : :stat
|
128
|
+
end
|
129
|
+
|
130
|
+
begin
|
131
|
+
return File.send(@stat_method, path)
|
132
|
+
rescue
|
133
|
+
# If this happens, it is almost surely because we're
|
134
|
+
# trying to manage a link to a file that does not exist.
|
135
|
+
return nil
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-18.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'uri'
|
6
|
+
require 'puppet/file_serving'
|
7
|
+
|
8
|
+
# This module is used to pick the appropriate terminus
|
9
|
+
# in file-serving indirections. This is necessary because
|
10
|
+
# the terminus varies based on the URI asked for.
|
11
|
+
module Puppet::FileServing::IndirectionHooks
|
12
|
+
PROTOCOL_MAP = {"puppet" => :rest, "file" => :file, "puppetmounts" => :file_server}
|
13
|
+
|
14
|
+
# Pick an appropriate terminus based on the protocol.
|
15
|
+
def select_terminus(full_uri, options = {})
|
16
|
+
# Short-circuit to :file if it's a fully-qualified path.
|
17
|
+
return PROTOCOL_MAP["file"] if full_uri =~ /^#{::File::SEPARATOR}/
|
18
|
+
begin
|
19
|
+
uri = URI.parse(URI.escape(full_uri))
|
20
|
+
rescue => detail
|
21
|
+
raise ArgumentError, "Could not understand URI %s: %s" % [full_uri, detail.to_s]
|
22
|
+
end
|
23
|
+
|
24
|
+
terminus = PROTOCOL_MAP[uri.scheme] || raise(ArgumentError, "URI protocol '%s' is not supported for file serving" % uri.scheme)
|
25
|
+
|
26
|
+
# This provides a convenient mechanism for people to write configurations work
|
27
|
+
# well in both a networked and local setting.
|
28
|
+
if uri.host.nil? and uri.scheme == "puppet" and Puppet.settings[:name] == "puppet"
|
29
|
+
terminus = :file_server
|
30
|
+
end
|
31
|
+
|
32
|
+
if terminus == :file_server and uri.path =~ %r{^/([^/]+)\b}
|
33
|
+
modname = $1
|
34
|
+
if modname == "modules"
|
35
|
+
terminus = :modules
|
36
|
+
elsif terminus(:modules).find_module(modname, options[:node])
|
37
|
+
Puppet.warning "DEPRECATION NOTICE: Found file '%s' in module without using the 'modules' mount; please prefix path with '/modules'" % uri.path
|
38
|
+
terminus = :modules
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
return terminus
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-16.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet'
|
6
|
+
require 'puppet/indirector'
|
7
|
+
require 'puppet/file_serving'
|
8
|
+
require 'puppet/file_serving/file_base'
|
9
|
+
require 'puppet/util/checksums'
|
10
|
+
require 'puppet/file_serving/indirection_hooks'
|
11
|
+
|
12
|
+
# A class that handles retrieving file metadata.
|
13
|
+
class Puppet::FileServing::Metadata < Puppet::FileServing::FileBase
|
14
|
+
module MetadataHelper
|
15
|
+
include Puppet::FileServing::IndirectionHooks
|
16
|
+
|
17
|
+
def post_find(instance)
|
18
|
+
end
|
19
|
+
|
20
|
+
def post_search(key, options = {})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
include Puppet::Util::Checksums
|
25
|
+
|
26
|
+
extend Puppet::Indirector
|
27
|
+
indirects :file_metadata, :extend => Puppet::FileServing::IndirectionHooks
|
28
|
+
|
29
|
+
attr_reader :path, :owner, :group, :mode, :checksum_type, :checksum, :ftype, :destination
|
30
|
+
|
31
|
+
def checksum_type=(type)
|
32
|
+
raise(ArgumentError, "Unsupported checksum type %s" % type) unless respond_to?("%s_file" % type)
|
33
|
+
|
34
|
+
@checksum_type = type
|
35
|
+
end
|
36
|
+
|
37
|
+
# Retrieve the attributes for this file, relative to a base directory.
|
38
|
+
# Note that File.stat raises Errno::ENOENT if the file is absent and this
|
39
|
+
# method does not catch that exception.
|
40
|
+
def collect_attributes
|
41
|
+
real_path = full_path()
|
42
|
+
stat = stat()
|
43
|
+
@owner = stat.uid
|
44
|
+
@group = stat.gid
|
45
|
+
@ftype = stat.ftype
|
46
|
+
|
47
|
+
|
48
|
+
# Set the octal mode, but as a string.
|
49
|
+
@mode = "%o" % (stat.mode & 007777)
|
50
|
+
|
51
|
+
if stat.ftype == "symlink"
|
52
|
+
@destination = File.readlink(real_path)
|
53
|
+
else
|
54
|
+
@checksum = get_checksum(real_path)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def initialize(*args)
|
59
|
+
@checksum_type = "md5"
|
60
|
+
super
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
# Retrieve our checksum.
|
66
|
+
def get_checksum(path)
|
67
|
+
("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path)
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
#
|
2
|
+
# Created by Luke Kanies on 2007-10-16.
|
3
|
+
# Copyright (c) 2007. All rights reserved.
|
4
|
+
|
5
|
+
require 'puppet/network/authstore'
|
6
|
+
require 'puppet/util/logging'
|
7
|
+
require 'puppet/file_serving'
|
8
|
+
require 'puppet/file_serving/metadata'
|
9
|
+
require 'puppet/file_serving/content'
|
10
|
+
|
11
|
+
# Broker access to the filesystem, converting local URIs into metadata
|
12
|
+
# or content objects.
|
13
|
+
class Puppet::FileServing::Mount < Puppet::Network::AuthStore
|
14
|
+
include Puppet::Util::Logging
|
15
|
+
|
16
|
+
@@localmap = nil
|
17
|
+
|
18
|
+
# Clear the cache. This is only ever used for testing.
|
19
|
+
def self.clear_cache
|
20
|
+
@@localmap = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :name
|
24
|
+
|
25
|
+
# Return a new mount with the same properties as +self+, except
|
26
|
+
# with a different name and path.
|
27
|
+
def copy(name, path)
|
28
|
+
result = self.clone
|
29
|
+
result.path = path
|
30
|
+
result.instance_variable_set(:@name, name)
|
31
|
+
return result
|
32
|
+
end
|
33
|
+
|
34
|
+
# Return an instance of the appropriate class.
|
35
|
+
def file(short_file, options = {})
|
36
|
+
file = file_path(short_file, options[:node])
|
37
|
+
|
38
|
+
return nil unless FileTest.exists?(file)
|
39
|
+
|
40
|
+
return file
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return a fully qualified path, given a short path and
|
44
|
+
# possibly a client name.
|
45
|
+
def file_path(relative_path, node = nil)
|
46
|
+
full_path = path(node)
|
47
|
+
raise ArgumentError.new("Mounts without paths are not usable") unless full_path
|
48
|
+
|
49
|
+
# If there's no relative path name, then we're serving the mount itself.
|
50
|
+
return full_path unless relative_path
|
51
|
+
|
52
|
+
return File.join(full_path, relative_path)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Create out object. It must have a name.
|
56
|
+
def initialize(name, path = nil)
|
57
|
+
unless name =~ %r{^[-\w]+$}
|
58
|
+
raise ArgumentError, "Invalid mount name format '%s'" % name
|
59
|
+
end
|
60
|
+
@name = name
|
61
|
+
|
62
|
+
if path
|
63
|
+
self.path = path
|
64
|
+
else
|
65
|
+
@path = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
super()
|
69
|
+
end
|
70
|
+
|
71
|
+
# Return the path as appropriate, expanding as necessary.
|
72
|
+
def path(node = nil)
|
73
|
+
if expandable?
|
74
|
+
return expand(@path, node)
|
75
|
+
else
|
76
|
+
return @path
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Set the path.
|
81
|
+
def path=(path)
|
82
|
+
# FIXME: For now, just don't validate paths with replacement
|
83
|
+
# patterns in them.
|
84
|
+
if path =~ /%./
|
85
|
+
# Mark that we're expandable.
|
86
|
+
@expandable = true
|
87
|
+
else
|
88
|
+
unless FileTest.directory?(path)
|
89
|
+
raise ArgumentError, "%s does not exist or is not a directory" % path
|
90
|
+
end
|
91
|
+
unless FileTest.readable?(path)
|
92
|
+
raise ArgumentError, "%s is not readable" % path
|
93
|
+
end
|
94
|
+
@expandable = false
|
95
|
+
end
|
96
|
+
@path = path
|
97
|
+
end
|
98
|
+
|
99
|
+
def sync(path)
|
100
|
+
@@syncs[path] ||= Sync.new
|
101
|
+
@@syncs[path]
|
102
|
+
end
|
103
|
+
|
104
|
+
def to_s
|
105
|
+
"mount[%s]" % @name
|
106
|
+
end
|
107
|
+
|
108
|
+
# Verify our configuration is valid. This should really check to
|
109
|
+
# make sure at least someone will be allowed, but, eh.
|
110
|
+
def valid?
|
111
|
+
return ! @path.nil?
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
# LAK:FIXME Move this method to the REST terminus hook.
|
117
|
+
def authcheck(file, client, clientip)
|
118
|
+
raise "This method should be replaced by a REST/terminus hook"
|
119
|
+
# If we're local, don't bother passing in information.
|
120
|
+
if local?
|
121
|
+
client = nil
|
122
|
+
clientip = nil
|
123
|
+
end
|
124
|
+
unless mount.allowed?(client, clientip)
|
125
|
+
mount.warning "%s cannot access %s" %
|
126
|
+
[client, file]
|
127
|
+
raise Puppet::AuthorizationError, "Cannot access %s" % mount
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# Create a map for a specific node.
|
132
|
+
def clientmap(node)
|
133
|
+
{
|
134
|
+
"h" => node.sub(/\..*$/, ""),
|
135
|
+
"H" => node,
|
136
|
+
"d" => node.sub(/[^.]+\./, "") # domain name
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
# Replace % patterns as appropriate.
|
141
|
+
def expand(path, node = nil)
|
142
|
+
# This map should probably be moved into a method.
|
143
|
+
map = nil
|
144
|
+
|
145
|
+
if node
|
146
|
+
map = clientmap(node)
|
147
|
+
else
|
148
|
+
Puppet.notice "No client; expanding '%s' with local host" %
|
149
|
+
path
|
150
|
+
# Else, use the local information
|
151
|
+
map = localmap()
|
152
|
+
end
|
153
|
+
|
154
|
+
path.gsub(/%(.)/) do |v|
|
155
|
+
key = $1
|
156
|
+
if key == "%"
|
157
|
+
"%"
|
158
|
+
else
|
159
|
+
map[key] || v
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# Do we have any patterns in our path, yo?
|
165
|
+
def expandable?
|
166
|
+
if defined? @expandable
|
167
|
+
@expandable
|
168
|
+
else
|
169
|
+
false
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# Cache this manufactured map, since if it's used it's likely
|
174
|
+
# to get used a lot.
|
175
|
+
def localmap
|
176
|
+
unless @@localmap
|
177
|
+
@@localmap = {
|
178
|
+
"h" => Facter.value("hostname"),
|
179
|
+
"H" => [Facter.value("hostname"),
|
180
|
+
Facter.value("domain")].join("."),
|
181
|
+
"d" => Facter.value("domain")
|
182
|
+
}
|
183
|
+
end
|
184
|
+
@@localmap
|
185
|
+
end
|
186
|
+
end
|