puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -95,8 +95,12 @@ class Puppet::Parser::AST::PopsBridge
|
|
|
95
95
|
when Puppet::Pops::Model::SiteDefinition
|
|
96
96
|
instantiate_SiteDefinition(d, modname)
|
|
97
97
|
when Puppet::Pops::Model::FunctionDefinition
|
|
98
|
+
# The 3x logic calling this will not know what to do with the result, it is compacted away at the end
|
|
98
99
|
instantiate_FunctionDefinition(d, modname)
|
|
100
|
+
next
|
|
101
|
+
when Puppet::Pops::Model::TypeAlias
|
|
99
102
|
# The 3x logic calling this will not know what to do with the result, it is compacted away at the end
|
|
103
|
+
instantiate_TypeAlias(d, modname)
|
|
100
104
|
next
|
|
101
105
|
when Puppet::Pops::Model::Application
|
|
102
106
|
instantiate_ApplicationDefinition(d, modname)
|
|
@@ -242,35 +246,28 @@ class Puppet::Parser::AST::PopsBridge
|
|
|
242
246
|
# This is for 4x evaluator/loader
|
|
243
247
|
#
|
|
244
248
|
def instantiate_FunctionDefinition(function_definition, modname)
|
|
245
|
-
|
|
246
|
-
unless loaders
|
|
247
|
-
raise Puppet::ParseError, "Internal Error: Puppet Context ':loaders' missing - cannot define any functions"
|
|
248
|
-
end
|
|
249
|
-
loader =
|
|
250
|
-
if modname.nil? || modname == ""
|
|
251
|
-
# TODO : Later when functions can be private, a decision is needed regarding what that means.
|
|
252
|
-
# A private environment loader could be used for logic outside of modules, then only that logic
|
|
253
|
-
# would see the function.
|
|
254
|
-
#
|
|
255
|
-
# Use the private loader, this function may see the environment's dependencies (currently, all modules)
|
|
256
|
-
loaders.private_environment_loader()
|
|
257
|
-
else
|
|
258
|
-
# TODO : Later check if function is private, and then add it to
|
|
259
|
-
# private_loader_for_module
|
|
260
|
-
#
|
|
261
|
-
loaders.public_loader_for_module(modname)
|
|
262
|
-
end
|
|
263
|
-
unless loader
|
|
264
|
-
raise Puppet::ParseError, "Internal Error: did not find public loader for module: '#{modname}'"
|
|
265
|
-
end
|
|
249
|
+
loader = Puppet::Pops::Loaders.find_loader(modname)
|
|
266
250
|
|
|
267
|
-
# Instantiate Function, and store it in the
|
|
251
|
+
# Instantiate Function, and store it in the loader
|
|
268
252
|
typed_name, f = Puppet::Pops::Loader::PuppetFunctionInstantiator.create_from_model(function_definition, loader)
|
|
269
253
|
loader.set_entry(typed_name, f, Puppet::Pops::Adapters::SourcePosAdapter.adapt(function_definition).to_uri)
|
|
270
254
|
|
|
271
255
|
nil # do not want the function to inadvertently leak into 3x
|
|
272
256
|
end
|
|
273
257
|
|
|
258
|
+
# Propagates a found TypeAlias to the appropriate loader.
|
|
259
|
+
# This is for 4x evaluator/loader
|
|
260
|
+
#
|
|
261
|
+
def instantiate_TypeAlias(type_alias, modname)
|
|
262
|
+
loader = Puppet::Pops::Loaders.find_loader(modname)
|
|
263
|
+
|
|
264
|
+
# Bind the type alias to the loader using the alias
|
|
265
|
+
typed_name, t = Puppet::Pops::Loader::TypeDefinitionInstantiator.create_from_model(type_alias, loader)
|
|
266
|
+
loader.set_entry(typed_name, t, Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_alias).to_uri)
|
|
267
|
+
|
|
268
|
+
nil # do not want the type alias to inadvertently leak into 3x
|
|
269
|
+
end
|
|
270
|
+
|
|
274
271
|
def code()
|
|
275
272
|
Expression.new(:value => @value)
|
|
276
273
|
end
|
|
@@ -20,7 +20,6 @@ class Puppet::Parser::Compiler
|
|
|
20
20
|
include Puppet::Pops::Evaluator::Runtime3Support
|
|
21
21
|
|
|
22
22
|
def self.compile(node, code_id = nil)
|
|
23
|
-
$env_module_directories = nil
|
|
24
23
|
node.environment.check_for_reparse
|
|
25
24
|
|
|
26
25
|
errors = node.environment.validation_errors
|
|
@@ -28,7 +27,7 @@ class Puppet::Parser::Compiler
|
|
|
28
27
|
errors.each { |e| Puppet.err(e) } if errors.size > 1
|
|
29
28
|
errmsg = [
|
|
30
29
|
"Compilation has been halted because: #{errors.first}",
|
|
31
|
-
"For more information, see
|
|
30
|
+
"For more information, see https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
32
31
|
]
|
|
33
32
|
raise(Puppet::Error, errmsg.join(' '))
|
|
34
33
|
end
|
|
@@ -803,14 +802,7 @@ class Puppet::Parser::Compiler
|
|
|
803
802
|
if trusted_param
|
|
804
803
|
# Blows up if it is a parameter as it will be set as $trusted by the compiler as if it was a variable
|
|
805
804
|
node.parameters.delete('trusted')
|
|
806
|
-
|
|
807
|
-
# looks like a hash of trusted data - resurrect it
|
|
808
|
-
# Allow root to trust the authenticated information if option --trusted is given
|
|
809
|
-
if !Puppet.features.root?
|
|
810
|
-
# Set as not trusted - but keep the information
|
|
811
|
-
trusted_param['authenticated'] = false
|
|
812
|
-
end
|
|
813
|
-
else
|
|
805
|
+
unless trusted_param.is_a?(Hash) && %w{authenticated certname extensions}.all? {|key| trusted_param.has_key?(key) }
|
|
814
806
|
# trusted is some kind of garbage, do not resurrect
|
|
815
807
|
trusted_param = nil
|
|
816
808
|
end
|
|
@@ -842,7 +834,8 @@ class Puppet::Parser::Compiler
|
|
|
842
834
|
# Set the node's parameters into the top-scope as variables.
|
|
843
835
|
def set_node_parameters
|
|
844
836
|
node.parameters.each do |param, value|
|
|
845
|
-
|
|
837
|
+
# Ensure node does not leak Symbol instances in general
|
|
838
|
+
@topscope[param.to_s] = value.is_a?(Symbol) ? value.to_s : value
|
|
846
839
|
end
|
|
847
840
|
# These might be nil.
|
|
848
841
|
catalog.client_version = node.parameters["clientversion"]
|
|
@@ -16,6 +16,6 @@ Puppet::Parser::Functions::newfunction(:fqdn_rand, :arity => -2, :type => :rvalu
|
|
|
16
16
|
node. (For example, `fqdn_rand(30)`, `fqdn_rand(30, 'expensive job 1')`, and
|
|
17
17
|
`fqdn_rand(30, 'expensive job 2')` will produce totally different numbers.)") do |args|
|
|
18
18
|
max = args.shift.to_i
|
|
19
|
-
seed = Digest::MD5.hexdigest([self['::fqdn'],args].join(':')).hex
|
|
19
|
+
seed = Digest::MD5.hexdigest([self['::fqdn'],max,args].join(':')).hex
|
|
20
20
|
Puppet::Util.deterministic_rand_int(seed,max)
|
|
21
21
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :arity => -2, :doc =>
|
|
2
2
|
"Evaluate a template string and return its value. See
|
|
3
|
-
[the templating docs](
|
|
3
|
+
[the templating docs](https://docs.puppetlabs.com/puppet/latest/reference/lang_template.html) for
|
|
4
4
|
more information. Note that if multiple template strings are specified, their
|
|
5
5
|
output is all concatenated and returned as the output of the function.") do |vals|
|
|
6
6
|
|
|
@@ -1,154 +1,133 @@
|
|
|
1
1
|
Puppet::Parser::Functions.newfunction(:lookup, :type => :rvalue, :arity => -2, :doc => <<-'ENDHEREDOC') do |args|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
lookup
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
`
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
2
|
+
Uses the Puppet lookup system to retrieve a value for a given key. By default,
|
|
3
|
+
this returns the first value found (and fails compilation if no values are
|
|
4
|
+
available), but you can configure it to merge multiple values into one, fail
|
|
5
|
+
gracefully, and more.
|
|
6
|
+
|
|
7
|
+
When looking up a key, Puppet will search up to three tiers of data, in the
|
|
8
|
+
following order:
|
|
9
|
+
|
|
10
|
+
1. Hiera.
|
|
11
|
+
2. The current environment's data provider.
|
|
12
|
+
3. The indicated module's data provider, if the key is of the form
|
|
13
|
+
`<MODULE NAME>::<SOMETHING>`.
|
|
14
|
+
|
|
15
|
+
#### Arguments
|
|
16
|
+
|
|
17
|
+
You must provide the name of a key to look up, and can optionally provide other
|
|
18
|
+
arguments. You can combine these arguments in the following ways:
|
|
19
|
+
|
|
20
|
+
* `lookup( <NAME>, [<VALUE TYPE>], [<MERGE BEHAVIOR>], [<DEFAULT VALUE>] )`
|
|
21
|
+
* `lookup( [<NAME>], <OPTIONS HASH> )`
|
|
22
|
+
* `lookup( as above ) |$key| { # lambda returns a default value }`
|
|
23
|
+
|
|
24
|
+
Arguments in `[square brackets]` are optional.
|
|
25
|
+
|
|
26
|
+
The arguments accepted by `lookup` are as follows:
|
|
27
|
+
|
|
28
|
+
1. `<NAME>` (string or array) --- The name of the key to look up.
|
|
29
|
+
* This can also be an array of keys. If Puppet doesn't find anything for the
|
|
30
|
+
first key, it will try again with the subsequent ones, only resorting to a
|
|
31
|
+
default value if none of them succeed.
|
|
32
|
+
2. `<VALUE TYPE>` (data type) --- A
|
|
33
|
+
[data type](https://docs.puppetlabs.com/puppet/latest/reference/lang_data_type.html)
|
|
34
|
+
that must match the retrieved value; if not, the lookup (and catalog
|
|
35
|
+
compilation) will fail. Defaults to `Data` (accepts any normal value).
|
|
36
|
+
3. `<MERGE BEHAVIOR>` (string or hash; see **"Merge Behaviors"** below) ---
|
|
37
|
+
Whether (and how) to combine multiple values. If present, this overrides any
|
|
38
|
+
merge behavior specified in the data sources. Defaults to no value; Puppet will
|
|
39
|
+
use merge behavior from the data sources if present, and will otherwise do a
|
|
40
|
+
first-found lookup.
|
|
41
|
+
4. `<DEFAULT VALUE>` (any normal value) --- If present, `lookup` returns this
|
|
42
|
+
when it can't find a normal value. Default values are never merged with found
|
|
43
|
+
values. Like a normal value, the default must match the value type. Defaults to
|
|
44
|
+
no value; if Puppet can't find a normal value, the lookup (and compilation) will
|
|
45
|
+
fail.
|
|
46
|
+
5. `<OPTIONS HASH>` (hash) --- Alternate way to set the arguments above, plus
|
|
47
|
+
some less-common extra options. If you pass an options hash, you can't combine
|
|
48
|
+
it with any regular arguments (except `<NAME>`). An options hash can have the
|
|
49
|
+
following keys:
|
|
50
|
+
* `'name'` --- Same as `<NAME>` (argument 1). You can pass this as an
|
|
51
|
+
argument or in the hash, but not both.
|
|
52
|
+
* `'value_type'` --- Same as `<VALUE TYPE>` (argument 2).
|
|
53
|
+
* `'merge'` --- Same as `<MERGE BEHAVIOR>` (argument 3).
|
|
54
|
+
* `'default_value'` --- Same as `<DEFAULT VALUE>` (argument 4).
|
|
55
|
+
* `'default_values_hash'` (hash) --- A hash of lookup keys and default
|
|
56
|
+
values. If Puppet can't find a normal value, it will check this hash for the
|
|
57
|
+
requested key before giving up. You can combine this with `default_value` or
|
|
58
|
+
a lambda, which will be used if the key isn't present in this hash. Defaults
|
|
59
|
+
to an empty hash.
|
|
60
|
+
* `'override'` (hash) --- A hash of lookup keys and override values. Puppet
|
|
61
|
+
will check for the requested key in the overrides hash _first;_ if found, it
|
|
62
|
+
returns that value as the _final_ value, ignoring merge behavior. Defaults
|
|
63
|
+
to an empty hash.
|
|
64
|
+
|
|
65
|
+
Finally, `lookup` can take a lambda, which must accept a single parameter.
|
|
66
|
+
This is yet another way to set a default value for the lookup; if no results are
|
|
67
|
+
found, Puppet will pass the requested key to the lambda and use its result as
|
|
68
|
+
the default value.
|
|
69
|
+
|
|
70
|
+
#### Merge Behaviors
|
|
71
|
+
|
|
72
|
+
Puppet lookup uses a hierarchy of data sources, and a given key might have
|
|
73
|
+
values in multiple sources. By default, Puppet returns the first value it finds,
|
|
74
|
+
but it can also continue searching and merge all the values together.
|
|
75
|
+
|
|
76
|
+
> **Note:** Data sources can use the special `lookup_options` metadata key to
|
|
77
|
+
request a specific merge behavior for a key. The `lookup` function will use that
|
|
78
|
+
requested behavior unless you explicitly specify one.
|
|
79
|
+
|
|
80
|
+
The valid merge behaviors are:
|
|
81
|
+
|
|
82
|
+
* `'first'` --- Returns the first value found, with no merging. Puppet lookup's
|
|
83
|
+
default behavior.
|
|
84
|
+
* `'unique'` (called "array merge" in classic Hiera) --- Combines any number of
|
|
85
|
+
arrays and scalar values to return a merged, flattened array with all duplicate
|
|
86
|
+
values removed. The lookup will fail if any hash values are found.
|
|
87
|
+
* `'hash'` --- Combines the keys and values of any number of hashes to return a
|
|
88
|
+
merged hash. If the same key exists in multiple source hashes, Puppet will use
|
|
89
|
+
the value from the highest-priority data source; it won't recursively merge the
|
|
90
|
+
values.
|
|
91
|
+
* `'deep'` --- Combines the keys and values of any number of hashes to return a
|
|
92
|
+
merged hash. If the same key exists in multiple source hashes, Puppet will
|
|
93
|
+
recursively merge hash or array values (with duplicate values removed from
|
|
94
|
+
arrays). For conflicting scalar values, the highest-priority value will win.
|
|
95
|
+
* `{'strategy' => 'first|unique|hash'}` --- Same as the string versions of these
|
|
96
|
+
merge behaviors.
|
|
97
|
+
* `{'strategy' => 'deep', <DEEP OPTION> => <VALUE>, ...}` --- Same as `'deep'`,
|
|
98
|
+
but can adjust the merge with additional options. The available options are:
|
|
99
|
+
* `'knockout_prefix'` (string or undef) --- A string prefix to indicate a
|
|
100
|
+
value should be _removed_ from the final result. Defaults to `undef`, which
|
|
101
|
+
disables this feature.
|
|
102
|
+
* `'sort_merged_arrays'` (boolean) --- Whether to sort all arrays that are
|
|
103
|
+
merged together. Defaults to `false`.
|
|
104
|
+
* `'unpack_arrays'` (string or undef) --- A delimiter string; Puppet will
|
|
105
|
+
join merged arrays with this delimiter, then split them again. Defaults to
|
|
106
|
+
`undef`, which disables this feature.
|
|
107
|
+
* `'merge_hash_arrays'` (boolean) --- Whether to merge hashes within arrays.
|
|
108
|
+
Defaults to `false`.
|
|
109
|
+
|
|
110
|
+
#### Examples
|
|
111
|
+
|
|
112
|
+
Look up a key and return the first value found:
|
|
113
|
+
|
|
114
|
+
lookup('ntp::service_name')
|
|
115
|
+
|
|
116
|
+
Do a unique merge lookup of class names, then add all of those classes to the
|
|
117
|
+
catalog (like `hiera_include`):
|
|
118
|
+
|
|
119
|
+
lookup('classes', Array[String], 'unique').include
|
|
120
|
+
|
|
121
|
+
Do a deep hash merge lookup of user data, but let higher priority sources
|
|
122
|
+
remove values by prefixing them with `--`:
|
|
123
|
+
|
|
124
|
+
lookup( { 'name' => 'users',
|
|
125
|
+
'merge' => {
|
|
126
|
+
'strategy' => 'deep',
|
|
127
|
+
'knockout_prefix' => '--',
|
|
128
|
+
},
|
|
129
|
+
})
|
|
106
130
|
|
|
107
|
-
The produced value is subject to type validation using the `value_type` (if given) and an error is raised unless
|
|
108
|
-
the resulting value is of correct type.
|
|
109
|
-
|
|
110
|
-
*Examples*
|
|
111
|
-
|
|
112
|
-
When called with one argument; **the name**, it
|
|
113
|
-
returns the bound value with the given name after having asserted it has the default datatype `Data`:
|
|
114
|
-
|
|
115
|
-
lookup('the_name')
|
|
116
|
-
|
|
117
|
-
When called with two arguments; **the name**, and **the expected type**, it
|
|
118
|
-
returns the bound value with the given name after having asserted it has the given data
|
|
119
|
-
type ('String' in the example):
|
|
120
|
-
|
|
121
|
-
lookup('the_name', String)
|
|
122
|
-
|
|
123
|
-
When called with four arguments, **the name**, the **expected type**, the **merge** strategy, and a
|
|
124
|
-
**default value**, it returns the bound value with the given name, or the default after having asserted the value
|
|
125
|
-
has the given data type:
|
|
126
|
-
|
|
127
|
-
lookup('the_name', String, undef, 'Fred')
|
|
128
|
-
lookup('the_name', Array[String], 'unique', [Fred])
|
|
129
|
-
|
|
130
|
-
Using a lambda to provide a default value by calling a function:
|
|
131
|
-
|
|
132
|
-
lookup('the_size', Integer[1,100]) |$name| {
|
|
133
|
-
obtain_size_default()
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
There are two ways to make lookup return undef when no matching key was found instead of raising an error.
|
|
137
|
-
Either call it with four arguments (the `merge` argument must be present even when using the default strategy
|
|
138
|
-
to ensure that the four argument variant is used):
|
|
139
|
-
|
|
140
|
-
$are_you_there = lookup('peekaboo', Optional[String], undef, undef)
|
|
141
|
-
|
|
142
|
-
or call it using an options hash:
|
|
143
|
-
|
|
144
|
-
$are_you_there = lookup('peekaboo', { 'default_value' => undef })
|
|
145
|
-
$are_you_there = lookup({ 'name' => 'peekaboo', 'default_value' => undef })
|
|
146
|
-
|
|
147
|
-
or with a block that produces an undef value:
|
|
148
|
-
|
|
149
|
-
$are_you_there = lookup('peekaboo', Optional[String]) |$name| { undef }
|
|
150
|
-
|
|
151
|
-
- Since 4.0.0
|
|
152
131
|
ENDHEREDOC
|
|
153
132
|
function_fail(["lookup() has been converted to 4x API"])
|
|
154
133
|
end
|
|
@@ -3,7 +3,7 @@ Puppet::Parser::Functions::newfunction(
|
|
|
3
3
|
:type => :rvalue,
|
|
4
4
|
:arity => -3,
|
|
5
5
|
:doc => <<-DOC
|
|
6
|
-
Applies a [lambda](
|
|
6
|
+
Applies a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
7
7
|
to every value in a data structure and returns an array containing the results.
|
|
8
8
|
|
|
9
9
|
This function takes two mandatory arguments, in this order:
|
|
@@ -5,37 +5,26 @@ Puppet::Parser::Functions::newfunction(
|
|
|
5
5
|
:type => :rvalue,
|
|
6
6
|
:arity => 2,
|
|
7
7
|
:doc => <<-DOC
|
|
8
|
-
Scans a string and returns an array of one or more converted values
|
|
9
|
-
See the documenation of Ruby's String
|
|
10
|
-
are similar but not identical to the formats used in Puppet's `sprintf` function.
|
|
8
|
+
Scans a string and returns an array of one or more converted values based on the given format string.
|
|
9
|
+
See the documenation of Ruby's String#scanf method for details about the supported formats (which
|
|
10
|
+
are similar but not identical to the formats used in Puppet's `sprintf` function.)
|
|
11
11
|
|
|
12
|
-
This function takes two mandatory arguments: the first is the
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
there was no succesful scan at all, the result is an empty Array.
|
|
12
|
+
This function takes two mandatory arguments: the first is the string to convert, and the second is
|
|
13
|
+
the format string. The result of the scan is an array, with each sucessfully scanned and transformed value.
|
|
14
|
+
The scanning stops if a scan is unsuccesful, and the scanned result up to that point is returned. If there
|
|
15
|
+
was no succesful scan, the result is an empty array.
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
"42".scanf("%i")
|
|
19
18
|
|
|
19
|
+
You can also optionally pass a lambda to scanf, to do additional validation or processing.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
The optional code block is typically used to assert that the scan was
|
|
26
|
-
succesful, and either produce the same input, or perform unwrapping of
|
|
27
|
-
the result:
|
|
28
|
-
|
|
29
|
-
"42".scanf("%i")
|
|
30
|
-
"42".scanf("%i") |$x| {
|
|
31
|
-
unless $x[0] =~ Integer {
|
|
32
|
-
fail "Expected a well formed integer value, got '$x[0]'"
|
|
33
|
-
}
|
|
34
|
-
$x[0]
|
|
21
|
+
"42".scanf("%i") |$x| {
|
|
22
|
+
unless $x[0] =~ Integer {
|
|
23
|
+
fail "Expected a well formed integer value, got '$x[0]'"
|
|
35
24
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- since
|
|
25
|
+
$x[0]
|
|
26
|
+
}
|
|
27
|
+
- since 4.0.0
|
|
39
28
|
DOC
|
|
40
29
|
) do |args|
|
|
41
30
|
data = args[0]
|
|
@@ -3,42 +3,35 @@ Puppet::Parser::Functions::newfunction(
|
|
|
3
3
|
:type => :rvalue,
|
|
4
4
|
:arity => -3,
|
|
5
5
|
:doc => <<-DOC
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
the slices.
|
|
6
|
+
This function takes two mandatory arguments: the first should be an array or hash, and the second specifies
|
|
7
|
+
the number of elements to include in each slice.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
enumerable type (integer, Integer range, or String), and the second, `$n`, the number of elements to include
|
|
12
|
-
in each slice. The optional third argument should be a a parameterized block as produced by the puppet syntax:
|
|
13
|
-
|
|
14
|
-
$a.slice($n) |$x| { ... }
|
|
15
|
-
slice($a) |$x| { ... }
|
|
16
|
-
|
|
17
|
-
The parameterized block should have either one parameter (receiving an array with the slice), or the same number
|
|
18
|
-
of parameters as specified by the slice size (each parameter receiving its part of the slice).
|
|
19
|
-
In case there are fewer remaining elements than the slice size for the last slice it will contain the remaining
|
|
20
|
-
elements. When the block has multiple parameters, excess parameters are set to undef for an array or
|
|
21
|
-
enumerable type, and to empty arrays for a Hash.
|
|
22
|
-
|
|
23
|
-
$a.slice(2) |$first, $second| { ... }
|
|
24
|
-
|
|
25
|
-
When the first argument is a Hash, each `key,value` entry is counted as one, e.g, a slice size of 2 will produce
|
|
9
|
+
When the first argument is a hash, each key value pair is counted as one. For example, a slice size of 2 will produce
|
|
26
10
|
an array of two arrays with key, and value.
|
|
27
11
|
|
|
28
|
-
Example Using slice with Hash
|
|
29
|
-
|
|
30
12
|
$a.slice(2) |$entry| { notice "first ${$entry[0]}, second ${$entry[1]}" }
|
|
31
13
|
$a.slice(2) |$first, $second| { notice "first ${first}, second ${second}" }
|
|
32
14
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Example Using slice without a block
|
|
15
|
+
The function produces a concatenated result of the slices.
|
|
36
16
|
|
|
37
17
|
slice([1,2,3,4,5,6], 2) # produces [[1,2], [3,4], [5,6]]
|
|
38
18
|
slice(Integer[1,6], 2) # produces [[1,2], [3,4], [5,6]]
|
|
39
19
|
slice(4,2) # produces [[0,1], [2,3]]
|
|
40
20
|
slice('hello',2) # produces [[h, e], [l, l], [o]]
|
|
41
21
|
|
|
22
|
+
You can also optionally pass a lambda to slice.
|
|
23
|
+
|
|
24
|
+
$a.slice($n) |$x| { ... }
|
|
25
|
+
slice($a) |$x| { ... }
|
|
26
|
+
|
|
27
|
+
The lambda should have either one parameter (receiving an array with the slice), or the same number
|
|
28
|
+
of parameters as specified by the slice size (each parameter receiving its part of the slice).
|
|
29
|
+
If there are fewer remaining elements than the slice size for the last slice, it will contain the remaining
|
|
30
|
+
elements. If the lambda has multiple parameters, excess parameters are set to undef for an array, or
|
|
31
|
+
to empty arrays for a hash.
|
|
32
|
+
|
|
33
|
+
$a.slice(2) |$first, $second| { ... }
|
|
34
|
+
|
|
42
35
|
- Since 4.0.0
|
|
43
36
|
DOC
|
|
44
37
|
) do |args|
|
|
@@ -12,7 +12,7 @@ Split a string variable into an array using the specified split regexp.
|
|
|
12
12
|
$string = 'v1.v2:v3.v4'
|
|
13
13
|
$array_var1 = split($string, ':')
|
|
14
14
|
$array_var2 = split($string, '[.]')
|
|
15
|
-
$array_var3 = split($string, '[.:]')
|
|
15
|
+
$array_var3 = split($string, Regexp['[.:]'])
|
|
16
16
|
|
|
17
17
|
`$array_var1` now holds the result `['v1.v2', 'v3.v4']`,
|
|
18
18
|
while `$array_var2` holds `['v1', 'v2:v3', 'v4']`, and
|