puppet 3.2.4 → 3.3.0.rc2
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/COMMITTERS.md +101 -42
- data/Gemfile +15 -4
- data/README.md +5 -1
- data/README_DEVELOPER.md +117 -54
- data/Rakefile +4 -0
- data/ext/build_defaults.yaml +3 -2
- data/ext/debian/puppet-common.manpages +33 -1
- data/ext/gentoo/init.d/puppet +1 -1
- data/ext/gentoo/init.d/puppetmaster +1 -1
- data/ext/redhat/puppet.spec.erb +0 -1
- data/install.rb +2 -1
- data/lib/hiera/backend/puppet_backend.rb +1 -1
- data/lib/puppet/application.rb +10 -9
- data/lib/puppet/application/agent.rb +87 -93
- data/lib/puppet/application/apply.rb +0 -2
- data/lib/puppet/application/device.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +41 -19
- data/lib/puppet/application/queue.rb +5 -3
- data/lib/puppet/bindings.rb +147 -0
- data/lib/puppet/configurer.rb +25 -15
- data/lib/puppet/configurer/fact_handler.rb +2 -9
- data/lib/puppet/daemon.rb +44 -33
- data/lib/puppet/defaults.rb +57 -26
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +2 -2
- data/lib/puppet/external/nagios/base.rb +1 -6
- data/lib/puppet/external/pson/common.rb +2 -2
- data/lib/puppet/external/pson/pure/generator.rb +2 -2
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/help.rb +2 -2
- data/lib/puppet/face/module/list.rb +2 -2
- data/lib/puppet/feature/rails.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +0 -1
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +20 -14
- data/lib/puppet/forge.rb +0 -32
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/errors.rb +3 -3
- data/lib/puppet/forge/repository.rb +7 -42
- data/lib/puppet/graph.rb +11 -0
- data/lib/puppet/graph/key.rb +26 -0
- data/lib/puppet/graph/prioritizer.rb +29 -0
- data/lib/puppet/graph/random_prioritizer.rb +16 -0
- data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
- data/lib/puppet/graph/relationship_graph.rb +246 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
- data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
- data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
- data/lib/puppet/indirector.rb +2 -2
- data/lib/puppet/indirector/catalog/compiler.rb +10 -7
- data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
- data/lib/puppet/indirector/certificate/rest.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +2 -2
- data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
- data/lib/puppet/indirector/facts/network_device.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
- data/lib/puppet/indirector/indirection.rb +2 -2
- data/lib/puppet/indirector/memory.rb +9 -0
- data/lib/puppet/indirector/node/ldap.rb +2 -4
- data/lib/puppet/indirector/report/processor.rb +1 -2
- data/lib/puppet/indirector/report/rest.rb +1 -1
- data/lib/puppet/indirector/request.rb +32 -10
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +31 -12
- data/lib/puppet/interface.rb +1 -1
- data/lib/puppet/interface/documentation.rb +7 -11
- data/lib/puppet/interface/option.rb +1 -1
- data/lib/puppet/interface/option_builder.rb +1 -1
- data/lib/puppet/metatype/manager.rb +2 -2
- data/lib/puppet/module.rb +7 -1
- data/lib/puppet/module_tool.rb +1 -1
- data/lib/puppet/module_tool/applications/application.rb +10 -0
- data/lib/puppet/module_tool/applications/installer.rb +6 -3
- data/lib/puppet/module_tool/dependency.rb +2 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
- data/lib/puppet/module_tool/metadata.rb +25 -13
- data/lib/puppet/module_tool/modulefile.rb +7 -7
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
- data/lib/puppet/module_tool/skeleton.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
- data/lib/puppet/network/auth_config_parser.rb +3 -0
- data/lib/puppet/network/authconfig.rb +0 -1
- data/lib/puppet/network/authorization.rb +1 -1
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/format_handler.rb +25 -114
- data/lib/puppet/network/format_support.rb +106 -0
- data/lib/puppet/network/formats.rb +10 -4
- data/lib/puppet/network/http/compression.rb +1 -1
- data/lib/puppet/network/http/connection.rb +76 -32
- data/lib/puppet/network/http/handler.rb +122 -61
- data/lib/puppet/network/http/rack/rest.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +9 -3
- data/lib/puppet/network/http_pool.rb +2 -2
- data/lib/puppet/network/resolver.rb +1 -0
- data/lib/puppet/network/server.rb +5 -81
- data/lib/puppet/node/environment.rb +256 -13
- data/lib/puppet/node/facts.rb +28 -2
- data/lib/puppet/parameter.rb +27 -18
- data/lib/puppet/parameter/boolean.rb +20 -0
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +1 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
- data/lib/puppet/parser/ast/casestatement.rb +0 -3
- data/lib/puppet/parser/ast/lambda.rb +25 -6
- data/lib/puppet/parser/ast/leaf.rb +10 -3
- data/lib/puppet/parser/ast/nop.rb +1 -1
- data/lib/puppet/parser/ast/resource_override.rb +0 -2
- data/lib/puppet/parser/compiler.rb +92 -34
- data/lib/puppet/parser/files.rb +0 -5
- data/lib/puppet/parser/functions/create_resources.rb +23 -46
- data/lib/puppet/parser/functions/each.rb +0 -2
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/foreach.rb +0 -2
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +44 -0
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/grammar.ra +0 -1
- data/lib/puppet/parser/lexer.rb +0 -1
- data/lib/puppet/parser/parser.rb +0 -1
- data/lib/puppet/parser/parser_factory.rb +3 -2
- data/lib/puppet/parser/parser_support.rb +1 -1
- data/lib/puppet/parser/relationship.rb +1 -1
- data/lib/puppet/parser/scope.rb +49 -24
- data/lib/puppet/parser/type_loader.rb +13 -18
- data/lib/puppet/pops.rb +45 -0
- data/lib/puppet/pops/adaptable.rb +2 -2
- data/lib/puppet/pops/adapters.rb +4 -0
- data/lib/puppet/pops/binder/binder.rb +421 -0
- data/lib/puppet/pops/binder/binder_issues.rb +142 -0
- data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
- data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
- data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
- data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
- data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
- data/lib/puppet/pops/binder/bindings_model.rb +215 -0
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
- data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
- data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
- data/lib/puppet/pops/binder/config/issues.rb +106 -0
- data/lib/puppet/pops/binder/hiera2.rb +10 -0
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
- data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
- data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
- data/lib/puppet/pops/binder/injector.rb +688 -0
- data/lib/puppet/pops/binder/injector_entry.rb +53 -0
- data/lib/puppet/pops/binder/key_factory.rb +61 -0
- data/lib/puppet/pops/binder/producers.rb +829 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
- data/lib/puppet/pops/binder/system_bindings.rb +72 -0
- data/lib/puppet/pops/issue_reporter.rb +75 -0
- data/lib/puppet/pops/issues.rb +9 -5
- data/lib/puppet/pops/model/ast_transformer.rb +4 -4
- data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +25 -13
- data/lib/puppet/pops/model/model.rb +1 -1
- data/lib/puppet/pops/model/tree_dumper.rb +2 -2
- data/lib/puppet/pops/parser/egrammar.ra +0 -1
- data/lib/puppet/pops/parser/eparser.rb +1 -2
- data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
- data/lib/puppet/pops/parser/lexer.rb +8 -6
- data/lib/puppet/pops/types/class_loader.rb +118 -0
- data/lib/puppet/pops/types/type_calculator.rb +557 -0
- data/lib/puppet/pops/types/type_factory.rb +147 -0
- data/lib/puppet/pops/types/type_parser.rb +117 -0
- data/lib/puppet/pops/types/types.rb +132 -0
- data/lib/puppet/pops/validation.rb +146 -17
- data/lib/puppet/pops/validation/checker3_1.rb +1 -1
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
- data/lib/puppet/property.rb +3 -3
- data/lib/puppet/property/keyvalue.rb +1 -1
- data/lib/puppet/provider.rb +2 -2
- data/lib/puppet/provider/aixobject.rb +19 -21
- data/lib/puppet/provider/augeas/augeas.rb +3 -1
- data/lib/puppet/provider/command.rb +2 -2
- data/lib/puppet/provider/group/aix.rb +1 -1
- data/lib/puppet/provider/group/ldap.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +3 -8
- data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
- data/lib/puppet/provider/mount.rb +8 -3
- data/lib/puppet/provider/nameservice.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +0 -1
- data/lib/puppet/provider/package/dpkg.rb +86 -32
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/freebsd.rb +0 -2
- data/lib/puppet/provider/package/openbsd.rb +57 -10
- data/lib/puppet/provider/package/opkg.rb +0 -1
- data/lib/puppet/provider/package/pacman.rb +0 -1
- data/lib/puppet/provider/package/pip.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +17 -6
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +9 -1
- data/lib/puppet/provider/package/ports.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +29 -12
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +11 -15
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -26
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +22 -3
- data/lib/puppet/provider/parsedfile.rb +1 -12
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +3 -3
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/init.rb +14 -20
- data/lib/puppet/provider/service/openrc.rb +3 -1
- data/lib/puppet/provider/service/redhat.rb +5 -8
- data/lib/puppet/provider/service/runit.rb +3 -2
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -2
- data/lib/puppet/provider/user/aix.rb +25 -12
- data/lib/puppet/provider/user/directoryservice.rb +4 -7
- data/lib/puppet/provider/user/ldap.rb +0 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -2
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +16 -4
- data/lib/puppet/resource/catalog.rb +111 -173
- data/lib/puppet/resource/status.rb +42 -3
- data/lib/puppet/resource/type.rb +33 -46
- data/lib/puppet/resource/type_collection.rb +19 -15
- data/lib/puppet/run.rb +5 -1
- data/lib/puppet/scheduler/scheduler.rb +14 -15
- data/lib/puppet/settings.rb +78 -41
- data/lib/puppet/settings/boolean_setting.rb +0 -2
- data/lib/puppet/settings/config_file.rb +0 -2
- data/lib/puppet/settings/directory_setting.rb +0 -2
- data/lib/puppet/settings/duration_setting.rb +0 -2
- data/lib/puppet/settings/enum_setting.rb +16 -0
- data/lib/puppet/settings/file_setting.rb +0 -2
- data/lib/puppet/settings/path_setting.rb +0 -2
- data/lib/puppet/settings/string_setting.rb +0 -3
- data/lib/puppet/settings/terminus_setting.rb +0 -2
- data/lib/puppet/ssl/certificate_authority.rb +102 -9
- data/lib/puppet/test/test_helper.rb +1 -0
- data/lib/puppet/transaction.rb +130 -292
- data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
- data/lib/puppet/transaction/event.rb +16 -1
- data/lib/puppet/transaction/report.rb +34 -14
- data/lib/puppet/transaction/resource_harness.rb +16 -19
- data/lib/puppet/type.rb +59 -53
- data/lib/puppet/type/component.rb +0 -2
- data/lib/puppet/type/cron.rb +13 -2
- data/lib/puppet/type/exec.rb +5 -7
- data/lib/puppet/type/file.rb +9 -32
- data/lib/puppet/type/file/content.rb +4 -1
- data/lib/puppet/type/file/ctime.rb +3 -1
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/file/mode.rb +0 -1
- data/lib/puppet/type/file/mtime.rb +2 -1
- data/lib/puppet/type/group.rb +7 -9
- data/lib/puppet/type/host.rb +1 -2
- data/lib/puppet/type/mcx.rb +0 -1
- data/lib/puppet/type/mount.rb +38 -6
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/resources.rb +5 -4
- data/lib/puppet/type/schedule.rb +1 -4
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -3
- data/lib/puppet/type/tidy.rb +3 -3
- data/lib/puppet/type/user.rb +9 -13
- data/lib/puppet/type/yumrepo.rb +11 -7
- data/lib/puppet/util.rb +14 -7
- data/lib/puppet/util/autoload.rb +0 -1
- data/lib/puppet/util/backups.rb +1 -3
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/constant_inflector.rb +1 -2
- data/lib/puppet/util/errors.rb +1 -0
- data/lib/puppet/util/file_watcher.rb +28 -0
- data/lib/puppet/util/fileparsing.rb +1 -3
- data/lib/puppet/util/filetype.rb +0 -1
- data/lib/puppet/util/http_proxy.rb +38 -0
- data/lib/puppet/util/ldap/manager.rb +1 -2
- data/lib/puppet/util/log.rb +31 -10
- data/lib/puppet/util/log/destinations.rb +0 -50
- data/lib/puppet/util/metric.rb +8 -1
- data/lib/puppet/util/monkey_patches.rb +14 -148
- data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +6 -9
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +3 -0
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
- data/lib/puppet/util/retryaction.rb +0 -1
- data/lib/puppet/util/symbolic_file_mode.rb +5 -1
- data/lib/puppet/util/tagging.rb +0 -2
- data/lib/puppet/util/warnings.rb +3 -0
- data/lib/puppet/util/watched_file.rb +37 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/watcher/change_watcher.rb +33 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
- data/lib/puppet/util/watcher/timer.rb +19 -0
- data/lib/puppet/util/windows/user.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +109 -0
- data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
- data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
- data/lib/puppetx/puppet/syntax_checker.rb +91 -0
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
- data/lib/semver.rb +1 -1
- data/man/man8/puppet-kick.8 +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
- data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
- data/spec/integration/agent/logging_spec.rb +178 -0
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -6
- data/spec/integration/network/authconfig_spec.rb +19 -0
- data/spec/integration/network/server/webrick_spec.rb +10 -11
- data/spec/integration/parser/catalog_spec.rb +85 -0
- data/spec/integration/provider/cron/crontab_spec.rb +11 -0
- data/spec/integration/provider/mount_spec.rb +1 -0
- data/spec/integration/transaction_spec.rb +8 -8
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +58 -11
- data/spec/lib/matchers/include_in_order.rb +21 -0
- data/spec/lib/matchers/include_in_order_spec.rb +30 -0
- data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
- data/spec/lib/puppet_spec/compiler.rb +24 -0
- data/spec/lib/puppet_spec/pops.rb +16 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/unit/application/agent_spec.rb +145 -145
- data/spec/unit/application/apply_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +1 -1
- data/spec/unit/application/face_base_spec.rb +3 -3
- data/spec/unit/application/facts_spec.rb +1 -0
- data/spec/unit/application/master_spec.rb +0 -15
- data/spec/unit/application/queue_spec.rb +6 -12
- data/spec/unit/application/resource_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +19 -50
- data/spec/unit/configurer_spec.rb +23 -7
- data/spec/unit/daemon_spec.rb +97 -121
- data/spec/unit/defaults_spec.rb +44 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
- data/spec/unit/file_serving/configuration_spec.rb +2 -2
- data/spec/unit/file_serving/mount/file_spec.rb +4 -4
- data/spec/unit/forge/repository_spec.rb +9 -29
- data/spec/unit/graph/key_spec.rb +41 -0
- data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
- data/spec/unit/graph/relationship_graph_spec.rb +393 -0
- data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
- data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
- data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
- data/spec/unit/hiera_puppet_spec.rb +1 -1
- data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
- data/spec/unit/indirector/face_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +11 -1
- data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
- data/spec/unit/indirector/hiera_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +92 -39
- data/spec/unit/indirector/rest_spec.rb +1 -0
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface/option_builder_spec.rb +1 -0
- data/spec/unit/interface/option_spec.rb +1 -0
- data/spec/unit/interface_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
- data/spec/unit/module_tool/metadata_spec.rb +13 -0
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/format_handler_spec.rb +33 -282
- data/spec/unit/network/format_support_spec.rb +199 -0
- data/spec/unit/network/formats_spec.rb +2 -2
- data/spec/unit/network/http/connection_spec.rb +88 -7
- data/spec/unit/network/http/handler_spec.rb +271 -249
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
- data/spec/unit/network/http_pool_spec.rb +40 -0
- data/spec/unit/network/server_spec.rb +18 -207
- data/spec/unit/node/facts_spec.rb +68 -17
- data/spec/unit/other/selinux_spec.rb +24 -20
- data/spec/unit/parameter/boolean_spec.rb +25 -0
- data/spec/unit/parameter/value_collection_spec.rb +7 -7
- data/spec/unit/parameter_spec.rb +10 -13
- data/spec/unit/parser/ast/function_spec.rb +4 -4
- data/spec/unit/parser/ast/leaf_spec.rb +45 -6
- data/spec/unit/parser/collector_spec.rb +3 -3
- data/spec/unit/parser/compiler_spec.rb +4 -3
- data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
- data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
- data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
- data/spec/unit/parser/functions/lookup_spec.rb +96 -0
- data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
- data/spec/unit/parser/functions/split_spec.rb +2 -2
- data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
- data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
- data/spec/unit/parser/functions_spec.rb +7 -7
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/collect_spec.rb +43 -0
- data/spec/unit/parser/resource_spec.rb +9 -9
- data/spec/unit/parser/scope_spec.rb +45 -2
- data/spec/unit/parser/type_loader_spec.rb +159 -175
- data/spec/unit/pops/binder/binder_spec.rb +62 -0
- data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
- data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
- data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
- data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
- data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
- data/spec/unit/pops/binder/injector_spec.rb +789 -0
- data/spec/unit/pops/containment_spec.rb +1 -0
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
- data/spec/unit/pops/parser/lexer_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
- data/spec/unit/pops/parser/parser_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
- data/spec/unit/pops/types/type_factory_spec.rb +65 -0
- data/spec/unit/pops/types/type_parser_spec.rb +93 -0
- data/spec/unit/property/list_spec.rb +1 -1
- data/spec/unit/property/ordered_list_spec.rb +1 -1
- data/spec/unit/provider/aixobject_spec.rb +101 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
- data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
- data/spec/unit/provider/mount/parsed_spec.rb +44 -56
- data/spec/unit/provider/mount_spec.rb +11 -2
- data/spec/unit/provider/naginator_spec.rb +8 -0
- data/spec/unit/provider/package/apt_spec.rb +5 -1
- data/spec/unit/provider/package/aptitude_spec.rb +9 -5
- data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
- data/spec/unit/provider/package/dpkg_spec.rb +274 -99
- data/spec/unit/provider/package/openbsd_spec.rb +84 -1
- data/spec/unit/provider/package/opkg_spec.rb +3 -3
- data/spec/unit/provider/package/pip_spec.rb +16 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
- data/spec/unit/provider/package/rpm_spec.rb +112 -21
- data/spec/unit/provider/package/urpmi.rb +80 -0
- data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
- data/spec/unit/provider/package/yum_spec.rb +85 -0
- data/spec/unit/provider/package/zypper_spec.rb +25 -6
- data/spec/unit/provider/parsedfile_spec.rb +3 -2
- data/spec/unit/provider/service/init_spec.rb +10 -10
- data/spec/unit/provider/service/openrc_spec.rb +16 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +7 -0
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
- data/spec/unit/provider/user/aix_spec.rb +89 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
- data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
- data/spec/unit/provider_spec.rb +2 -13
- data/spec/unit/reports/http_spec.rb +1 -1
- data/spec/unit/resource/catalog_spec.rb +23 -97
- data/spec/unit/resource/resource_type.json +34 -0
- data/spec/unit/resource/status_spec.rb +56 -0
- data/spec/unit/resource/type_collection_spec.rb +6 -6
- data/spec/unit/resource/type_spec.rb +25 -5
- data/spec/unit/resource_spec.rb +68 -24
- data/spec/unit/run_spec.rb +16 -0
- data/spec/unit/scheduler/scheduler_spec.rb +14 -27
- data/spec/unit/semver_spec.rb +5 -0
- data/spec/unit/settings/enum_setting_spec.rb +27 -0
- data/spec/unit/settings_spec.rb +53 -44
- data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
- data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
- data/spec/unit/transaction/event_manager_spec.rb +2 -2
- data/spec/unit/transaction/event_spec.rb +57 -0
- data/spec/unit/transaction/report_spec.rb +66 -0
- data/spec/unit/transaction/resource_harness_spec.rb +27 -20
- data/spec/unit/transaction_spec.rb +182 -390
- data/spec/unit/type/augeas_spec.rb +3 -3
- data/spec/unit/type/component_spec.rb +0 -9
- data/spec/unit/type/computer_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +2 -2
- data/spec/unit/type/exec_spec.rb +4 -2
- data/spec/unit/type/file/content_spec.rb +11 -0
- data/spec/unit/type/file/group_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +16 -8
- data/spec/unit/type/mount_spec.rb +445 -259
- data/spec/unit/type/package_spec.rb +4 -4
- data/spec/unit/type/resources_spec.rb +30 -1
- data/spec/unit/type/user_spec.rb +26 -3
- data/spec/unit/type/yumrepo_spec.rb +7 -27
- data/spec/unit/type/zone_spec.rb +4 -1
- data/spec/unit/type_spec.rb +66 -33
- data/spec/unit/util/backups_spec.rb +3 -3
- data/spec/unit/util/http_proxy_spec.rb +83 -0
- data/spec/unit/util/log_spec.rb +79 -8
- data/spec/unit/util/metric_spec.rb +12 -0
- data/spec/unit/util/monkey_patches_spec.rb +6 -0
- data/spec/unit/util/network_device/config_spec.rb +26 -64
- data/spec/unit/util/pidlock_spec.rb +4 -1
- data/spec/unit/util/tagging_spec.rb +5 -9
- data/spec/unit/util/warnings_spec.rb +1 -1
- data/spec/unit/util/watched_file_spec.rb +52 -0
- data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
- data/spec/unit/util/watcher_spec.rb +56 -0
- data/spec/unit/util_spec.rb +16 -0
- metadata +2767 -2576
- data/ext/debian/puppet.manpages +0 -32
- data/ext/osx/PackageInfo.plist +0 -36
- data/ext/osx/createpackage.sh +0 -187
- data/ext/redhat/rundir-perms.patch +0 -28
- data/lib/puppet/external/base64.rb +0 -19
- data/lib/puppet/util/graph.rb +0 -27
- data/lib/puppet/util/loadedfile.rb +0 -61
- data/lib/puppet/util/log_paths.rb +0 -22
- data/lib/puppet/util/subclass_loader.rb +0 -78
- data/spec/monkey_patches/publicize_methods.rb +0 -11
- data/spec/unit/util/loadedfile_spec.rb +0 -71
data/lib/puppet/node/facts.rb
CHANGED
@@ -28,6 +28,7 @@ class Puppet::Node::Facts
|
|
28
28
|
def add_local_facts
|
29
29
|
values["clientcert"] = Puppet.settings[:certname]
|
30
30
|
values["clientversion"] = Puppet.version.to_s
|
31
|
+
values["clientnoop"] = Puppet.settings[:noop]
|
31
32
|
end
|
32
33
|
|
33
34
|
def initialize(name, values = {})
|
@@ -64,6 +65,14 @@ class Puppet::Node::Facts
|
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
68
|
+
# Sanitize fact values by converting everything not a string, boolean
|
69
|
+
# numeric, array or hash into strings.
|
70
|
+
def sanitize
|
71
|
+
values.each do |fact, value|
|
72
|
+
values[fact] = sanitize_fact value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
67
76
|
def ==(other)
|
68
77
|
return false unless self.name == other.name
|
69
78
|
strip_internal == other.send(:strip_internal)
|
@@ -93,11 +102,11 @@ class Puppet::Node::Facts
|
|
93
102
|
end
|
94
103
|
|
95
104
|
def timestamp=(time)
|
96
|
-
self.values[
|
105
|
+
self.values['_timestamp'] = time
|
97
106
|
end
|
98
107
|
|
99
108
|
def timestamp
|
100
|
-
self.values[
|
109
|
+
self.values['_timestamp']
|
101
110
|
end
|
102
111
|
|
103
112
|
private
|
@@ -108,4 +117,21 @@ class Puppet::Node::Facts
|
|
108
117
|
newvals.find_all { |name, value| name.to_s =~ /^_/ }.each { |name, value| newvals.delete(name) }
|
109
118
|
newvals
|
110
119
|
end
|
120
|
+
|
121
|
+
def sanitize_fact(fact)
|
122
|
+
if fact.is_a? Hash then
|
123
|
+
ret = {}
|
124
|
+
fact.each_pair { |k,v| ret[sanitize_fact k]=sanitize_fact v }
|
125
|
+
ret
|
126
|
+
elsif fact.is_a? Array then
|
127
|
+
fact.collect { |i| sanitize_fact i }
|
128
|
+
elsif fact.is_a? Numeric \
|
129
|
+
or fact.is_a? TrueClass \
|
130
|
+
or fact.is_a? FalseClass \
|
131
|
+
or fact.is_a? String
|
132
|
+
fact
|
133
|
+
else
|
134
|
+
fact.to_s
|
135
|
+
end
|
136
|
+
end
|
111
137
|
end
|
data/lib/puppet/parameter.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'puppet/util/methodhelper'
|
2
|
-
require 'puppet/util/log_paths'
|
3
2
|
require 'puppet/util/logging'
|
4
3
|
require 'puppet/util/docs'
|
5
4
|
|
@@ -22,7 +21,6 @@ require 'puppet/util/docs'
|
|
22
21
|
class Puppet::Parameter
|
23
22
|
include Puppet::Util
|
24
23
|
include Puppet::Util::Errors
|
25
|
-
include Puppet::Util::LogPaths
|
26
24
|
include Puppet::Util::Logging
|
27
25
|
include Puppet::Util::MethodHelper
|
28
26
|
|
@@ -241,10 +239,11 @@ class Puppet::Parameter
|
|
241
239
|
end
|
242
240
|
|
243
241
|
# @overload validate {|| ... }
|
244
|
-
# Defines an optional method that is used to validate the parameter's value.
|
242
|
+
# Defines an optional method that is used to validate the parameter's DSL/string value.
|
245
243
|
# Validation should raise appropriate exceptions, the return value of the given block is ignored.
|
246
244
|
# The easiest way to raise an appropriate exception is to call the method {Puppet::Util::Errors.fail} with
|
247
245
|
# the message as an argument.
|
246
|
+
# To validate the munged value instead, just munge the value (`munge(value)`).
|
248
247
|
#
|
249
248
|
# @return [void]
|
250
249
|
# @dsl type
|
@@ -306,19 +305,29 @@ class Puppet::Parameter
|
|
306
305
|
#
|
307
306
|
attr_accessor :parent
|
308
307
|
|
309
|
-
#
|
310
|
-
#
|
311
|
-
#
|
312
|
-
|
313
|
-
|
314
|
-
# @return [Integer] Returns the result of calling the same method on the associated resource.
|
315
|
-
#
|
316
|
-
[:line, :file, :version].each do |param|
|
317
|
-
define_method(param) do
|
318
|
-
resource.send(param)
|
319
|
-
end
|
308
|
+
# Returns a string representation of the resource's containment path in
|
309
|
+
# the catalog.
|
310
|
+
# @return [String]
|
311
|
+
def path
|
312
|
+
@path ||= '/' + pathbuilder.join('/')
|
320
313
|
end
|
321
314
|
|
315
|
+
# @return [Integer] Returns the result of calling the same method on the associated resource.
|
316
|
+
def line
|
317
|
+
resource.line
|
318
|
+
end
|
319
|
+
|
320
|
+
# @return [Integer] Returns the result of calling the same method on the associated resource.
|
321
|
+
def file
|
322
|
+
resource.file
|
323
|
+
end
|
324
|
+
|
325
|
+
# @return [Integer] Returns the result of calling the same method on the associated resource.
|
326
|
+
def version
|
327
|
+
resource.version
|
328
|
+
end
|
329
|
+
|
330
|
+
|
322
331
|
# Initializes the parameter with a required resource reference and optional attribute settings.
|
323
332
|
# The option `:resource` must be specified or an exception is raised. Any additional options passed
|
324
333
|
# are used to initialize the attributes of this parameter by treating each key in the `options` hash as
|
@@ -377,9 +386,9 @@ class Puppet::Parameter
|
|
377
386
|
tmp
|
378
387
|
end
|
379
388
|
|
380
|
-
#
|
381
|
-
#
|
382
|
-
#
|
389
|
+
# Returns an array of strings representing the containment heirarchy
|
390
|
+
# (types/classes) that make up the path to the resource from the root
|
391
|
+
# of the catalog. This is mostly used for logging purposes.
|
383
392
|
#
|
384
393
|
# @api private
|
385
394
|
def pathbuilder
|
@@ -477,7 +486,7 @@ class Puppet::Parameter
|
|
477
486
|
# @todo This original comment _"All of the checking should possibly be
|
478
487
|
# late-binding (e.g., users might not exist when the value is assigned
|
479
488
|
# but might when it is asked for)."_ does not seem to be correct, the implementation
|
480
|
-
# calls both validate
|
489
|
+
# calls both validate and munge on the given value, so no late binding.
|
481
490
|
#
|
482
491
|
# The given value is validated and then munged (if munging has been specified). The result is store
|
483
492
|
# as the value of this arameter.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This specialized {Puppet::Parameter} handles boolean options, accepting lots
|
2
|
+
# of strings and symbols for both truthiness and falsehood.
|
3
|
+
#
|
4
|
+
class Puppet::Parameter::Boolean < Puppet::Parameter
|
5
|
+
def unsafe_munge(value)
|
6
|
+
# downcase strings
|
7
|
+
if value.respond_to? :downcase
|
8
|
+
value = value.downcase
|
9
|
+
end
|
10
|
+
|
11
|
+
case value
|
12
|
+
when true, :true, 'true', :yes, 'yes'
|
13
|
+
true
|
14
|
+
when false, :false, 'false', :no, 'no'
|
15
|
+
false
|
16
|
+
else
|
17
|
+
fail('expected a boolean value')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -45,7 +45,7 @@ class Puppet::Parameter::Path < Puppet::Parameter
|
|
45
45
|
# This default implementation does not perform any munging, it just checks the one/many paths
|
46
46
|
# constraints. A derived implementation can perform this check as:
|
47
47
|
# `paths.is_a?(Array) and ! self.class.arrays?` and raise a {Puppet::Error}.
|
48
|
-
# @param [String, Array<String>] one of multiple paths
|
48
|
+
# @param paths [String, Array<String>] one of multiple paths
|
49
49
|
# @return [String, Array<String>] the given paths
|
50
50
|
# @raise [Puppet::Error] if the given paths does not comply with the on/many paths rule.
|
51
51
|
def unsafe_munge(paths)
|
@@ -34,7 +34,7 @@ class Puppet::Parameter::Value
|
|
34
34
|
|
35
35
|
# Initializes the instance with a literal accepted value, or a regular expression.
|
36
36
|
# If anything else is passed, it is turned into a String, and then made into a Symbol.
|
37
|
-
# @param [Symbol, Regexp, Object] the value to accept, Symbol, a regular expression, or object to convert.
|
37
|
+
# @param name [Symbol, Regexp, Object] the value to accept, Symbol, a regular expression, or object to convert.
|
38
38
|
# @api private
|
39
39
|
#
|
40
40
|
def initialize(name)
|
@@ -189,7 +189,7 @@ class Puppet::Parameter::ValueCollection
|
|
189
189
|
end
|
190
190
|
|
191
191
|
# Returns a valid value matcher (a literal or regular expression)
|
192
|
-
# @todo This looks odd, asking for an instance that matches a symbol, or
|
192
|
+
# @todo This looks odd, asking for an instance that matches a symbol, or an instance that has
|
193
193
|
# a regexp. What is the intention here? Marking as api private...
|
194
194
|
#
|
195
195
|
# @return [Puppet::Parameter::Value] a valid valud matcher
|
@@ -80,4 +80,12 @@ class Puppet::Parser::AST
|
|
80
80
|
raise ArgumentError, "Invalid arithmetic operator #{@operator}" unless %w{+ - * / % << >>}.include?(@operator)
|
81
81
|
end
|
82
82
|
end
|
83
|
+
|
84
|
+
# Used by future parser instead of ArithmeticOperator to enable concatenation
|
85
|
+
class ArithmeticOperator2 < ArithmeticOperator
|
86
|
+
# Overrides the arithmetic operator to allow concatenation
|
87
|
+
def assert_concatenation_supported
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
83
91
|
end
|
@@ -36,31 +36,50 @@ class Puppet::Parser::AST
|
|
36
36
|
#
|
37
37
|
def call(scope, *args)
|
38
38
|
raise Puppet::ParseError, "Too many arguments: #{args.size} for #{parameters.size}" unless args.size <= parameters.size
|
39
|
+
|
40
|
+
# associate values with parameters
|
39
41
|
merged = parameters.zip(args)
|
40
|
-
|
42
|
+
# calculate missing arguments
|
43
|
+
missing = parameters.slice(args.size, parameters.size - args.size).select {|e| e.size == 1}
|
41
44
|
unless missing.empty?
|
42
45
|
optional = parameters.count { |p| p.size == 2 }
|
43
46
|
raise Puppet::ParseError, "Too few arguments; #{args.size} for #{optional > 0 ? ' min ' : ''}#{parameters.size - optional}"
|
44
47
|
end
|
45
48
|
|
46
49
|
evaluated = merged.collect do |m|
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
# m can be one of
|
51
|
+
# m = [["name"], "given"]
|
52
|
+
# | [["name", default_expr], "given"]
|
53
|
+
#
|
54
|
+
# "given" is always an optional entry. If a parameter was provided then
|
55
|
+
# the entry will be in the array, otherwise the m array will be a
|
56
|
+
# single element.
|
57
|
+
given_argument = m[1]
|
58
|
+
argument_name = m[0][0]
|
59
|
+
default_expression = m[0][1]
|
60
|
+
|
61
|
+
value = if m.size == 1
|
62
|
+
default_expression.safeevaluate(scope)
|
63
|
+
else
|
64
|
+
given_argument
|
65
|
+
end
|
66
|
+
[argument_name, value]
|
51
67
|
end
|
52
68
|
|
53
69
|
# Store the evaluated name => value associations in a new inner/local/ephemeral scope
|
54
70
|
# (This is made complicated due to the fact that the implementation of scope is overloaded with
|
55
71
|
# functionality and an inner ephemeral scope must be used (as opposed to just pushing a local scope
|
56
72
|
# on a scope "stack").
|
73
|
+
|
74
|
+
# Ensure variable exists with nil value if error occurs.
|
75
|
+
# Some ruby implementations does not like creating variable on return
|
76
|
+
result = nil
|
57
77
|
begin
|
58
78
|
elevel = scope.ephemeral_level
|
59
79
|
scope.ephemeral_from(Hash[evaluated], file, line)
|
60
80
|
result = safeevaluate(scope)
|
61
81
|
ensure
|
62
82
|
scope.unset_ephemeral_var(elevel)
|
63
|
-
result ||= nil
|
64
83
|
end
|
65
84
|
result
|
66
85
|
end
|
@@ -131,7 +131,13 @@ class Puppet::Parser::AST
|
|
131
131
|
|
132
132
|
def evaluate_container(scope)
|
133
133
|
container = variable.respond_to?(:evaluate) ? variable.safeevaluate(scope) : variable
|
134
|
-
|
134
|
+
if container.is_a?(Hash) || container.is_a?(Array)
|
135
|
+
container
|
136
|
+
elsif container.is_a?(::String)
|
137
|
+
scope[container, {:file => file, :line => line}]
|
138
|
+
else
|
139
|
+
raise Puppet::ParseError, "#{variable} is #{container.inspect}, not a hash or array"
|
140
|
+
end
|
135
141
|
end
|
136
142
|
|
137
143
|
def evaluate_key(scope)
|
@@ -148,9 +154,10 @@ class Puppet::Parser::AST
|
|
148
154
|
def evaluate(scope)
|
149
155
|
object = evaluate_container(scope)
|
150
156
|
accesskey = evaluate_key(scope)
|
151
|
-
raise Puppet::ParseError, "#{variable} is not
|
157
|
+
raise Puppet::ParseError, "#{variable} is not a hash or array when accessing it with #{accesskey}" unless object.is_a?(Hash) or object.is_a?(Array)
|
152
158
|
|
153
|
-
object[array_index_or_key(object, accesskey)]
|
159
|
+
result = object[array_index_or_key(object, accesskey)]
|
160
|
+
result.nil? ? :undef : result
|
154
161
|
end
|
155
162
|
|
156
163
|
# Assign value to this hashkey or array index
|
@@ -35,6 +35,22 @@ class Puppet::Parser::Compiler
|
|
35
35
|
|
36
36
|
attr_reader :node, :facts, :collections, :catalog, :resources, :relationships, :topscope
|
37
37
|
|
38
|
+
# The injector that provides lookup services, or nil if accessed before the compiler has started compiling and
|
39
|
+
# bootstrapped. The injector is initialized and available before any manifests are evaluated.
|
40
|
+
#
|
41
|
+
# @return [Puppet::Pops::Binder::Injector, nil] The injector that provides lookup services for this compiler/environment
|
42
|
+
# @api public
|
43
|
+
#
|
44
|
+
attr_accessor :injector
|
45
|
+
|
46
|
+
# The injector that provides lookup services during the creation of the {#injector}.
|
47
|
+
# @return [Puppet::Pops::Binder::Injector, nil] The injector that provides lookup services during injector creation
|
48
|
+
# for this compiler/environment
|
49
|
+
#
|
50
|
+
# @api private
|
51
|
+
#
|
52
|
+
attr_accessor :boot_injector
|
53
|
+
|
38
54
|
# Add a collection to the global list.
|
39
55
|
def_delegator :@collections, :<<, :add_collection
|
40
56
|
def_delegator :@relationships, :<<, :add_relationship
|
@@ -51,7 +67,6 @@ class Puppet::Parser::Compiler
|
|
51
67
|
end
|
52
68
|
end
|
53
69
|
|
54
|
-
# Store a resource in our resource table.
|
55
70
|
def add_resource(scope, resource)
|
56
71
|
@resources << resource
|
57
72
|
|
@@ -94,6 +109,10 @@ class Puppet::Parser::Compiler
|
|
94
109
|
|
95
110
|
Puppet::Util::Profiler.profile("Compile: Created settings scope") { create_settings_scope }
|
96
111
|
|
112
|
+
if is_binder_active?
|
113
|
+
Puppet::Util::Profiler.profile("Compile: Created injector") { create_injector }
|
114
|
+
end
|
115
|
+
|
97
116
|
Puppet::Util::Profiler.profile("Compile: Evaluated main") { evaluate_main }
|
98
117
|
|
99
118
|
Puppet::Util::Profiler.profile("Compile: Evaluated AST node") { evaluate_ast_node }
|
@@ -135,7 +154,7 @@ class Puppet::Parser::Compiler
|
|
135
154
|
#
|
136
155
|
# Sometimes we evaluate classes with a fully qualified name already, in which
|
137
156
|
# case, we tell scope.find_hostclass we've pre-qualified the name so it
|
138
|
-
# doesn't need to search
|
157
|
+
# doesn't need to search its namespaces again. This gets around a weird
|
139
158
|
# edge case of duplicate class names, one at top scope and one nested in our
|
140
159
|
# namespace and the wrong one (or both!) getting selected. See ticket #13349
|
141
160
|
# for more detail. --jeffweiss 26 apr 2012
|
@@ -197,6 +216,47 @@ class Puppet::Parser::Compiler
|
|
197
216
|
@resource_overrides[resource.ref]
|
198
217
|
end
|
199
218
|
|
219
|
+
def injector
|
220
|
+
create_injector if @injector.nil?
|
221
|
+
@injector
|
222
|
+
end
|
223
|
+
|
224
|
+
def boot_injector
|
225
|
+
create_boot_injector(nil) if @boot_injector.nil?
|
226
|
+
@boot_injector
|
227
|
+
end
|
228
|
+
|
229
|
+
# Creates the boot injector from registered system, default, and injector config.
|
230
|
+
# @return [Puppet::Pops::Binder::Injector] the created boot injector
|
231
|
+
# @api private Cannot be 'private' since it is called from the BindingsComposer.
|
232
|
+
#
|
233
|
+
def create_boot_injector(env_boot_bindings)
|
234
|
+
assert_binder_active()
|
235
|
+
boot_contribution = Puppet::Pops::Binder::SystemBindings.injector_boot_contribution(env_boot_bindings)
|
236
|
+
final_contribution = Puppet::Pops::Binder::SystemBindings.final_contribution
|
237
|
+
binder = Puppet::Pops::Binder::Binder.new()
|
238
|
+
binder.define_categories(boot_contribution.effective_categories)
|
239
|
+
binder.define_layers(Puppet::Pops::Binder::BindingsFactory.layered_bindings(final_contribution, boot_contribution))
|
240
|
+
@boot_injector = Puppet::Pops::Binder::Injector.new(binder)
|
241
|
+
end
|
242
|
+
|
243
|
+
# Answers if Puppet Binder should be active or not, and if it should and is not active, then it is activated.
|
244
|
+
# @return [Boolean] true if the Puppet Binder should be activated
|
245
|
+
def is_binder_active?
|
246
|
+
should_be_active = Puppet[:binder] || Puppet[:parser] == 'future'
|
247
|
+
if should_be_active
|
248
|
+
# TODO: this should be in a central place, not just for ParserFactory anymore...
|
249
|
+
Puppet::Parser::ParserFactory.assert_rgen_installed()
|
250
|
+
@@binder_loaded ||= false
|
251
|
+
unless @@binder_loaded
|
252
|
+
require 'puppet/pops'
|
253
|
+
require 'puppetx'
|
254
|
+
@@binder_loaded = true
|
255
|
+
end
|
256
|
+
end
|
257
|
+
should_be_active
|
258
|
+
end
|
259
|
+
|
200
260
|
private
|
201
261
|
|
202
262
|
# If ast nodes are enabled, then see if we can find and evaluate one.
|
@@ -303,16 +363,11 @@ class Puppet::Parser::Compiler
|
|
303
363
|
# not find the resource they were supposed to override, so we
|
304
364
|
# want to throw an exception.
|
305
365
|
def fail_on_unevaluated_overrides
|
306
|
-
remaining =
|
307
|
-
@resource_overrides.each do |name, overrides|
|
308
|
-
remaining.concat overrides
|
309
|
-
end
|
366
|
+
remaining = @resource_overrides.values.flatten.collect(&:ref)
|
310
367
|
|
311
|
-
|
368
|
+
if !remaining.empty?
|
312
369
|
fail Puppet::ParseError,
|
313
|
-
"Could not find resource(s)
|
314
|
-
o.ref
|
315
|
-
}.join(", ")
|
370
|
+
"Could not find resource(s) #{remaining.join(', ')} for overriding"
|
316
371
|
end
|
317
372
|
end
|
318
373
|
|
@@ -320,22 +375,11 @@ class Puppet::Parser::Compiler
|
|
320
375
|
# look for resources, because we want to consider those to be
|
321
376
|
# parse errors.
|
322
377
|
def fail_on_unevaluated_resource_collections
|
323
|
-
remaining =
|
324
|
-
@collections.each do |coll|
|
325
|
-
# We're only interested in the 'resource' collections,
|
326
|
-
# which result from direct calls of 'realize'. Anything
|
327
|
-
# else is allowed not to return resources.
|
328
|
-
# Collect all of them, so we have a useful error.
|
329
|
-
if r = coll.resources
|
330
|
-
if r.is_a?(Array)
|
331
|
-
remaining += r
|
332
|
-
else
|
333
|
-
remaining << r
|
334
|
-
end
|
335
|
-
end
|
336
|
-
end
|
378
|
+
remaining = @collections.collect(&:resources).flatten.compact
|
337
379
|
|
338
|
-
|
380
|
+
if !remaining.empty?
|
381
|
+
raise Puppet::ParseError, "Failed to realize virtual resources #{remaining.join(', ')}"
|
382
|
+
end
|
339
383
|
end
|
340
384
|
|
341
385
|
# Make sure all of our resources and such have done any last work
|
@@ -366,10 +410,8 @@ class Puppet::Parser::Compiler
|
|
366
410
|
raise "Couldn't find main"
|
367
411
|
end
|
368
412
|
|
369
|
-
names =
|
370
|
-
|
371
|
-
next if Puppet::Parser::Resource.relationship_parameter?(name)
|
372
|
-
names << name
|
413
|
+
names = Puppet::Type.metaparams.select do |name|
|
414
|
+
!Puppet::Parser::Resource.relationship_parameter?(name)
|
373
415
|
end
|
374
416
|
|
375
417
|
data = {}
|
@@ -405,9 +447,6 @@ class Puppet::Parser::Compiler
|
|
405
447
|
|
406
448
|
# Set up all of our internal variables.
|
407
449
|
def initvars
|
408
|
-
# The list of objects that will available for export.
|
409
|
-
@exported_resources = {}
|
410
|
-
|
411
450
|
# The list of overrides. This is used to cache overrides on objects
|
412
451
|
# that don't exist yet. We store an array of each override.
|
413
452
|
@resource_overrides = Hash.new do |overs, ref|
|
@@ -430,8 +469,7 @@ class Puppet::Parser::Compiler
|
|
430
469
|
# Create our initial scope and a resource that will evaluate main.
|
431
470
|
@topscope = Puppet::Parser::Scope.new(self)
|
432
471
|
|
433
|
-
@
|
434
|
-
@catalog.add_resource(@main_stage_resource)
|
472
|
+
@catalog.add_resource(Puppet::Parser::Resource.new("stage", :main, :scope => @topscope))
|
435
473
|
|
436
474
|
# local resource array to maintain resource ordering
|
437
475
|
@resources = []
|
@@ -481,4 +519,24 @@ class Puppet::Parser::Compiler
|
|
481
519
|
# The order of these is significant for speed due to short-circuting
|
482
520
|
resources.reject { |resource| resource.evaluated? or resource.virtual? or resource.builtin_type? }
|
483
521
|
end
|
522
|
+
|
523
|
+
# Creates the injector from bindings found in the current environment.
|
524
|
+
# @return [void]
|
525
|
+
# @api private
|
526
|
+
#
|
527
|
+
def create_injector
|
528
|
+
assert_binder_active()
|
529
|
+
composer = Puppet::Pops::Binder::BindingsComposer.new()
|
530
|
+
layered_bindings = composer.compose(topscope)
|
531
|
+
binder = Puppet::Pops::Binder::Binder.new()
|
532
|
+
binder.define_categories(composer.effective_categories(topscope))
|
533
|
+
binder.define_layers(layered_bindings)
|
534
|
+
@injector = Puppet::Pops::Binder::Injector.new(binder)
|
535
|
+
end
|
536
|
+
|
537
|
+
def assert_binder_active
|
538
|
+
unless is_binder_active?
|
539
|
+
raise ArgumentError, "The Puppet Binder is only available when either '--binder true' or '--parser future' is used"
|
540
|
+
end
|
541
|
+
end
|
484
542
|
end
|