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
data/test/language/collector.rb
DELETED
@@ -1,179 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
|
4
|
-
|
5
|
-
require 'puppettest'
|
6
|
-
require 'puppettest/parsertesting'
|
7
|
-
require 'puppettest/resourcetesting'
|
8
|
-
|
9
|
-
class TestCollector < Test::Unit::TestCase
|
10
|
-
include PuppetTest
|
11
|
-
include PuppetTest::ParserTesting
|
12
|
-
include PuppetTest::ResourceTesting
|
13
|
-
Parser = Puppet::Parser
|
14
|
-
AST = Parser::AST
|
15
|
-
|
16
|
-
def setup
|
17
|
-
super
|
18
|
-
Puppet[:trace] = false
|
19
|
-
@interp, @scope, @source = mkclassframing
|
20
|
-
end
|
21
|
-
|
22
|
-
# Test just collecting a specific resource. This is used by the 'realize'
|
23
|
-
# function, and it's much faster than iterating over all of the resources.
|
24
|
-
def test_collect_resource
|
25
|
-
# Make a collector
|
26
|
-
coll = nil
|
27
|
-
assert_nothing_raised do
|
28
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :virtual)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Now set the resource in the collector
|
32
|
-
assert_nothing_raised do
|
33
|
-
coll.resources = ["File[/tmp/virtual1]", "File[/tmp/virtual3]"]
|
34
|
-
end
|
35
|
-
@scope.newcollection(coll)
|
36
|
-
|
37
|
-
# Evaluate the collector and make sure it doesn't fail with no resources
|
38
|
-
# found yet
|
39
|
-
assert_nothing_raised("Resource collection with no results failed") do
|
40
|
-
assert_equal(false, coll.evaluate)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Make a couple of virtual resources
|
44
|
-
one = mkresource(:type => "file", :title => "/tmp/virtual1",
|
45
|
-
:virtual => true, :params => {:owner => "root"})
|
46
|
-
two = mkresource(:type => "file", :title => "/tmp/virtual2",
|
47
|
-
:virtual => true, :params => {:owner => "root"})
|
48
|
-
@scope.setresource one
|
49
|
-
@scope.setresource two
|
50
|
-
|
51
|
-
# Now run the collector again and make sure it finds our resource
|
52
|
-
assert_nothing_raised do
|
53
|
-
assert_equal([one], coll.evaluate, "did not find resource")
|
54
|
-
end
|
55
|
-
|
56
|
-
# And make sure the resource is no longer virtual
|
57
|
-
assert(! one.virtual?,
|
58
|
-
"Resource is still virtual")
|
59
|
-
|
60
|
-
# But the other still is
|
61
|
-
assert(two.virtual?,
|
62
|
-
"Resource got realized")
|
63
|
-
|
64
|
-
# Make sure that the collection is still there
|
65
|
-
assert(@scope.collections.include?(coll), "collection was deleted too soon")
|
66
|
-
|
67
|
-
# Now add our third resource
|
68
|
-
three = mkresource(:type => "file", :title => "/tmp/virtual3",
|
69
|
-
:virtual => true, :params => {:owner => "root"})
|
70
|
-
@scope.setresource three
|
71
|
-
|
72
|
-
# Run the collection
|
73
|
-
assert_nothing_raised do
|
74
|
-
assert_equal([three], coll.evaluate, "did not find resource")
|
75
|
-
end
|
76
|
-
assert(! three.virtual?, "three is still virtual")
|
77
|
-
|
78
|
-
# And make sure that the collection got deleted from the scope's list
|
79
|
-
assert(@scope.collections.empty?, "collection was not deleted")
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_virtual
|
83
|
-
# Make a virtual resource
|
84
|
-
virtual = mkresource(:type => "file", :title => "/tmp/virtual",
|
85
|
-
:virtual => true, :params => {:owner => "root"})
|
86
|
-
@scope.setresource virtual
|
87
|
-
|
88
|
-
# And a non-virtual
|
89
|
-
real = mkresource(:type => "file", :title => "/tmp/real",
|
90
|
-
:params => {:owner => "root"})
|
91
|
-
@scope.setresource real
|
92
|
-
|
93
|
-
# Now make a collector
|
94
|
-
coll = nil
|
95
|
-
|
96
|
-
# Make a fake query
|
97
|
-
code = proc do |res|
|
98
|
-
true
|
99
|
-
end
|
100
|
-
assert_nothing_raised do
|
101
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, code, :virtual)
|
102
|
-
end
|
103
|
-
|
104
|
-
# Set it in our scope
|
105
|
-
@scope.newcollection(coll)
|
106
|
-
|
107
|
-
# Make sure it's in the collections
|
108
|
-
assert(@scope.collections.include?(coll), "collection was not added")
|
109
|
-
|
110
|
-
# And try to collect the virtual resources.
|
111
|
-
ret = nil
|
112
|
-
assert_nothing_raised do
|
113
|
-
ret = coll.collect_virtual
|
114
|
-
end
|
115
|
-
|
116
|
-
assert_equal([virtual], ret)
|
117
|
-
|
118
|
-
# Now make sure evaluate does the right thing.
|
119
|
-
assert_nothing_raised do
|
120
|
-
ret = coll.evaluate
|
121
|
-
end
|
122
|
-
|
123
|
-
# And make sure our virtual object is no longer virtual
|
124
|
-
assert(! virtual.virtual?, "Virtual object did not get realized")
|
125
|
-
|
126
|
-
# Now make a new collector of a different type and make sure it
|
127
|
-
# finds nothing.
|
128
|
-
assert_nothing_raised do
|
129
|
-
coll = Puppet::Parser::Collector.new(@scope, "exec", nil, nil, :virtual)
|
130
|
-
end
|
131
|
-
|
132
|
-
# Remark this as virtual
|
133
|
-
virtual.virtual = true
|
134
|
-
|
135
|
-
assert_nothing_raised do
|
136
|
-
ret = coll.evaluate
|
137
|
-
end
|
138
|
-
|
139
|
-
assert_equal(false, ret)
|
140
|
-
end
|
141
|
-
|
142
|
-
# Collections that specify resources should be deleted when they succeed,
|
143
|
-
# but others should remain until the very end.
|
144
|
-
def test_normal_collections_remain
|
145
|
-
# Make a collector
|
146
|
-
coll = nil
|
147
|
-
assert_nothing_raised do
|
148
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :virtual)
|
149
|
-
end
|
150
|
-
|
151
|
-
@scope.newcollection(coll)
|
152
|
-
|
153
|
-
# run the collection and make sure it doesn't get deleted, since it
|
154
|
-
# didn't return anything
|
155
|
-
assert_nothing_raised do
|
156
|
-
assert_equal(false, coll.evaluate,
|
157
|
-
"Evaluate returned incorrect value")
|
158
|
-
end
|
159
|
-
|
160
|
-
assert_equal([coll], @scope.collections, "Collection was deleted")
|
161
|
-
|
162
|
-
# Make a resource
|
163
|
-
one = mkresource(:type => "file", :title => "/tmp/virtual1",
|
164
|
-
:virtual => true, :params => {:owner => "root"})
|
165
|
-
@scope.setresource one
|
166
|
-
|
167
|
-
# Now perform the collection again, and it should still be there
|
168
|
-
assert_nothing_raised do
|
169
|
-
assert_equal([one], coll.evaluate,
|
170
|
-
"Evaluate returned incorrect value")
|
171
|
-
end
|
172
|
-
|
173
|
-
assert_equal([coll], @scope.collections, "Collection was deleted")
|
174
|
-
|
175
|
-
assert_equal(false, one.virtual?, "One was not realized")
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
# $Id: collector.rb 2597 2007-06-17 21:41:50Z luke $
|
@@ -1,804 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
|
4
|
-
|
5
|
-
require 'facter'
|
6
|
-
|
7
|
-
require 'puppet'
|
8
|
-
require 'puppet/parser/interpreter'
|
9
|
-
require 'puppet/parser/parser'
|
10
|
-
require 'puppet/network/client'
|
11
|
-
require 'puppettest'
|
12
|
-
require 'puppettest/resourcetesting'
|
13
|
-
require 'puppettest/parsertesting'
|
14
|
-
require 'puppettest/servertest'
|
15
|
-
require 'timeout'
|
16
|
-
|
17
|
-
class TestInterpreter < PuppetTest::TestCase
|
18
|
-
include PuppetTest
|
19
|
-
include PuppetTest::ServerTest
|
20
|
-
include PuppetTest::ParserTesting
|
21
|
-
include PuppetTest::ResourceTesting
|
22
|
-
AST = Puppet::Parser::AST
|
23
|
-
NodeDef = Puppet::Parser::Interpreter::NodeDef
|
24
|
-
|
25
|
-
# create a simple manifest that uses nodes to create a file
|
26
|
-
def mknodemanifest(node, file)
|
27
|
-
createdfile = tempfile()
|
28
|
-
|
29
|
-
File.open(file, "w") { |f|
|
30
|
-
f.puts "node %s { file { \"%s\": ensure => file, mode => 755 } }\n" %
|
31
|
-
[node, createdfile]
|
32
|
-
}
|
33
|
-
|
34
|
-
return [file, createdfile]
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_simple
|
38
|
-
file = tempfile()
|
39
|
-
File.open(file, "w") { |f|
|
40
|
-
f.puts "file { \"/etc\": owner => root }"
|
41
|
-
}
|
42
|
-
assert_nothing_raised {
|
43
|
-
Puppet::Parser::Interpreter.new(:Manifest => file)
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_reloadfiles
|
48
|
-
hostname = Facter["hostname"].value
|
49
|
-
|
50
|
-
file = tempfile()
|
51
|
-
|
52
|
-
# Create a first version
|
53
|
-
createdfile = mknodemanifest(hostname, file)
|
54
|
-
|
55
|
-
interp = nil
|
56
|
-
assert_nothing_raised {
|
57
|
-
interp = Puppet::Parser::Interpreter.new(:Manifest => file)
|
58
|
-
}
|
59
|
-
|
60
|
-
config = nil
|
61
|
-
assert_nothing_raised {
|
62
|
-
config = interp.run(hostname, {})
|
63
|
-
}
|
64
|
-
sleep(1)
|
65
|
-
|
66
|
-
# Now create a new file
|
67
|
-
createdfile = mknodemanifest(hostname, file)
|
68
|
-
|
69
|
-
newconfig = nil
|
70
|
-
assert_nothing_raised {
|
71
|
-
newconfig = interp.run(hostname, {})
|
72
|
-
}
|
73
|
-
|
74
|
-
assert(config != newconfig, "Configs are somehow the same")
|
75
|
-
end
|
76
|
-
|
77
|
-
# Make sure searchnode behaves as we expect.
|
78
|
-
def test_nodesearch
|
79
|
-
# We use two sources here to catch a weird bug where the default
|
80
|
-
# node is used if the host isn't in the first source.
|
81
|
-
interp = mkinterp
|
82
|
-
|
83
|
-
# Make some nodes
|
84
|
-
names = %w{node1 node2 node2.domain.com}
|
85
|
-
interp.newnode names
|
86
|
-
interp.newnode %w{default}
|
87
|
-
|
88
|
-
nodes = {}
|
89
|
-
# Make sure we can find them all, using the direct method
|
90
|
-
names.each do |name|
|
91
|
-
nodes[name] = interp.nodesearch_code(name)
|
92
|
-
assert(nodes[name], "Could not find %s" % name)
|
93
|
-
nodes[name].file = __FILE__
|
94
|
-
end
|
95
|
-
|
96
|
-
# Now let's try it with the nodesearch method
|
97
|
-
names.each do |name|
|
98
|
-
node = interp.nodesearch(name)
|
99
|
-
assert(node, "Could not find #{name} via nodesearch")
|
100
|
-
end
|
101
|
-
|
102
|
-
# Make sure we find the default node when we search for nonexistent nodes
|
103
|
-
assert_nothing_raised do
|
104
|
-
default = interp.nodesearch("nosuchnode")
|
105
|
-
assert(default, "Did not find default node")
|
106
|
-
assert_equal("default", default.classname)
|
107
|
-
end
|
108
|
-
|
109
|
-
# Now make sure the longest match always wins
|
110
|
-
node = interp.nodesearch(*%w{node2 node2.domain.com})
|
111
|
-
|
112
|
-
assert(node, "Did not find node2")
|
113
|
-
assert_equal("node2.domain.com", node.classname,
|
114
|
-
"Did not get longest match")
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_parsedate
|
118
|
-
Puppet[:filetimeout] = 0
|
119
|
-
main = tempfile()
|
120
|
-
sub = tempfile()
|
121
|
-
mainfile = tempfile()
|
122
|
-
subfile = tempfile()
|
123
|
-
count = 0
|
124
|
-
updatemain = proc do
|
125
|
-
count += 1
|
126
|
-
File.open(main, "w") { |f|
|
127
|
-
f.puts "import '#{sub}'
|
128
|
-
file { \"#{mainfile}\": content => #{count} }
|
129
|
-
"
|
130
|
-
}
|
131
|
-
end
|
132
|
-
updatesub = proc do
|
133
|
-
count += 1
|
134
|
-
File.open(sub, "w") { |f|
|
135
|
-
f.puts "file { \"#{subfile}\": content => #{count} }
|
136
|
-
"
|
137
|
-
}
|
138
|
-
end
|
139
|
-
|
140
|
-
updatemain.call
|
141
|
-
updatesub.call
|
142
|
-
|
143
|
-
interp = Puppet::Parser::Interpreter.new(
|
144
|
-
:Manifest => main,
|
145
|
-
:Local => true
|
146
|
-
)
|
147
|
-
|
148
|
-
date = interp.parsedate
|
149
|
-
|
150
|
-
# Now update the site file and make sure we catch it
|
151
|
-
sleep 1
|
152
|
-
updatemain.call
|
153
|
-
newdate = interp.parsedate
|
154
|
-
assert(date != newdate, "Parsedate was not updated")
|
155
|
-
date = newdate
|
156
|
-
|
157
|
-
# And then the subfile
|
158
|
-
sleep 1
|
159
|
-
updatesub.call
|
160
|
-
newdate = interp.parsedate
|
161
|
-
assert(date != newdate, "Parsedate was not updated")
|
162
|
-
end
|
163
|
-
|
164
|
-
# Make sure class, node, and define methods are case-insensitive
|
165
|
-
def test_structure_case_insensitivity
|
166
|
-
interp = mkinterp
|
167
|
-
|
168
|
-
result = nil
|
169
|
-
assert_nothing_raised do
|
170
|
-
result = interp.newclass "Yayness"
|
171
|
-
end
|
172
|
-
assert_equal(result, interp.findclass("", "yayNess"))
|
173
|
-
|
174
|
-
assert_nothing_raised do
|
175
|
-
result = interp.newdefine "FunTest"
|
176
|
-
end
|
177
|
-
assert_equal(result, interp.finddefine("", "fUntEst"),
|
178
|
-
"%s was not matched" % "fUntEst")
|
179
|
-
|
180
|
-
assert_nothing_raised do
|
181
|
-
result = interp.newnode("MyNode").shift
|
182
|
-
end
|
183
|
-
assert_equal(result, interp.nodesearch("mYnOde"),
|
184
|
-
"mYnOde was not matched")
|
185
|
-
|
186
|
-
assert_nothing_raised do
|
187
|
-
result = interp.newnode("YayTest.Domain.Com").shift
|
188
|
-
end
|
189
|
-
assert_equal(result, interp.nodesearch("yaYtEst.domAin.cOm"),
|
190
|
-
"yaYtEst.domAin.cOm was not matched")
|
191
|
-
end
|
192
|
-
|
193
|
-
# Make sure our whole chain works.
|
194
|
-
def test_evaluate
|
195
|
-
interp, scope, source = mkclassframing
|
196
|
-
|
197
|
-
# Create a define that we'll be using
|
198
|
-
interp.newdefine("wrapper", :code => AST::ASTArray.new(:children => [
|
199
|
-
resourcedef("file", varref("name"), "owner" => "root")
|
200
|
-
]))
|
201
|
-
|
202
|
-
# Now create a resource that uses that define
|
203
|
-
define = mkresource(:type => "wrapper", :title => "/tmp/testing",
|
204
|
-
:scope => scope, :source => source, :params => :none)
|
205
|
-
|
206
|
-
scope.setresource define
|
207
|
-
|
208
|
-
# And a normal resource
|
209
|
-
scope.setresource mkresource(:type => "file", :title => "/tmp/rahness",
|
210
|
-
:scope => scope, :source => source,
|
211
|
-
:params => {:owner => "root"})
|
212
|
-
|
213
|
-
# Now evaluate everything
|
214
|
-
objects = nil
|
215
|
-
interp.usenodes = false
|
216
|
-
assert_nothing_raised do
|
217
|
-
objects = interp.evaluate(nil, {})
|
218
|
-
end
|
219
|
-
|
220
|
-
assert_instance_of(Puppet::TransBucket, objects)
|
221
|
-
end
|
222
|
-
|
223
|
-
# Test evaliterate. It's a very simple method, but it's pretty tough
|
224
|
-
# to test. It iterates over collections and instances of defined types
|
225
|
-
# until there's no more work to do.
|
226
|
-
def test_evaliterate
|
227
|
-
interp, scope, source = mkclassframing
|
228
|
-
|
229
|
-
# Create a top-level definition that creates a builtin object
|
230
|
-
interp.newdefine("one", :arguments => [%w{owner}],
|
231
|
-
:code => AST::ASTArray.new(:children => [
|
232
|
-
resourcedef("file", varref("name"),
|
233
|
-
"owner" => varref("owner")
|
234
|
-
)
|
235
|
-
])
|
236
|
-
)
|
237
|
-
|
238
|
-
# Create another definition to call that one
|
239
|
-
interp.newdefine("two", :arguments => [%w{owner}],
|
240
|
-
:code => AST::ASTArray.new(:children => [
|
241
|
-
resourcedef("one", varref("name"),
|
242
|
-
"owner" => varref("owner")
|
243
|
-
)
|
244
|
-
])
|
245
|
-
)
|
246
|
-
|
247
|
-
# And then a third
|
248
|
-
interp.newdefine("three", :arguments => [%w{owner}],
|
249
|
-
:code => AST::ASTArray.new(:children => [
|
250
|
-
resourcedef("two", varref("name"),
|
251
|
-
"owner" => varref("owner")
|
252
|
-
)
|
253
|
-
])
|
254
|
-
)
|
255
|
-
|
256
|
-
# And create a definition that creates a virtual resource
|
257
|
-
interp.newdefine("virtualizer", :arguments => [%w{owner}],
|
258
|
-
:code => AST::ASTArray.new(:children => [
|
259
|
-
virt_resourcedef("one", varref("name"),
|
260
|
-
"owner" => varref("owner")
|
261
|
-
)
|
262
|
-
])
|
263
|
-
)
|
264
|
-
|
265
|
-
# Now create an instance of three
|
266
|
-
three = Puppet::Parser::Resource.new(
|
267
|
-
:type => "three", :title => "one",
|
268
|
-
:scope => scope, :source => source,
|
269
|
-
:params => paramify(source, :owner => "root")
|
270
|
-
)
|
271
|
-
scope.setresource(three)
|
272
|
-
|
273
|
-
# An instance of the virtualizer
|
274
|
-
virt = Puppet::Parser::Resource.new(
|
275
|
-
:type => "virtualizer", :title => "two",
|
276
|
-
:scope => scope, :source => source,
|
277
|
-
:params => paramify(source, :owner => "root")
|
278
|
-
)
|
279
|
-
scope.setresource(virt)
|
280
|
-
|
281
|
-
# And a virtual instance of three
|
282
|
-
virt_three = Puppet::Parser::Resource.new(
|
283
|
-
:type => "three", :title => "three",
|
284
|
-
:scope => scope, :source => source,
|
285
|
-
:params => paramify(source, :owner => "root")
|
286
|
-
)
|
287
|
-
virt_three.virtual = true
|
288
|
-
scope.setresource(virt_three)
|
289
|
-
|
290
|
-
# Create a normal, virtual resource
|
291
|
-
plainvirt = Puppet::Parser::Resource.new(
|
292
|
-
:type => "user", :title => "five",
|
293
|
-
:scope => scope, :source => source,
|
294
|
-
:params => paramify(source, :uid => "root")
|
295
|
-
)
|
296
|
-
plainvirt.virtual = true
|
297
|
-
scope.setresource(plainvirt)
|
298
|
-
|
299
|
-
# Now create some collections for our virtual resources
|
300
|
-
%w{Three[three] One[two]}.each do |ref|
|
301
|
-
coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :virtual)
|
302
|
-
coll.resources = [ref]
|
303
|
-
scope.newcollection(coll)
|
304
|
-
end
|
305
|
-
|
306
|
-
# And create a generic user collector for our plain resource
|
307
|
-
coll = Puppet::Parser::Collector.new(scope, "user", nil, nil, :virtual)
|
308
|
-
scope.newcollection(coll)
|
309
|
-
|
310
|
-
ret = nil
|
311
|
-
assert_nothing_raised do
|
312
|
-
ret = scope.unevaluated
|
313
|
-
end
|
314
|
-
|
315
|
-
|
316
|
-
assert_instance_of(Array, ret)
|
317
|
-
assert_equal(3, ret.length,
|
318
|
-
"did not get the correct number of unevaled resources")
|
319
|
-
|
320
|
-
# Now translate the whole tree
|
321
|
-
assert_nothing_raised do
|
322
|
-
Timeout::timeout(2) do
|
323
|
-
interp.evaliterate(scope)
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
# Now make sure we've got all of our files
|
328
|
-
%w{one two three}.each do |name|
|
329
|
-
file = scope.findresource("File[%s]" % name)
|
330
|
-
assert(file, "Could not find file %s" % name)
|
331
|
-
|
332
|
-
assert_equal("root", file[:owner])
|
333
|
-
assert(! file.virtual?, "file %s is still virtual" % name)
|
334
|
-
end
|
335
|
-
|
336
|
-
# Now make sure we found the user
|
337
|
-
assert(! plainvirt.virtual?, "user was not realized")
|
338
|
-
end
|
339
|
-
|
340
|
-
# Make sure we fail if there are any leftover overrides to perform.
|
341
|
-
# This would normally mean that someone is trying to override an object
|
342
|
-
# that does not exist.
|
343
|
-
def test_failonleftovers
|
344
|
-
interp, scope, source = mkclassframing
|
345
|
-
|
346
|
-
# Make sure we don't fail, since there are no overrides
|
347
|
-
assert_nothing_raised do
|
348
|
-
interp.failonleftovers(scope)
|
349
|
-
end
|
350
|
-
|
351
|
-
# Add an override, and make sure it causes a failure
|
352
|
-
over1 = mkresource :scope => scope, :source => source,
|
353
|
-
:params => {:one => "yay"}
|
354
|
-
|
355
|
-
scope.setoverride(over1)
|
356
|
-
|
357
|
-
assert_raise(Puppet::ParseError) do
|
358
|
-
interp.failonleftovers(scope)
|
359
|
-
end
|
360
|
-
|
361
|
-
# Make a new scope to test leftover collections
|
362
|
-
scope = mkscope :interp => interp
|
363
|
-
interp.meta_def(:check_resource_collections) do
|
364
|
-
raise ArgumentError, "yep"
|
365
|
-
end
|
366
|
-
|
367
|
-
assert_raise(ArgumentError, "did not call check_resource_colls") do
|
368
|
-
interp.failonleftovers(scope)
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
def test_evalnode
|
373
|
-
interp = mkinterp
|
374
|
-
interp.usenodes = false
|
375
|
-
scope = Parser::Scope.new(:interp => interp)
|
376
|
-
facts = Facter.to_hash
|
377
|
-
|
378
|
-
# First make sure we get no failures when client is nil
|
379
|
-
assert_nothing_raised do
|
380
|
-
interp.evalnode(nil, scope, facts)
|
381
|
-
end
|
382
|
-
|
383
|
-
# Now define a node
|
384
|
-
interp.newnode "mynode", :code => AST::ASTArray.new(:children => [
|
385
|
-
resourcedef("file", "/tmp/testing", "owner" => "root")
|
386
|
-
])
|
387
|
-
|
388
|
-
# Eval again, and make sure it does nothing
|
389
|
-
assert_nothing_raised do
|
390
|
-
interp.evalnode("mynode", scope, facts)
|
391
|
-
end
|
392
|
-
|
393
|
-
assert_nil(scope.findresource("File[/tmp/testing]"),
|
394
|
-
"Eval'ed node with nodes off")
|
395
|
-
|
396
|
-
# Now enable usenodes and make sure it works.
|
397
|
-
interp.usenodes = true
|
398
|
-
assert_nothing_raised do
|
399
|
-
interp.evalnode("mynode", scope, facts)
|
400
|
-
end
|
401
|
-
file = scope.findresource("File[/tmp/testing]")
|
402
|
-
|
403
|
-
assert_instance_of(Puppet::Parser::Resource, file,
|
404
|
-
"Could not find file")
|
405
|
-
end
|
406
|
-
|
407
|
-
# This is mostly used for the cfengine module
|
408
|
-
def test_specificclasses
|
409
|
-
interp = mkinterp :Classes => %w{klass1 klass2}, :UseNodes => false
|
410
|
-
|
411
|
-
# Make sure it's not a failure to be missing classes, since
|
412
|
-
# we're using the cfengine class list, which is huge.
|
413
|
-
assert_nothing_raised do
|
414
|
-
interp.evaluate(nil, {})
|
415
|
-
end
|
416
|
-
|
417
|
-
interp.newclass("klass1", :code => AST::ASTArray.new(:children => [
|
418
|
-
resourcedef("file", "/tmp/klass1", "owner" => "root")
|
419
|
-
]))
|
420
|
-
interp.newclass("klass2", :code => AST::ASTArray.new(:children => [
|
421
|
-
resourcedef("file", "/tmp/klass2", "owner" => "root")
|
422
|
-
]))
|
423
|
-
|
424
|
-
ret = nil
|
425
|
-
assert_nothing_raised do
|
426
|
-
ret = interp.evaluate(nil, {})
|
427
|
-
end
|
428
|
-
|
429
|
-
found = ret.flatten.collect do |res| res.name end
|
430
|
-
|
431
|
-
assert(found.include?("/tmp/klass1"), "Did not evaluate klass1")
|
432
|
-
assert(found.include?("/tmp/klass2"), "Did not evaluate klass2")
|
433
|
-
end
|
434
|
-
|
435
|
-
def mk_node_mapper
|
436
|
-
# First, make sure our nodesearch command works as we expect
|
437
|
-
# Make a nodemapper
|
438
|
-
mapper = tempfile()
|
439
|
-
ruby = %x{which ruby}.chomp
|
440
|
-
File.open(mapper, "w") { |f|
|
441
|
-
f.puts "#!#{ruby}
|
442
|
-
require 'yaml'
|
443
|
-
name = ARGV[0].chomp
|
444
|
-
result = {}
|
445
|
-
|
446
|
-
if name =~ /a/
|
447
|
-
result[:parameters] = {'one' => ARGV[0] + '1', 'two' => ARGV[0] + '2'}
|
448
|
-
end
|
449
|
-
|
450
|
-
if name =~ /p/
|
451
|
-
result['classes'] = [1,2,3].collect { |n| ARGV[0] + n.to_s }
|
452
|
-
end
|
453
|
-
|
454
|
-
puts YAML.dump(result)
|
455
|
-
"
|
456
|
-
}
|
457
|
-
File.chmod(0755, mapper)
|
458
|
-
mapper
|
459
|
-
end
|
460
|
-
|
461
|
-
def test_nodesearch_external
|
462
|
-
interp = mkinterp
|
463
|
-
|
464
|
-
mapper = mk_node_mapper
|
465
|
-
# Make sure it gives the right response
|
466
|
-
assert_equal({'classes' => %w{apple1 apple2 apple3}, :parameters => {"one" => "apple1", "two" => "apple2"}},
|
467
|
-
YAML.load(%x{#{mapper} apple}))
|
468
|
-
|
469
|
-
# First make sure we get nil back by default
|
470
|
-
assert_nothing_raised {
|
471
|
-
assert_nil(interp.nodesearch_external("apple"),
|
472
|
-
"Interp#nodesearch_external defaulted to a non-nil response")
|
473
|
-
}
|
474
|
-
assert_nothing_raised { Puppet[:external_nodes] = mapper }
|
475
|
-
|
476
|
-
node = nil
|
477
|
-
# Both 'a' and 'p', so we get classes and parameters
|
478
|
-
assert_nothing_raised { node = interp.nodesearch_external("apple") }
|
479
|
-
assert_equal("apple", node.name, "node name was not set correctly for apple")
|
480
|
-
assert_equal(%w{apple1 apple2 apple3}, node.classes, "node classes were not set correctly for apple")
|
481
|
-
assert_equal( {"one" => "apple1", "two" => "apple2"}, node.parameters, "node parameters were not set correctly for apple")
|
482
|
-
|
483
|
-
# A 'p' but no 'a', so we only get classes
|
484
|
-
assert_nothing_raised { node = interp.nodesearch_external("plum") }
|
485
|
-
assert_equal("plum", node.name, "node name was not set correctly for plum")
|
486
|
-
assert_equal(%w{plum1 plum2 plum3}, node.classes, "node classes were not set correctly for plum")
|
487
|
-
assert_equal({}, node.parameters, "node parameters were not set correctly for plum")
|
488
|
-
|
489
|
-
# An 'a' but no 'p', so we only get parameters.
|
490
|
-
assert_nothing_raised { node = interp.nodesearch_external("guava")} # no p's, thus no classes
|
491
|
-
assert_equal("guava", node.name, "node name was not set correctly for guava")
|
492
|
-
assert_equal([], node.classes, "node classes were not set correctly for guava")
|
493
|
-
assert_equal({"one" => "guava1", "two" => "guava2"}, node.parameters, "node parameters were not set correctly for guava")
|
494
|
-
|
495
|
-
assert_nothing_raised { node = interp.nodesearch_external("honeydew")} # neither, thus nil
|
496
|
-
assert_nil(node)
|
497
|
-
end
|
498
|
-
|
499
|
-
# A wrapper test, to make sure we're correctly calling the external search method.
|
500
|
-
def test_nodesearch_external_functional
|
501
|
-
mapper = mk_node_mapper
|
502
|
-
|
503
|
-
Puppet[:external_nodes] = mapper
|
504
|
-
interp = mkinterp
|
505
|
-
|
506
|
-
node = nil
|
507
|
-
assert_nothing_raised do
|
508
|
-
node = interp.nodesearch("apple")
|
509
|
-
end
|
510
|
-
assert_instance_of(NodeDef, node, "did not create node")
|
511
|
-
end
|
512
|
-
|
513
|
-
def test_check_resource_collections
|
514
|
-
interp = mkinterp
|
515
|
-
scope = mkscope :interp => interp
|
516
|
-
coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :virtual)
|
517
|
-
coll.resources = ["File[/tmp/virtual1]", "File[/tmp/virtual2]"]
|
518
|
-
scope.newcollection(coll)
|
519
|
-
|
520
|
-
assert_raise(Puppet::ParseError, "Did not fail on remaining resource colls") do
|
521
|
-
interp.check_resource_collections(scope)
|
522
|
-
end
|
523
|
-
end
|
524
|
-
|
525
|
-
def test_nodedef
|
526
|
-
interp = mkinterp
|
527
|
-
interp.newclass("base")
|
528
|
-
interp.newclass("sub", :parent => "base")
|
529
|
-
interp.newclass("other")
|
530
|
-
|
531
|
-
node = nil
|
532
|
-
assert_nothing_raised("Could not create a node definition") do
|
533
|
-
node = NodeDef.new :name => "yay", :classes => "sub", :parameters => {"one" => "two", "three" => "four"}
|
534
|
-
end
|
535
|
-
|
536
|
-
scope = mkscope :interp => interp
|
537
|
-
assert_nothing_raised("Could not evaluate the node definition") do
|
538
|
-
node.evaluate(:scope => scope)
|
539
|
-
end
|
540
|
-
|
541
|
-
assert_equal("two", scope.lookupvar("one"), "NodeDef did not set variable")
|
542
|
-
assert_equal("four", scope.lookupvar("three"), "NodeDef did not set variable")
|
543
|
-
|
544
|
-
assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
|
545
|
-
assert(scope.classlist.include?("base"), "NodeDef did not evaluate base class")
|
546
|
-
|
547
|
-
# Now try a node def with multiple classes
|
548
|
-
assert_nothing_raised("Could not create a node definition") do
|
549
|
-
node = NodeDef.new :name => "yay", :classes => %w{sub other base}, :parameters => {"one" => "two", "three" => "four"}
|
550
|
-
end
|
551
|
-
|
552
|
-
scope = mkscope :interp => interp
|
553
|
-
assert_nothing_raised("Could not evaluate the node definition") do
|
554
|
-
node.evaluate(:scope => scope)
|
555
|
-
end
|
556
|
-
|
557
|
-
assert_equal("two", scope.lookupvar("one"), "NodeDef did not set variable")
|
558
|
-
assert_equal("four", scope.lookupvar("three"), "NodeDef did not set variable")
|
559
|
-
|
560
|
-
assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
|
561
|
-
assert(scope.classlist.include?("other"), "NodeDef did not evaluate other class")
|
562
|
-
|
563
|
-
# And a node def with no params
|
564
|
-
assert_nothing_raised("Could not create a node definition with no params") do
|
565
|
-
node = NodeDef.new :name => "yay", :classes => %w{sub other base}
|
566
|
-
end
|
567
|
-
|
568
|
-
scope = mkscope :interp => interp
|
569
|
-
assert_nothing_raised("Could not evaluate the node definition") do
|
570
|
-
node.evaluate(:scope => scope)
|
571
|
-
end
|
572
|
-
|
573
|
-
assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
|
574
|
-
assert(scope.classlist.include?("other"), "NodeDef did not evaluate other class")
|
575
|
-
|
576
|
-
# Now make sure nodedef doesn't fail when some classes are not defined (#687).
|
577
|
-
assert_nothing_raised("Could not create a node definition with some invalid classes") do
|
578
|
-
node = NodeDef.new :name => "yay", :classes => %w{base unknown}
|
579
|
-
end
|
580
|
-
|
581
|
-
scope = mkscope :interp => interp
|
582
|
-
assert_nothing_raised("Could not evaluate the node definition with some invalid classes") do
|
583
|
-
node.evaluate(:scope => scope)
|
584
|
-
end
|
585
|
-
|
586
|
-
assert(scope.classlist.include?("base"), "NodeDef did not evaluate class")
|
587
|
-
end
|
588
|
-
|
589
|
-
# This can stay in the main test suite because it doesn't actually use ldapsearch,
|
590
|
-
# it just overrides the method so it behaves as though it were hitting ldap.
|
591
|
-
def test_ldapnodes
|
592
|
-
interp = mkinterp
|
593
|
-
|
594
|
-
nodetable = {}
|
595
|
-
|
596
|
-
# Override the ldapsearch definition, so we don't have to actually set it up.
|
597
|
-
interp.meta_def(:ldapsearch) do |name|
|
598
|
-
nodetable[name]
|
599
|
-
end
|
600
|
-
|
601
|
-
# Make sure we get nothing for nonexistent hosts
|
602
|
-
node = nil
|
603
|
-
assert_nothing_raised do
|
604
|
-
node = interp.nodesearch_ldap("nosuchhost")
|
605
|
-
end
|
606
|
-
|
607
|
-
assert_nil(node, "Got a node for a non-existent host")
|
608
|
-
|
609
|
-
# Now add a base node with some classes and parameters
|
610
|
-
nodetable["base"] = [nil, %w{one two}, {"base" => "true"}]
|
611
|
-
|
612
|
-
assert_nothing_raised do
|
613
|
-
node = interp.nodesearch_ldap("base")
|
614
|
-
end
|
615
|
-
|
616
|
-
assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
|
617
|
-
assert_equal("base", node.name, "node name was not set")
|
618
|
-
|
619
|
-
assert_equal(%w{one two}, node.classes, "node classes were not set")
|
620
|
-
assert_equal({"base" => "true"}, node.parameters, "node parameters were not set")
|
621
|
-
|
622
|
-
# Now use a different with this as the base
|
623
|
-
nodetable["middle"] = ["base", %w{three}, {"center" => "boo"}]
|
624
|
-
assert_nothing_raised do
|
625
|
-
node = interp.nodesearch_ldap("middle")
|
626
|
-
end
|
627
|
-
|
628
|
-
assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
|
629
|
-
assert_equal("middle", node.name, "node name was not set")
|
630
|
-
|
631
|
-
assert_equal(%w{one two three}.sort, node.classes.sort, "node classes were not set correctly with a parent node")
|
632
|
-
assert_equal({"base" => "true", "center" => "boo"}, node.parameters, "node parameters were not set correctly with a parent node")
|
633
|
-
|
634
|
-
# And one further, to make sure we fully recurse
|
635
|
-
nodetable["top"] = ["middle", %w{four five}, {"master" => "far"}]
|
636
|
-
assert_nothing_raised do
|
637
|
-
node = interp.nodesearch_ldap("top")
|
638
|
-
end
|
639
|
-
|
640
|
-
assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
|
641
|
-
assert_equal("top", node.name, "node name was not set")
|
642
|
-
|
643
|
-
assert_equal(%w{one two three four five}.sort, node.classes.sort, "node classes were not set correctly with the top node")
|
644
|
-
assert_equal({"base" => "true", "center" => "boo", "master" => "far"}, node.parameters, "node parameters were not set correctly with the top node")
|
645
|
-
end
|
646
|
-
|
647
|
-
# Make sure that reparsing is atomic -- failures don't cause a broken state, and we aren't subject
|
648
|
-
# to race conditions if someone contacts us while we're reparsing.
|
649
|
-
def test_atomic_reparsing
|
650
|
-
Puppet[:filetimeout] = -10
|
651
|
-
file = tempfile
|
652
|
-
File.open(file, "w") { |f| f.puts %{file { '/tmp': ensure => directory }} }
|
653
|
-
interp = mkinterp :Manifest => file, :UseNodes => false
|
654
|
-
|
655
|
-
assert_nothing_raised("Could not compile the first time") do
|
656
|
-
interp.run("yay", {})
|
657
|
-
end
|
658
|
-
|
659
|
-
oldparser = interp.send(:instance_variable_get, "@parser")
|
660
|
-
|
661
|
-
# Now add a syntax failure
|
662
|
-
File.open(file, "w") { |f| f.puts %{file { /tmp: ensure => directory }} }
|
663
|
-
assert_nothing_raised("Could not compile the first time") do
|
664
|
-
interp.run("yay", {})
|
665
|
-
end
|
666
|
-
|
667
|
-
# And make sure the old parser is still there
|
668
|
-
newparser = interp.send(:instance_variable_get, "@parser")
|
669
|
-
assert_equal(oldparser.object_id, newparser.object_id, "Failed parser still replaced existing parser")
|
670
|
-
end
|
671
|
-
end
|
672
|
-
|
673
|
-
class LdapNodeTest < PuppetTest::TestCase
|
674
|
-
include PuppetTest
|
675
|
-
include PuppetTest::ServerTest
|
676
|
-
include PuppetTest::ParserTesting
|
677
|
-
include PuppetTest::ResourceTesting
|
678
|
-
AST = Puppet::Parser::AST
|
679
|
-
NodeDef = Puppet::Parser::Interpreter::NodeDef
|
680
|
-
confine "LDAP is not available" => Puppet.features.ldap?
|
681
|
-
confine "No LDAP test data for networks other than Luke's" => Facter.value(:domain) == "madstop.com"
|
682
|
-
def ldapconnect
|
683
|
-
|
684
|
-
@ldap = LDAP::Conn.new("ldap", 389)
|
685
|
-
@ldap.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )
|
686
|
-
@ldap.simple_bind("", "")
|
687
|
-
|
688
|
-
return @ldap
|
689
|
-
end
|
690
|
-
|
691
|
-
def ldaphost(name)
|
692
|
-
node = NodeDef.new(:name => name)
|
693
|
-
parent = nil
|
694
|
-
found = false
|
695
|
-
@ldap.search( "ou=hosts, dc=madstop, dc=com", 2,
|
696
|
-
"(&(objectclass=puppetclient)(cn=%s))" % name
|
697
|
-
) do |entry|
|
698
|
-
node.classes = entry.vals("puppetclass") || []
|
699
|
-
node.parameters = entry.to_hash.inject({}) do |hash, ary|
|
700
|
-
if ary[1].length == 1
|
701
|
-
hash[ary[0]] = ary[1].shift
|
702
|
-
else
|
703
|
-
hash[ary[0]] = ary[1]
|
704
|
-
end
|
705
|
-
hash
|
706
|
-
end
|
707
|
-
parent = node.parameters["parentnode"]
|
708
|
-
found = true
|
709
|
-
end
|
710
|
-
raise "Could not find node %s" % name unless found
|
711
|
-
|
712
|
-
return node, parent
|
713
|
-
end
|
714
|
-
|
715
|
-
def test_ldapsearch
|
716
|
-
Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
|
717
|
-
Puppet[:ldapnodes] = true
|
718
|
-
|
719
|
-
ldapconnect()
|
720
|
-
|
721
|
-
interp = mkinterp :NodeSources => [:ldap, :code]
|
722
|
-
|
723
|
-
# Make sure we get nil and nil back when we search for something missing
|
724
|
-
parent, classes, parameters = nil
|
725
|
-
assert_nothing_raised do
|
726
|
-
parent, classes, parameters = interp.ldapsearch("nosuchhost")
|
727
|
-
end
|
728
|
-
|
729
|
-
assert_nil(parent, "Got a parent for a non-existent host")
|
730
|
-
assert_nil(classes, "Got classes for a non-existent host")
|
731
|
-
|
732
|
-
# Make sure we can find 'culain' in ldap
|
733
|
-
assert_nothing_raised do
|
734
|
-
parent, classes, parameters = interp.ldapsearch("culain")
|
735
|
-
end
|
736
|
-
|
737
|
-
node, realparent = ldaphost("culain")
|
738
|
-
assert_equal(realparent, parent, "did not get correct parent node from ldap")
|
739
|
-
assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
|
740
|
-
assert_equal(node.parameters, parameters, "did not get correct ldap parameters from ldap")
|
741
|
-
|
742
|
-
# Now compare when we specify the attributes to get.
|
743
|
-
Puppet[:ldapattrs] = "cn"
|
744
|
-
assert_nothing_raised do
|
745
|
-
parent, classes, parameters = interp.ldapsearch("culain")
|
746
|
-
end
|
747
|
-
assert_equal(realparent, parent, "did not get correct parent node from ldap")
|
748
|
-
assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
|
749
|
-
|
750
|
-
list = %w{cn puppetclass parentnode dn}
|
751
|
-
should = node.parameters.inject({}) { |h, a| h[a[0]] = a[1] if list.include?(a[0]); h }
|
752
|
-
assert_equal(should, parameters, "did not get correct ldap parameters from ldap")
|
753
|
-
end
|
754
|
-
end
|
755
|
-
|
756
|
-
class LdapReconnectTests < PuppetTest::TestCase
|
757
|
-
include PuppetTest
|
758
|
-
include PuppetTest::ServerTest
|
759
|
-
include PuppetTest::ParserTesting
|
760
|
-
include PuppetTest::ResourceTesting
|
761
|
-
AST = Puppet::Parser::AST
|
762
|
-
NodeDef = Puppet::Parser::Interpreter::NodeDef
|
763
|
-
confine "Not running on culain as root" => (Puppet::Util::SUIDManager.uid == 0 and Facter.value("hostname") == "culain")
|
764
|
-
|
765
|
-
def test_ldapreconnect
|
766
|
-
Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
|
767
|
-
Puppet[:ldapnodes] = true
|
768
|
-
|
769
|
-
interp = nil
|
770
|
-
assert_nothing_raised {
|
771
|
-
interp = Puppet::Parser::Interpreter.new(
|
772
|
-
:Manifest => mktestmanifest()
|
773
|
-
)
|
774
|
-
}
|
775
|
-
hostname = "culain.madstop.com"
|
776
|
-
|
777
|
-
# look for our host
|
778
|
-
assert_nothing_raised {
|
779
|
-
parent, classes = interp.nodesearch_ldap(hostname)
|
780
|
-
}
|
781
|
-
|
782
|
-
# Now restart ldap
|
783
|
-
system("/etc/init.d/slapd restart 2>/dev/null >/dev/null")
|
784
|
-
sleep(1)
|
785
|
-
|
786
|
-
# and look again
|
787
|
-
assert_nothing_raised {
|
788
|
-
parent, classes = interp.nodesearch_ldap(hostname)
|
789
|
-
}
|
790
|
-
|
791
|
-
# Now stop ldap
|
792
|
-
system("/etc/init.d/slapd stop 2>/dev/null >/dev/null")
|
793
|
-
cleanup do
|
794
|
-
system("/etc/init.d/slapd start 2>/dev/null >/dev/null")
|
795
|
-
end
|
796
|
-
|
797
|
-
# And make sure we actually fail here
|
798
|
-
assert_raise(Puppet::Error) {
|
799
|
-
parent, classes = interp.nodesearch_ldap(hostname)
|
800
|
-
}
|
801
|
-
end
|
802
|
-
end
|
803
|
-
|
804
|
-
# $Id: interpreter.rb 2742 2007-08-03 23:49:53Z luke $
|