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
@@ -1,4 +1,3 @@
|
|
1
|
-
# Grr
|
2
1
|
require 'puppet/util/autoload'
|
3
2
|
require 'puppet/parser/scope'
|
4
3
|
|
@@ -109,7 +108,10 @@ module Functions
|
|
109
108
|
|
110
109
|
# Include the specified classes
|
111
110
|
newfunction(:include, :doc => "Evaluate one or more classes.") do |vals|
|
112
|
-
|
111
|
+
vals = [vals] unless vals.is_a?(Array)
|
112
|
+
|
113
|
+
# The 'false' disables lazy evaluation.
|
114
|
+
klasses = compile.evaluate_classes(vals, self, false)
|
113
115
|
|
114
116
|
missing = vals.find_all do |klass|
|
115
117
|
! klasses.include?(klass)
|
@@ -135,7 +137,7 @@ module Functions
|
|
135
137
|
newfunction(:tag, :doc => "Add the specified tags to the containing class
|
136
138
|
or definition. All contained objects will then acquire that tag, also.
|
137
139
|
") do |vals|
|
138
|
-
self.tag(*vals)
|
140
|
+
self.resource.tag(*vals)
|
139
141
|
end
|
140
142
|
|
141
143
|
# Test whether a given tag is set. This functions as a big OR -- if any of the
|
@@ -144,11 +146,12 @@ module Functions
|
|
144
146
|
tells you whether the current container is tagged with the specified tags.
|
145
147
|
The tags are ANDed, so that all of the specified tags must be included for
|
146
148
|
the function to return true.") do |vals|
|
147
|
-
|
149
|
+
configtags = compile.catalog.tags
|
150
|
+
resourcetags = resource.tags
|
148
151
|
|
149
152
|
retval = true
|
150
153
|
vals.each do |val|
|
151
|
-
unless
|
154
|
+
unless configtags.include?(val) or resourcetags.include?(val)
|
152
155
|
retval = false
|
153
156
|
break
|
154
157
|
end
|
@@ -199,11 +202,9 @@ module Functions
|
|
199
202
|
end
|
200
203
|
|
201
204
|
newfunction(:template, :type => :rvalue, :doc => "Evaluate a template and
|
202
|
-
return its value. See `the templating docs
|
205
|
+
return its value. See `the templating docs </trac/puppet/wiki/PuppetTemplating>`_
|
203
206
|
for more information. Note that if multiple templates are specified, their
|
204
207
|
output is all concatenated and returned as the output of the function.
|
205
|
-
|
206
|
-
.. _the templating docs: /trac/puppet/wiki/PuppetTemplating
|
207
208
|
") do |vals|
|
208
209
|
require 'erb'
|
209
210
|
|
@@ -234,7 +235,7 @@ module Functions
|
|
234
235
|
vals = [vals] unless vals.is_a?(Array)
|
235
236
|
coll.resources = vals
|
236
237
|
|
237
|
-
|
238
|
+
compile.add_collection(coll)
|
238
239
|
end
|
239
240
|
|
240
241
|
newfunction(:search, :doc => "Add another namespace for this class to search.
|
@@ -303,4 +304,3 @@ module Functions
|
|
303
304
|
end
|
304
305
|
end
|
305
306
|
|
306
|
-
# $Id: functions.rb 2681 2007-07-12 14:35:45Z luke $
|
@@ -3,315 +3,33 @@ require 'timeout'
|
|
3
3
|
require 'puppet/rails'
|
4
4
|
require 'puppet/util/methodhelper'
|
5
5
|
require 'puppet/parser/parser'
|
6
|
+
require 'puppet/parser/compile'
|
6
7
|
require 'puppet/parser/scope'
|
7
8
|
|
8
|
-
# The interpreter
|
9
|
-
#
|
10
|
-
#
|
9
|
+
# The interpreter is a very simple entry-point class that
|
10
|
+
# manages the existence of the parser (e.g., replacing it
|
11
|
+
# when files are reparsed). You can feed it a node and
|
12
|
+
# get the node's catalog back.
|
11
13
|
class Puppet::Parser::Interpreter
|
12
|
-
class NodeDef
|
13
|
-
include Puppet::Util::MethodHelper
|
14
|
-
attr_accessor :name, :classes, :parameters, :source
|
15
|
-
|
16
|
-
def evaluate(options)
|
17
|
-
begin
|
18
|
-
parameters.each do |param, value|
|
19
|
-
# Don't try to override facts with these parameters
|
20
|
-
options[:scope].setvar(param, value) unless options[:scope].lookupvar(param, false) != :undefined
|
21
|
-
end
|
22
|
-
|
23
|
-
# Also, set the 'nodename', since it might not be obvious how the node was looked up
|
24
|
-
options[:scope].setvar("nodename", @name) unless options[:scope].lookupvar(@nodename, false) != :undefined
|
25
|
-
rescue => detail
|
26
|
-
raise Puppet::ParseError, "Could not set parameters for %s: %s" % [name, detail]
|
27
|
-
end
|
28
|
-
|
29
|
-
# Then evaluate the classes.
|
30
|
-
begin
|
31
|
-
options[:scope].function_include(classes.find_all { |c| options[:scope].findclass(c) })
|
32
|
-
rescue => detail
|
33
|
-
puts detail.backtrace
|
34
|
-
raise Puppet::ParseError, "Could not evaluate classes for %s: %s" % [name, detail]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def initialize(args)
|
39
|
-
set_options(args)
|
40
|
-
|
41
|
-
raise Puppet::DevError, "NodeDefs require names" unless self.name
|
42
|
-
|
43
|
-
if self.classes.is_a?(String)
|
44
|
-
@classes = [@classes]
|
45
|
-
else
|
46
|
-
@classes ||= []
|
47
|
-
end
|
48
|
-
@parameters ||= {}
|
49
|
-
end
|
50
|
-
|
51
|
-
def safeevaluate(args)
|
52
|
-
evaluate(args)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
14
|
include Puppet::Util
|
57
15
|
|
58
16
|
attr_accessor :usenodes
|
59
17
|
|
60
|
-
class << self
|
61
|
-
attr_writer :ldap
|
62
|
-
end
|
63
|
-
|
64
|
-
# just shorten the constant path a bit, using what amounts to an alias
|
65
|
-
AST = Puppet::Parser::AST
|
66
|
-
|
67
18
|
include Puppet::Util::Errors
|
68
19
|
|
69
|
-
#
|
70
|
-
|
71
|
-
|
72
|
-
unless defined? @ldap and @ldap
|
73
|
-
if Puppet[:ldapssl]
|
74
|
-
@ldap = LDAP::SSLConn.new(Puppet[:ldapserver], Puppet[:ldapport])
|
75
|
-
elsif Puppet[:ldaptls]
|
76
|
-
@ldap = LDAP::SSLConn.new(
|
77
|
-
Puppet[:ldapserver], Puppet[:ldapport], true
|
78
|
-
)
|
79
|
-
else
|
80
|
-
@ldap = LDAP::Conn.new(Puppet[:ldapserver], Puppet[:ldapport])
|
81
|
-
end
|
82
|
-
@ldap.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
|
83
|
-
@ldap.set_option(LDAP::LDAP_OPT_REFERRALS, LDAP::LDAP_OPT_ON)
|
84
|
-
@ldap.simple_bind(Puppet[:ldapuser], Puppet[:ldappassword])
|
85
|
-
end
|
86
|
-
|
87
|
-
return @ldap
|
88
|
-
end
|
89
|
-
|
90
|
-
# Make sure we don't have any remaining collections that specifically
|
91
|
-
# look for resources, because we want to consider those to be
|
92
|
-
# parse errors.
|
93
|
-
def check_resource_collections(scope)
|
94
|
-
remaining = []
|
95
|
-
scope.collections.each do |coll|
|
96
|
-
if r = coll.resources
|
97
|
-
if r.is_a?(Array)
|
98
|
-
remaining += r
|
99
|
-
else
|
100
|
-
remaining << r
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
unless remaining.empty?
|
105
|
-
raise Puppet::ParseError, "Failed to find virtual resources %s" %
|
106
|
-
remaining.join(', ')
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# Iteratively evaluate all of the objects. This finds all of the objects
|
111
|
-
# that represent definitions and evaluates the definitions appropriately.
|
112
|
-
# It also adds defaults and overrides as appropriate.
|
113
|
-
def evaliterate(scope)
|
114
|
-
count = 0
|
115
|
-
loop do
|
116
|
-
count += 1
|
117
|
-
done = true
|
118
|
-
# First perform collections, so we can collect defined types.
|
119
|
-
if coll = scope.collections and ! coll.empty?
|
120
|
-
exceptwrap do
|
121
|
-
coll.each do |c|
|
122
|
-
# Only keep the loop going if we actually successfully
|
123
|
-
# collected something.
|
124
|
-
if o = c.evaluate
|
125
|
-
done = false
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Then evaluate any defined types.
|
132
|
-
if ary = scope.unevaluated
|
133
|
-
ary.each do |resource|
|
134
|
-
resource.evaluate
|
135
|
-
end
|
136
|
-
# If we evaluated, then loop through again.
|
137
|
-
done = false
|
138
|
-
end
|
139
|
-
break if done
|
140
|
-
|
141
|
-
if count > 1000
|
142
|
-
raise Puppet::ParseError, "Got 1000 class levels, which is unsupported"
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# Evaluate a specific node.
|
148
|
-
def evalnode(client, scope, facts)
|
149
|
-
return unless self.usenodes
|
150
|
-
|
151
|
-
unless client
|
152
|
-
raise Puppet::Error,
|
153
|
-
"Cannot evaluate nodes with a nil client"
|
154
|
-
end
|
155
|
-
names = [client]
|
156
|
-
|
157
|
-
# Make sure both the fqdn and the short name of the
|
158
|
-
# host can be used in the manifest
|
159
|
-
if client =~ /\./
|
160
|
-
names << client.sub(/\..+/,'')
|
161
|
-
else
|
162
|
-
names << "#{client}.#{facts['domain']}"
|
163
|
-
end
|
164
|
-
|
165
|
-
if names.empty?
|
166
|
-
raise Puppet::Error,
|
167
|
-
"Cannot evaluate nodes with a nil client"
|
168
|
-
end
|
169
|
-
|
170
|
-
# Look up our node object.
|
171
|
-
if nodeclass = nodesearch(*names)
|
172
|
-
nodeclass.safeevaluate :scope => scope
|
173
|
-
else
|
174
|
-
raise Puppet::Error, "Could not find %s with names %s" %
|
175
|
-
[client, names.join(", ")]
|
176
|
-
end
|
20
|
+
# Determine the configuration version for a given node's environment.
|
21
|
+
def configuration_version(node)
|
22
|
+
parser(node.environment).version
|
177
23
|
end
|
178
24
|
|
179
|
-
#
|
180
|
-
def
|
181
|
-
|
182
|
-
|
183
|
-
scope.name = "top"
|
184
|
-
scope.type = "main"
|
185
|
-
|
186
|
-
scope.host = client || facts["hostname"] || Facter.value(:hostname)
|
187
|
-
|
188
|
-
classes = @classes.dup
|
189
|
-
|
190
|
-
# Okay, first things first. Set our facts.
|
191
|
-
scope.setfacts(facts)
|
192
|
-
|
193
|
-
# Everyone will always evaluate the top-level class, if there is one.
|
194
|
-
if klass = findclass("", "")
|
195
|
-
# Set the source, so objects can tell where they were defined.
|
196
|
-
scope.source = klass
|
197
|
-
klass.safeevaluate :scope => scope, :nosubscope => true
|
198
|
-
end
|
199
|
-
|
200
|
-
# Next evaluate the node. We pass the facts so they can be used
|
201
|
-
# when building the list of names for which to search.
|
202
|
-
evalnode(client, scope, facts)
|
203
|
-
|
204
|
-
# If we were passed any classes, evaluate those.
|
205
|
-
if classes
|
206
|
-
classes.each do |klass|
|
207
|
-
if klassobj = findclass("", klass)
|
208
|
-
klassobj.safeevaluate :scope => scope
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# That was the first pass evaluation. Now iteratively evaluate
|
214
|
-
# until we've gotten rid of all of everything or thrown an error.
|
215
|
-
evaliterate(scope)
|
216
|
-
|
217
|
-
# Now make sure we fail if there's anything left to do
|
218
|
-
failonleftovers(scope)
|
219
|
-
|
220
|
-
# Now finish everything. This recursively calls finish on the
|
221
|
-
# contained scopes and resources.
|
222
|
-
scope.finish
|
223
|
-
|
224
|
-
# Store everything. We need to do this before translation, because
|
225
|
-
# it operates on resources, not transobjects.
|
226
|
-
if Puppet[:storeconfigs]
|
227
|
-
args = {
|
228
|
-
:resources => scope.resources,
|
229
|
-
:name => scope.host,
|
230
|
-
:facts => facts
|
231
|
-
}
|
232
|
-
unless scope.classlist.empty?
|
233
|
-
args[:classes] = scope.classlist
|
234
|
-
end
|
235
|
-
|
236
|
-
storeconfigs(args)
|
237
|
-
end
|
238
|
-
|
239
|
-
# Now, finally, convert our scope tree + resources into a tree of
|
240
|
-
# buckets and objects.
|
241
|
-
objects = scope.translate
|
242
|
-
|
243
|
-
# Add the class list
|
244
|
-
unless scope.classlist.empty?
|
245
|
-
objects.classes = scope.classlist
|
246
|
-
end
|
247
|
-
|
248
|
-
return objects
|
249
|
-
end
|
250
|
-
|
251
|
-
# Fail if there any overrides left to perform.
|
252
|
-
def failonleftovers(scope)
|
253
|
-
overrides = scope.overrides
|
254
|
-
unless overrides.empty?
|
255
|
-
fail Puppet::ParseError,
|
256
|
-
"Could not find object(s) %s" % overrides.collect { |o|
|
257
|
-
o.ref
|
258
|
-
}.join(", ")
|
259
|
-
end
|
260
|
-
|
261
|
-
# Now check that there aren't any extra resource collections.
|
262
|
-
check_resource_collections(scope)
|
263
|
-
end
|
264
|
-
|
265
|
-
# Create proxy methods, so the scopes can call the interpreter, since
|
266
|
-
# they don't have access to the parser.
|
267
|
-
def findclass(namespace, name)
|
268
|
-
@parser.findclass(namespace, name)
|
269
|
-
end
|
270
|
-
def finddefine(namespace, name)
|
271
|
-
@parser.finddefine(namespace, name)
|
25
|
+
# evaluate our whole tree
|
26
|
+
def compile(node)
|
27
|
+
raise Puppet::ParseError, "Could not parse configuration; cannot compile" unless env_parser = parser(node.environment)
|
28
|
+
return Puppet::Parser::Compile.new(node, env_parser).compile
|
272
29
|
end
|
273
30
|
|
274
31
|
# create our interpreter
|
275
|
-
def initialize
|
276
|
-
if @code = hash[:Code]
|
277
|
-
@file = nil # to avoid warnings
|
278
|
-
elsif ! @file = hash[:Manifest]
|
279
|
-
devfail "You must provide code or a manifest"
|
280
|
-
end
|
281
|
-
|
282
|
-
if hash.include?(:UseNodes)
|
283
|
-
@usenodes = hash[:UseNodes]
|
284
|
-
else
|
285
|
-
@usenodes = true
|
286
|
-
end
|
287
|
-
|
288
|
-
|
289
|
-
if Puppet[:ldapnodes]
|
290
|
-
# Nodes in the file override nodes in ldap.
|
291
|
-
@nodesource = :ldap
|
292
|
-
elsif Puppet[:external_nodes] != "none"
|
293
|
-
@nodesource = :external
|
294
|
-
else
|
295
|
-
# By default, we only search for parsed nodes.
|
296
|
-
@nodesource = :code
|
297
|
-
end
|
298
|
-
|
299
|
-
@setup = false
|
300
|
-
|
301
|
-
# Set it to either the value or nil. This is currently only used
|
302
|
-
# by the cfengine module.
|
303
|
-
@classes = hash[:Classes] || []
|
304
|
-
|
305
|
-
@local = hash[:Local] || false
|
306
|
-
|
307
|
-
if hash.include?(:ForkSave)
|
308
|
-
@forksave = hash[:ForkSave]
|
309
|
-
else
|
310
|
-
# This is just too dangerous right now. Sorry, it's going
|
311
|
-
# to have to be slow.
|
312
|
-
@forksave = false
|
313
|
-
end
|
314
|
-
|
32
|
+
def initialize
|
315
33
|
# The class won't always be defined during testing.
|
316
34
|
if Puppet[:storeconfigs]
|
317
35
|
if Puppet.features.rails?
|
@@ -321,388 +39,52 @@ class Puppet::Parser::Interpreter
|
|
321
39
|
end
|
322
40
|
end
|
323
41
|
|
324
|
-
@
|
325
|
-
|
326
|
-
# Create our parser object
|
327
|
-
parsefiles
|
328
|
-
end
|
329
|
-
|
330
|
-
# Find the ldap node, return the class list and parent node specially,
|
331
|
-
# and everything else in a parameter hash.
|
332
|
-
def ldapsearch(node)
|
333
|
-
unless defined? @ldap and @ldap
|
334
|
-
setup_ldap()
|
335
|
-
unless @ldap
|
336
|
-
Puppet.info "Skipping ldap source; no ldap connection"
|
337
|
-
return nil
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
|
-
filter = Puppet[:ldapstring]
|
342
|
-
classattrs = Puppet[:ldapclassattrs].split("\s*,\s*")
|
343
|
-
if Puppet[:ldapattrs] == "all"
|
344
|
-
# A nil value here causes all attributes to be returned.
|
345
|
-
search_attrs = nil
|
346
|
-
else
|
347
|
-
search_attrs = classattrs + Puppet[:ldapattrs].split("\s*,\s*")
|
348
|
-
end
|
349
|
-
pattr = nil
|
350
|
-
if pattr = Puppet[:ldapparentattr]
|
351
|
-
if pattr == ""
|
352
|
-
pattr = nil
|
353
|
-
else
|
354
|
-
search_attrs << pattr unless search_attrs.nil?
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
if filter =~ /%s/
|
359
|
-
filter = filter.gsub(/%s/, node)
|
360
|
-
end
|
361
|
-
|
362
|
-
parent = nil
|
363
|
-
classes = []
|
364
|
-
parameters = nil
|
365
|
-
|
366
|
-
found = false
|
367
|
-
count = 0
|
368
|
-
|
369
|
-
begin
|
370
|
-
# We're always doing a sub here; oh well.
|
371
|
-
@ldap.search(Puppet[:ldapbase], 2, filter, search_attrs) do |entry|
|
372
|
-
found = true
|
373
|
-
if pattr
|
374
|
-
if values = entry.vals(pattr)
|
375
|
-
if values.length > 1
|
376
|
-
raise Puppet::Error,
|
377
|
-
"Node %s has more than one parent: %s" %
|
378
|
-
[node, values.inspect]
|
379
|
-
end
|
380
|
-
unless values.empty?
|
381
|
-
parent = values.shift
|
382
|
-
end
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
classattrs.each { |attr|
|
387
|
-
if values = entry.vals(attr)
|
388
|
-
values.each do |v| classes << v end
|
389
|
-
end
|
390
|
-
}
|
391
|
-
|
392
|
-
parameters = entry.to_hash.inject({}) do |hash, ary|
|
393
|
-
if ary[1].length == 1
|
394
|
-
hash[ary[0]] = ary[1].shift
|
395
|
-
else
|
396
|
-
hash[ary[0]] = ary[1]
|
397
|
-
end
|
398
|
-
hash
|
399
|
-
end
|
400
|
-
end
|
401
|
-
rescue => detail
|
402
|
-
if count == 0
|
403
|
-
# Try reconnecting to ldap
|
404
|
-
@ldap = nil
|
405
|
-
setup_ldap()
|
406
|
-
retry
|
407
|
-
else
|
408
|
-
raise Puppet::Error, "LDAP Search failed: %s" % detail
|
409
|
-
end
|
410
|
-
end
|
411
|
-
|
412
|
-
classes.flatten!
|
413
|
-
|
414
|
-
if classes.empty?
|
415
|
-
classes = nil
|
416
|
-
end
|
417
|
-
|
418
|
-
if parent or classes or parameters
|
419
|
-
return parent, classes, parameters
|
420
|
-
else
|
421
|
-
return nil
|
422
|
-
end
|
423
|
-
end
|
424
|
-
|
425
|
-
# Pass these methods through to the parser.
|
426
|
-
[:newclass, :newdefine, :newnode].each do |name|
|
427
|
-
define_method(name) do |*args|
|
428
|
-
@parser.send(name, *args)
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
# Add a new file to be checked when we're checking to see if we should be
|
433
|
-
# reparsed.
|
434
|
-
def newfile(*files)
|
435
|
-
files.each do |file|
|
436
|
-
unless file.is_a? Puppet::Util::LoadedFile
|
437
|
-
file = Puppet::Util::LoadedFile.new(file)
|
438
|
-
end
|
439
|
-
@files << file
|
440
|
-
end
|
441
|
-
end
|
442
|
-
|
443
|
-
# Search for our node in the various locations.
|
444
|
-
def nodesearch(*nodes)
|
445
|
-
nodes = nodes.collect { |n| n.to_s.downcase }
|
446
|
-
|
447
|
-
method = "nodesearch_%s" % @nodesource
|
448
|
-
# Do an inverse sort on the length, so the longest match always
|
449
|
-
# wins
|
450
|
-
nodes.sort { |a,b| b.length <=> a.length }.each do |node|
|
451
|
-
node = node.to_s if node.is_a?(Symbol)
|
452
|
-
if obj = self.send(method, node)
|
453
|
-
if obj.is_a?(AST::Node)
|
454
|
-
nsource = obj.file
|
455
|
-
else
|
456
|
-
nsource = obj.source
|
457
|
-
end
|
458
|
-
Puppet.info "Found %s in %s" % [node, nsource]
|
459
|
-
return obj
|
460
|
-
end
|
461
|
-
end
|
462
|
-
|
463
|
-
# If they made it this far, we haven't found anything, so look for a
|
464
|
-
# default node.
|
465
|
-
unless nodes.include?("default")
|
466
|
-
if defobj = self.nodesearch("default")
|
467
|
-
Puppet.notice "Using default node for %s" % [nodes[0]]
|
468
|
-
return defobj
|
469
|
-
end
|
470
|
-
end
|
471
|
-
|
472
|
-
return nil
|
473
|
-
end
|
474
|
-
|
475
|
-
# See if our node was defined in the code.
|
476
|
-
def nodesearch_code(name)
|
477
|
-
@parser.nodes[name]
|
478
|
-
end
|
479
|
-
|
480
|
-
# Look for external node definitions.
|
481
|
-
def nodesearch_external(name)
|
482
|
-
return nil unless Puppet[:external_nodes] != "none"
|
483
|
-
|
484
|
-
begin
|
485
|
-
output = Puppet::Util.execute([Puppet[:external_nodes], name])
|
486
|
-
rescue Puppet::ExecutionFailure => detail
|
487
|
-
if $?.exitstatus == 1
|
488
|
-
return nil
|
489
|
-
else
|
490
|
-
Puppet.err "Could not retrieve external node information for %s: %s" % [name, detail]
|
491
|
-
end
|
492
|
-
return nil
|
493
|
-
end
|
494
|
-
|
495
|
-
if output =~ /\A\s*\Z/ # all whitespace
|
496
|
-
Puppet.debug "Empty response for %s from external node source" % name
|
497
|
-
return nil
|
498
|
-
end
|
499
|
-
|
500
|
-
begin
|
501
|
-
result = YAML.load(output).inject({}) { |hash, data| hash[symbolize(data[0])] = data[1]; hash }
|
502
|
-
rescue => detail
|
503
|
-
raise Puppet::Error, "Could not load external node results for %s: %s" % [name, detail]
|
504
|
-
end
|
505
|
-
|
506
|
-
node_args = {:source => "external node source", :name => name}
|
507
|
-
set = false
|
508
|
-
[:parameters, :classes].each do |param|
|
509
|
-
if value = result[param]
|
510
|
-
node_args[param] = value
|
511
|
-
set = true
|
512
|
-
end
|
513
|
-
end
|
514
|
-
|
515
|
-
if set
|
516
|
-
return NodeDef.new(node_args)
|
517
|
-
else
|
518
|
-
return nil
|
519
|
-
end
|
520
|
-
end
|
521
|
-
|
522
|
-
# Look for our node in ldap.
|
523
|
-
def nodesearch_ldap(node)
|
524
|
-
unless ary = ldapsearch(node)
|
525
|
-
return nil
|
526
|
-
end
|
527
|
-
parent, classes, parameters = ary
|
528
|
-
|
529
|
-
while parent
|
530
|
-
parent, tmpclasses, tmpparams = ldapsearch(parent)
|
531
|
-
classes += tmpclasses if tmpclasses
|
532
|
-
tmpparams.each do |param, value|
|
533
|
-
# Specifically test for whether it's set, so false values are handled
|
534
|
-
# correctly.
|
535
|
-
parameters[param] = value unless parameters.include?(param)
|
536
|
-
end
|
537
|
-
end
|
538
|
-
|
539
|
-
return NodeDef.new(:name => node, :classes => classes, :source => "ldap", :parameters => parameters)
|
540
|
-
end
|
541
|
-
|
542
|
-
def parsedate
|
543
|
-
parsefiles()
|
544
|
-
@parsedate
|
545
|
-
end
|
546
|
-
|
547
|
-
# evaluate our whole tree
|
548
|
-
def run(client, facts)
|
549
|
-
# We have to leave this for after initialization because there
|
550
|
-
# seems to be a problem keeping ldap open after a fork.
|
551
|
-
unless @setup
|
552
|
-
method = "setup_%s" % @nodesource.to_s
|
553
|
-
if respond_to? method
|
554
|
-
exceptwrap :type => Puppet::Error,
|
555
|
-
:message => "Could not set up node source %s" % @nodesource do
|
556
|
-
self.send(method)
|
557
|
-
end
|
558
|
-
end
|
559
|
-
end
|
560
|
-
parsefiles()
|
561
|
-
|
562
|
-
# Evaluate all of the appropriate code.
|
563
|
-
objects = evaluate(client, facts)
|
564
|
-
|
565
|
-
# And return it all.
|
566
|
-
return objects
|
567
|
-
end
|
568
|
-
|
569
|
-
# Connect to the LDAP Server
|
570
|
-
def setup_ldap
|
571
|
-
self.class.ldap = nil
|
572
|
-
unless Puppet.features.ldap?
|
573
|
-
Puppet.notice(
|
574
|
-
"Could not set up LDAP Connection: Missing ruby/ldap libraries"
|
575
|
-
)
|
576
|
-
@ldap = nil
|
577
|
-
return
|
578
|
-
end
|
579
|
-
|
580
|
-
begin
|
581
|
-
@ldap = self.class.ldap()
|
582
|
-
rescue => detail
|
583
|
-
raise Puppet::Error, "Could not connect to LDAP: %s" % detail
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
|
-
def scope
|
588
|
-
return @scope
|
42
|
+
@parsers = {}
|
589
43
|
end
|
590
44
|
|
591
45
|
private
|
592
46
|
|
593
|
-
#
|
594
|
-
def
|
595
|
-
if @files.find { |f| f.changed? }
|
596
|
-
@parsedate = Time.now.to_i
|
597
|
-
end
|
598
|
-
end
|
599
|
-
|
600
|
-
# Parse the files, generating our parse tree. This automatically
|
601
|
-
# reparses only if files are updated, so it's safe to call multiple
|
602
|
-
# times.
|
603
|
-
def parsefiles
|
604
|
-
# First check whether there are updates to any non-puppet files
|
605
|
-
# like templates. If we need to reparse, this will get quashed,
|
606
|
-
# but it needs to be done first in case there's no reparse
|
607
|
-
# but there are other file changes.
|
608
|
-
checkfiles()
|
609
|
-
|
610
|
-
# Check if the parser should reparse.
|
611
|
-
if @file
|
612
|
-
if defined? @parser
|
613
|
-
if stamp = @parser.reparse?
|
614
|
-
Puppet.notice "Reloading files"
|
615
|
-
else
|
616
|
-
return false
|
617
|
-
end
|
618
|
-
end
|
619
|
-
|
620
|
-
unless FileTest.exists?(@file)
|
621
|
-
# If we've already parsed, then we're ok.
|
622
|
-
if findclass("", "")
|
623
|
-
return
|
624
|
-
else
|
625
|
-
raise Puppet::Error, "Manifest %s must exist" % @file
|
626
|
-
end
|
627
|
-
end
|
628
|
-
end
|
629
|
-
|
630
|
-
# Create a new parser, just to keep things fresh. Don't replace our
|
631
|
-
# current parser until we know weverything works.
|
632
|
-
newparser = Puppet::Parser::Parser.new()
|
633
|
-
if @code
|
634
|
-
newparser.string = @code
|
635
|
-
else
|
636
|
-
newparser.file = @file
|
637
|
-
end
|
638
|
-
|
639
|
-
# Parsing stores all classes and defines and such in their
|
640
|
-
# various tables, so we don't worry about the return.
|
47
|
+
# Create a new parser object and pre-parse the configuration.
|
48
|
+
def create_parser(environment)
|
641
49
|
begin
|
642
|
-
|
643
|
-
|
50
|
+
parser = Puppet::Parser::Parser.new(:environment => environment)
|
51
|
+
if code = Puppet.settings.value(:code, environment) and code != ""
|
52
|
+
parser.string = code
|
644
53
|
else
|
645
|
-
|
646
|
-
|
647
|
-
end
|
648
|
-
end
|
649
|
-
# We've gotten this far, so it's ok to swap the parsers.
|
650
|
-
oldparser = @parser
|
651
|
-
@parser = newparser
|
652
|
-
if oldparser
|
653
|
-
oldparser.clear
|
54
|
+
file = Puppet.settings.value(:manifest, environment)
|
55
|
+
parser.file = file
|
654
56
|
end
|
655
|
-
|
656
|
-
|
657
|
-
@parsedate = Time.now.to_i
|
57
|
+
parser.parse
|
58
|
+
return parser
|
658
59
|
rescue => detail
|
659
|
-
|
660
|
-
|
60
|
+
msg = "Could not parse"
|
61
|
+
if environment and environment != ""
|
62
|
+
msg += " for environment %s" % environment
|
661
63
|
end
|
662
|
-
|
64
|
+
msg += ": %s" % detail.to_s
|
65
|
+
error = Puppet::Error.new(msg)
|
66
|
+
error.set_backtrace(detail.backtrace)
|
67
|
+
raise error
|
663
68
|
end
|
664
69
|
end
|
665
70
|
|
666
|
-
#
|
667
|
-
def
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
unless ActiveRecord::Base.connected?
|
674
|
-
Puppet::Rails.connect
|
675
|
-
end
|
676
|
-
|
677
|
-
# Fork the storage, since we don't need the client waiting
|
678
|
-
# on that. How do I avoid this duplication?
|
679
|
-
if @forksave
|
680
|
-
fork {
|
681
|
-
# We store all of the objects, even the collectable ones
|
682
|
-
benchmark(:info, "Stored configuration for #{hash[:name]}") do
|
683
|
-
# Try to batch things a bit, by putting them into
|
684
|
-
# a transaction
|
685
|
-
Puppet::Rails::Host.transaction do
|
686
|
-
Puppet::Rails::Host.store(hash)
|
687
|
-
end
|
688
|
-
end
|
689
|
-
}
|
690
|
-
else
|
71
|
+
# Return the parser for a specific environment.
|
72
|
+
def parser(environment)
|
73
|
+
if ! @parsers[environment] or @parsers[environment].reparse?
|
74
|
+
# This will throw an exception if it does not succeed. We only
|
75
|
+
# want to get rid of the old parser if we successfully create a new
|
76
|
+
# one.
|
691
77
|
begin
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
Puppet::Rails::Host.store(hash)
|
696
|
-
end
|
697
|
-
end
|
78
|
+
tmp = create_parser(environment)
|
79
|
+
@parsers[environment].clear if @parsers[environment]
|
80
|
+
@parsers[environment] = tmp
|
698
81
|
rescue => detail
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
82
|
+
# If a parser already exists, than assume that we logged the
|
83
|
+
# exception elsewhere and reuse the parser. If one doesn't
|
84
|
+
# exist, then reraise.
|
85
|
+
raise detail unless @parsers[environment]
|
703
86
|
end
|
704
87
|
end
|
88
|
+
@parsers[environment]
|
705
89
|
end
|
706
90
|
end
|
707
|
-
|
708
|
-
# $Id: interpreter.rb 2742 2007-08-03 23:49:53Z luke $
|