puppet 4.2.0 → 4.3.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.
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +5 -7
- data/README.md +1 -1
- data/Rakefile +20 -0
- data/ext/debian/puppet.init +0 -1
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/osx/puppet.plist +2 -4
- data/ext/project_data.yaml +1 -1
- data/ext/redhat/client.init +65 -12
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +5 -1
- data/ext/redhat/server.init +1 -1
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +44 -0
- data/ext/suse/client.init +27 -27
- data/ext/suse/server.init +2 -2
- data/ext/systemd/puppet.service +1 -0
- data/install.rb +21 -39
- data/lib/hiera/puppet_function.rb +5 -5
- data/lib/puppet/agent/locker.rb +11 -2
- data/lib/puppet/agent.rb +4 -4
- data/lib/puppet/application/agent.rb +28 -14
- data/lib/puppet/application/apply.rb +17 -4
- data/lib/puppet/application/cert.rb +16 -0
- data/lib/puppet/application/filebucket.rb +78 -4
- data/lib/puppet/application/lookup.rb +356 -0
- data/lib/puppet/application/master.rb +5 -1
- data/lib/puppet/configurer.rb +9 -5
- data/lib/puppet/context/trusted_information.rb +21 -1
- data/lib/puppet/context.rb +16 -1
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- data/lib/puppet/data_providers/data_adapter.rb +7 -68
- data/lib/puppet/data_providers/data_function_support.rb +5 -26
- data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
- data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
- data/lib/puppet/data_providers/hiera_config.rb +106 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
- data/lib/puppet/data_providers/hiera_support.rb +37 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
- data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
- data/lib/puppet/data_providers.rb +12 -13
- data/lib/puppet/defaults.rb +14 -3
- data/lib/puppet/environments.rb +94 -6
- data/lib/puppet/error.rb +4 -0
- data/lib/puppet/face/module/changes.rb +2 -1
- data/lib/puppet/feature/cfacter.rb +1 -0
- data/lib/puppet/file_bucket/dipper.rb +58 -2
- data/lib/puppet/file_system/windows.rb +3 -1
- data/lib/puppet/functions/assert_type.rb +48 -12
- data/lib/puppet/functions/defined.rb +79 -48
- data/lib/puppet/functions/each.rb +85 -27
- data/lib/puppet/functions/epp.rb +29 -37
- data/lib/puppet/functions/filter.rb +60 -25
- data/lib/puppet/functions/hiera.rb +76 -3
- data/lib/puppet/functions/hiera_array.rb +65 -3
- data/lib/puppet/functions/hiera_hash.rb +74 -2
- data/lib/puppet/functions/hiera_include.rb +77 -4
- data/lib/puppet/functions/inline_epp.rb +44 -71
- data/lib/puppet/functions/lookup.rb +19 -17
- data/lib/puppet/functions/map.rb +56 -21
- data/lib/puppet/functions/match.rb +29 -12
- data/lib/puppet/functions/reduce.rb +95 -58
- data/lib/puppet/functions/versioncmp.rb +36 -0
- data/lib/puppet/functions/with.rb +15 -7
- data/lib/puppet/functions.rb +2 -4
- data/lib/puppet/indirector/catalog/compiler.rb +3 -3
- data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
- data/lib/puppet/indirector/data_binding/none.rb +4 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +6 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/request.rb +7 -8
- data/lib/puppet/indirector/resource_type/parser.rb +5 -3
- data/lib/puppet/info_service/class_information_service.rb +111 -0
- data/lib/puppet/info_service.rb +7 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/metadata.rb +32 -9
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
- data/lib/puppet/network/authconfig.rb +21 -1
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/node/environment.rb +9 -2
- data/lib/puppet/node.rb +11 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler.rb +300 -12
- data/lib/puppet/parser/environment_compiler.rb +165 -0
- data/lib/puppet/parser/functions/assert_type.rb +46 -16
- data/lib/puppet/parser/functions/defined.rb +105 -68
- data/lib/puppet/parser/functions/each.rb +85 -27
- data/lib/puppet/parser/functions/epp.rb +29 -37
- data/lib/puppet/parser/functions/filter.rb +59 -23
- data/lib/puppet/parser/functions/hiera.rb +83 -27
- data/lib/puppet/parser/functions/hiera_array.rb +71 -28
- data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
- data/lib/puppet/parser/functions/hiera_include.rb +81 -40
- data/lib/puppet/parser/functions/inline_epp.rb +35 -60
- data/lib/puppet/parser/functions/inline_template.rb +2 -2
- data/lib/puppet/parser/functions/map.rb +55 -20
- data/lib/puppet/parser/functions/match.rb +27 -12
- data/lib/puppet/parser/functions/reduce.rb +97 -60
- data/lib/puppet/parser/functions/with.rb +16 -8
- data/lib/puppet/parser/resource.rb +103 -21
- data/lib/puppet/parser.rb +3 -0
- data/lib/puppet/plugins/configuration.rb +3 -2
- data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
- data/lib/puppet/plugins/data_providers/registry.rb +84 -0
- data/lib/puppet/plugins/data_providers.rb +12 -60
- data/lib/puppet/pops/adapters.rb +12 -0
- data/lib/puppet/pops/binder/binder.rb +2 -2
- data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
- data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
- data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
- data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
- data/lib/puppet/pops/binder/injector.rb +4 -4
- data/lib/puppet/pops/binder/key_factory.rb +3 -9
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
- data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
- data/lib/puppet/pops/evaluator/closure.rb +8 -8
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +10 -6
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
- data/lib/puppet/pops/functions/dispatcher.rb +3 -3
- data/lib/puppet/pops/issues.rb +11 -3
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/lookup/explainer.rb +402 -0
- data/lib/puppet/pops/lookup/invocation.rb +117 -0
- data/lib/puppet/pops/lookup.rb +25 -47
- data/lib/puppet/pops/merge_strategy.rb +73 -5
- data/lib/puppet/pops/model/factory.rb +38 -3
- data/lib/puppet/pops/model/model_label_provider.rb +10 -1
- data/lib/puppet/pops/model/model_meta.rb +19 -1
- data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
- data/lib/puppet/pops/parser/code_merger.rb +13 -1
- data/lib/puppet/pops/parser/egrammar.ra +65 -2
- data/lib/puppet/pops/parser/eparser.rb +1569 -1241
- data/lib/puppet/pops/parser/lexer2.rb +32 -1
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +25 -13
- data/lib/puppet/pops/patterns.rb +3 -0
- data/lib/puppet/pops/types/enumeration.rb +1 -2
- data/lib/puppet/pops/types/type_asserter.rb +16 -15
- data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
- data/lib/puppet/pops/types/type_calculator.rb +171 -1020
- data/lib/puppet/pops/types/type_factory.rb +87 -148
- data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
- data/lib/puppet/pops/types/type_parser.rb +118 -129
- data/lib/puppet/pops/types/types.rb +1394 -255
- data/lib/puppet/pops/types/types_meta.rb +0 -234
- data/lib/puppet/pops/validation/checker4_0.rb +49 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
- data/lib/puppet/pops/validation.rb +7 -2
- data/lib/puppet/pops.rb +19 -17
- data/lib/puppet/provider/augeas/augeas.rb +50 -0
- data/lib/puppet/provider/exec.rb +6 -1
- data/lib/puppet/provider/group/directoryservice.rb +10 -0
- data/lib/puppet/provider/package/dnf.rb +41 -0
- data/lib/puppet/provider/package/gem.rb +7 -2
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +1 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
- data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
- data/lib/puppet/provider/package/windows/package.rb +9 -1
- data/lib/puppet/provider/package/yum.rb +20 -9
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +21 -0
- data/lib/puppet/provider/service/init.rb +6 -0
- data/lib/puppet/provider/service/launchd.rb +36 -7
- data/lib/puppet/provider/service/rcng.rb +51 -0
- data/lib/puppet/provider/service/redhat.rb +2 -1
- data/lib/puppet/provider/service/smf.rb +43 -2
- data/lib/puppet/provider/service/src.rb +27 -0
- data/lib/puppet/provider/service/systemd.rb +25 -5
- data/lib/puppet/provider/sshkey/parsed.rb +19 -9
- data/lib/puppet/provider/zone/solaris.rb +2 -2
- data/lib/puppet/reference/configuration.rb +10 -4
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reports.rb +5 -1
- data/lib/puppet/resource/capability_finder.rb +95 -0
- data/lib/puppet/resource/catalog.rb +47 -7
- data/lib/puppet/resource/status.rb +0 -2
- data/lib/puppet/resource/type.rb +238 -44
- data/lib/puppet/resource/type_collection.rb +60 -2
- data/lib/puppet/resource.rb +50 -73
- data/lib/puppet/settings/file_setting.rb +10 -9
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
- data/lib/puppet/ssl/oids.rb +9 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
- data/lib/puppet/transaction/resource_harness.rb +9 -4
- data/lib/puppet/transaction.rb +8 -1
- data/lib/puppet/type/augeas.rb +8 -0
- data/lib/puppet/type/file/source.rb +14 -12
- data/lib/puppet/type/package.rb +9 -6
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/type.rb +78 -7
- data/lib/puppet/util/command_line.rb +4 -0
- data/lib/puppet/util/execution.rb +18 -2
- data/lib/puppet/util/tagging.rb +7 -1
- data/lib/puppet/util/windows/adsi.rb +5 -2
- data/lib/puppet/util/windows/security.rb +4 -1
- data/lib/puppet/util/windows/taskscheduler.rb +1 -1
- data/lib/puppet/util.rb +9 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +12 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
- data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
- data/spec/integration/data_binding_spec.rb +229 -0
- data/spec/integration/file_bucket/file_spec.rb +2 -2
- data/spec/integration/parser/compiler_spec.rb +30 -24
- data/spec/integration/parser/resource_expressions_spec.rb +4 -4
- data/spec/integration/parser/undef_param_spec.rb +1 -1
- data/spec/integration/provider/package_spec.rb +3 -1
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
- data/spec/integration/ssl/certificate_request_spec.rb +0 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
- data/spec/integration/ssl/host_spec.rb +0 -1
- data/spec/integration/type/package_spec.rb +2 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +18 -0
- data/spec/lib/matchers/include_in_order.rb +2 -2
- data/spec/shared_behaviours/iterative_functions.rb +8 -8
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/agent/locker_spec.rb +4 -4
- data/spec/unit/agent_spec.rb +0 -8
- data/spec/unit/application/agent_spec.rb +5 -0
- data/spec/unit/application/apply_spec.rb +9 -1
- data/spec/unit/application/filebucket_spec.rb +88 -2
- data/spec/unit/application/lookup_spec.rb +195 -0
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +3 -3
- data/spec/unit/appmgmt_spec.rb +657 -0
- data/spec/unit/capability_spec.rb +414 -0
- data/spec/unit/configurer_spec.rb +7 -1
- data/spec/unit/context/trusted_information_spec.rb +24 -1
- data/spec/unit/daemon_spec.rb +18 -8
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
- data/spec/unit/environments_spec.rb +2 -0
- data/spec/unit/face/node_spec.rb +1 -1
- data/spec/unit/file_bucket/dipper_spec.rb +210 -1
- data/spec/unit/file_serving/configuration_spec.rb +1 -1
- data/spec/unit/file_system_spec.rb +20 -0
- data/spec/unit/functions/assert_type_spec.rb +5 -7
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +2 -2
- data/spec/unit/functions/filter_spec.rb +18 -0
- data/spec/unit/functions/hiera_spec.rb +2 -2
- data/spec/unit/functions/lookup_spec.rb +200 -9
- data/spec/unit/functions/regsubst_spec.rb +17 -8
- data/spec/unit/functions/scanf_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +2 -2
- data/spec/unit/functions/versioncmp_spec.rb +36 -0
- data/spec/unit/functions4_spec.rb +58 -72
- data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
- data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
- data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
- data/spec/unit/indirector/indirection_spec.rb +13 -2
- data/spec/unit/indirector/request_spec.rb +8 -8
- data/spec/unit/indirector/ssl_file_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +236 -0
- data/spec/unit/module_tool/application_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
- data/spec/unit/module_tool/metadata_spec.rb +31 -2
- data/spec/unit/network/authconfig_spec.rb +62 -32
- data/spec/unit/network/authorization_spec.rb +30 -2
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/compression_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +14 -19
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/network/rights_spec.rb +3 -3
- data/spec/unit/node_spec.rb +27 -0
- data/spec/unit/parser/ast/leaf_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +86 -2
- data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +2 -20
- data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
- data/spec/unit/pops/binder/injector_spec.rb +3 -3
- data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +20 -11
- data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
- data/spec/unit/pops/label_provider_spec.rb +5 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +39 -0
- data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
- data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +18 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
- data/spec/unit/pops/types/type_factory_spec.rb +12 -12
- data/spec/unit/pops/types/type_parser_spec.rb +15 -12
- data/spec/unit/pops/validator/validator_spec.rb +68 -0
- data/spec/unit/property_spec.rb +1 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
- data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
- data/spec/unit/provider/package/dnf_spec.rb +92 -0
- data/spec/unit/provider/package/gem_spec.rb +7 -0
- data/spec/unit/provider/package/nim_spec.rb +6 -6
- data/spec/unit/provider/package/rpm_spec.rb +25 -2
- data/spec/unit/provider/package/windows/package_spec.rb +41 -0
- data/spec/unit/provider/package/yum_spec.rb +35 -12
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
- data/spec/unit/provider/service/debian_spec.rb +28 -0
- data/spec/unit/provider/service/gentoo_spec.rb +1 -0
- data/spec/unit/provider/service/init_spec.rb +6 -0
- data/spec/unit/provider/service/launchd_spec.rb +85 -10
- data/spec/unit/provider/service/openrc_spec.rb +1 -0
- data/spec/unit/provider/service/rcng_spec.rb +41 -0
- data/spec/unit/provider/service/redhat_spec.rb +8 -1
- data/spec/unit/provider/service/smf_spec.rb +30 -5
- data/spec/unit/provider/service/src_spec.rb +20 -4
- data/spec/unit/provider/service/systemd_spec.rb +79 -29
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
- data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
- data/spec/unit/provider/zone/solaris_spec.rb +19 -0
- data/spec/unit/reports_spec.rb +10 -0
- data/spec/unit/resource/capability_finder_spec.rb +56 -0
- data/spec/unit/resource/catalog_spec.rb +31 -8
- data/spec/unit/resource/type_collection_spec.rb +23 -2
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +23 -5
- data/spec/unit/settings/file_setting_spec.rb +31 -0
- data/spec/unit/settings_spec.rb +91 -2
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
- data/spec/unit/ssl/host_spec.rb +2 -2
- data/spec/unit/ssl/oids_spec.rb +8 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
- data/spec/unit/transaction/report_spec.rb +24 -1
- data/spec/unit/transaction_spec.rb +7 -0
- data/spec/unit/type/exec_spec.rb +16 -8
- data/spec/unit/type/host_spec.rb +4 -4
- data/spec/unit/type/package_spec.rb +1 -0
- data/spec/unit/type/tidy_spec.rb +4 -4
- data/spec/unit/type/user_spec.rb +14 -7
- data/spec/unit/type/vlan_spec.rb +1 -1
- data/spec/unit/type_spec.rb +1 -1
- data/spec/unit/util/ldap/generator_spec.rb +1 -1
- data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
- data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
- data/spec/unit/util/network_device_spec.rb +1 -1
- data/spec/unit/util/storage_spec.rb +5 -1
- data/spec/unit/util/windows/adsi_spec.rb +13 -0
- data/spec/unit/util_spec.rb +21 -2
- metadata +173 -7
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/spec/integration/data_binding.rb +0 -104
|
@@ -1,71 +1,108 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
1
|
+
Puppet::Parser::Functions::newfunction(
|
|
2
|
+
:defined,
|
|
3
|
+
:type => :rvalue,
|
|
4
|
+
:arity => -2,
|
|
5
|
+
:doc => <<DOC
|
|
6
|
+
Determines whether a given class or resource type is defined and returns a Boolean
|
|
7
|
+
value. You can also use `defined` to determine whether a specific resource is defined,
|
|
8
|
+
or whether a variable has a value (including `undef`, as opposed to the variable never
|
|
9
|
+
being declared or assigned).
|
|
10
|
+
|
|
11
|
+
This function takes at least one string argument, which can be a class name, type name,
|
|
12
|
+
resource reference, or variable reference of the form `'$name'`.
|
|
13
|
+
|
|
14
|
+
The `defined` function checks both native and defined types, including types
|
|
15
|
+
provided by modules. Types and classes are matched by their names. The function matches
|
|
16
|
+
resource declarations by using resource references.
|
|
17
|
+
|
|
18
|
+
**Examples**: Different types of `defined` function matches
|
|
19
|
+
|
|
20
|
+
~~~ puppet
|
|
21
|
+
# Matching resource types
|
|
22
|
+
defined("file")
|
|
23
|
+
defined("customtype")
|
|
24
|
+
|
|
25
|
+
# Matching defines and classes
|
|
26
|
+
defined("foo")
|
|
27
|
+
defined("foo::bar")
|
|
28
|
+
|
|
29
|
+
# Matching variables
|
|
30
|
+
defined('$name')
|
|
31
|
+
|
|
32
|
+
# Matching declared resources
|
|
33
|
+
defined(File['/tmp/file'])
|
|
34
|
+
~~~
|
|
35
|
+
|
|
36
|
+
Puppet depends on the configuration's evaluation order when checking whether a resource
|
|
37
|
+
is declared.
|
|
38
|
+
|
|
39
|
+
**Example**: Importance of evaluation order when using `defined`
|
|
40
|
+
|
|
41
|
+
~~~ puppet
|
|
42
|
+
# Assign values to $is_defined_before and $is_defined_after using identical `defined`
|
|
43
|
+
# functions.
|
|
44
|
+
|
|
45
|
+
$is_defined_before = defined(File['/tmp/file'])
|
|
46
|
+
|
|
47
|
+
file { "/tmp/file":
|
|
48
|
+
ensure => present,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
$is_defined_after = defined(File['/tmp/file'])
|
|
52
|
+
|
|
53
|
+
# $is_defined_before returns false, but $is_defined_after returns true.
|
|
54
|
+
~~~
|
|
55
|
+
|
|
56
|
+
This order requirement only refers to evaluation order. The order of resources in the
|
|
57
|
+
configuration graph (e.g. with `before` or `require`) does not affect the `defined`
|
|
58
|
+
function's behavior.
|
|
59
|
+
|
|
60
|
+
> **Warning:** Avoid relying on the result of the `defined` function in modules, as you
|
|
61
|
+
> might not be able to guarantee the evaluation order well enough to produce consistent
|
|
62
|
+
> results. This can cause other code that relies on the function's result to behave
|
|
63
|
+
> inconsistently or fail.
|
|
64
|
+
|
|
65
|
+
If you pass more than one argument to `defined`, the function returns `true` if _any_
|
|
66
|
+
of the arguments are defined. You can also match resources by type, allowing you to
|
|
67
|
+
match conditions of different levels of specificity, such as whether a specific resource
|
|
68
|
+
is of a specific data type.
|
|
69
|
+
|
|
70
|
+
**Example**: Matching multiple resources and resources by different types with `defined`
|
|
71
|
+
|
|
72
|
+
~~~ puppet
|
|
73
|
+
file { "/tmp/file1":
|
|
74
|
+
ensure => file,
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
$tmp_file = file { "/tmp/file2":
|
|
78
|
+
ensure => file,
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
# Each of these statements return `true` ...
|
|
82
|
+
defined(File['/tmp/file1'])
|
|
83
|
+
defined(File['/tmp/file1'],File['/tmp/file2'])
|
|
84
|
+
defined(File['/tmp/file1'],File['/tmp/file2'],File['/tmp/file3'])
|
|
85
|
+
# ... but this returns `false`.
|
|
86
|
+
defined(File['/tmp/file3'])
|
|
87
|
+
|
|
88
|
+
# Each of these statements returns `true` ...
|
|
89
|
+
defined(Type[Resource['file','/tmp/file2']])
|
|
90
|
+
defined(Resource['file','/tmp/file2'])
|
|
91
|
+
defined(File['/tmp/file2'])
|
|
92
|
+
defined('$tmp_file')
|
|
93
|
+
# ... but each of these returns `false`.
|
|
94
|
+
defined(Type[Resource['exec','/tmp/file2']])
|
|
95
|
+
defined(Resource['exec','/tmp/file2'])
|
|
96
|
+
defined(File['/tmp/file3'])
|
|
97
|
+
defined('$tmp_file2')
|
|
98
|
+
~~~
|
|
99
|
+
|
|
100
|
+
- Since 2.7.0
|
|
101
|
+
- Since 3.6.0 variable reference and future parser types
|
|
102
|
+
- Since 3.8.1 type specific requests with future parser
|
|
103
|
+
- Since 4.0.0
|
|
104
|
+
DOC
|
|
105
|
+
) do |vals|
|
|
69
106
|
vals = [vals] unless vals.is_a?(Array)
|
|
70
107
|
vals.any? do |val|
|
|
71
108
|
case val
|
|
@@ -3,41 +3,99 @@ Puppet::Parser::Functions::newfunction(
|
|
|
3
3
|
:type => :rvalue,
|
|
4
4
|
:arity => -3,
|
|
5
5
|
:doc => <<-DOC
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Runs a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
7
|
+
repeatedly using each value in a data structure, then returns the values unchanged.
|
|
8
8
|
|
|
9
|
-
This function takes two mandatory arguments
|
|
10
|
-
of enumerable type (integer, Integer range, or String), and the second
|
|
11
|
-
a parameterized block as produced by the puppet syntax:
|
|
9
|
+
This function takes two mandatory arguments, in this order:
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
1. An array or hash the function will iterate over.
|
|
12
|
+
2. A lambda, which the function calls for each element in the first argument. It can
|
|
13
|
+
request one or two parameters.
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
should define one or two block parameters.
|
|
18
|
-
For each application of the block, the next element from the array is selected, and it is passed to
|
|
19
|
-
the block if the block has one parameter. If the block has two parameters, the first is the elements
|
|
20
|
-
index, and the second the value. The index starts from 0.
|
|
15
|
+
**Example**: Using the `each` function
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
each($a) |$index, $value| { ... }
|
|
17
|
+
`$data.each |$parameter| { <PUPPET CODE BLOCK> }`
|
|
24
18
|
|
|
25
|
-
|
|
26
|
-
When one parameter is defined, the iteration is performed with each entry as an array of `[key, value]`,
|
|
27
|
-
and when two parameters are defined the iteration is performed with key and value.
|
|
19
|
+
or
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
$a.each |$key, $value| { ..."key ${key}, value ${value}" }
|
|
21
|
+
`each($data) |$parameter| { <PUPPET CODE BLOCK> }`
|
|
31
22
|
|
|
32
|
-
|
|
23
|
+
When the first argument (`$data` in the above example) is an array, Puppet passes each
|
|
24
|
+
value in turn to the lambda, then returns the original values.
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
**Example**: Using the `each` function with an array and a one-parameter lambda
|
|
27
|
+
|
|
28
|
+
~~~ puppet
|
|
29
|
+
# For the array $data, run a lambda that creates a resource for each item.
|
|
30
|
+
$data = ["routers", "servers", "workstations"]
|
|
31
|
+
$data.each |$item| {
|
|
32
|
+
notify { $item:
|
|
33
|
+
message => $item
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
# Puppet creates one resource for each of the three items in $data. Each resource is
|
|
37
|
+
# named after the item's value and uses the item's value in a parameter.
|
|
38
|
+
~~~
|
|
39
|
+
|
|
40
|
+
When the first argument is a hash, Puppet passes each key and value pair to the lambda
|
|
41
|
+
as an array in the form `[key, value]` and returns the original hash.
|
|
42
|
+
|
|
43
|
+
**Example**: Using the `each` function with a hash and a one-parameter lambda
|
|
44
|
+
|
|
45
|
+
~~~ puppet
|
|
46
|
+
# For the hash $data, run a lambda using each item as a key-value array that creates a
|
|
47
|
+
# resource for each item.
|
|
48
|
+
$data = {"rtr" => "Router", "svr" => "Server", "wks" => "Workstation"}
|
|
49
|
+
$data.each |$items| {
|
|
50
|
+
notify { $items[0]:
|
|
51
|
+
message => $items[1]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
# Puppet creates one resource for each of the three items in $data, each named after the
|
|
55
|
+
# item's key and containing a parameter using the item's value.
|
|
56
|
+
~~~
|
|
57
|
+
|
|
58
|
+
When the first argument is an array and the lambda has two parameters, Puppet passes the
|
|
59
|
+
array's indexes (enumerated from 0) in the first parameter and its values in the second
|
|
60
|
+
parameter.
|
|
61
|
+
|
|
62
|
+
**Example**: Using the `each` function with an array and a two-parameter lambda
|
|
63
|
+
|
|
64
|
+
~~~ puppet
|
|
65
|
+
# For the array $data, run a lambda using each item's index and value that creates a
|
|
66
|
+
# resource for each item.
|
|
67
|
+
$data = ["routers", "servers", "workstations"]
|
|
68
|
+
$data.each |$index, $value| {
|
|
69
|
+
notify { $value:
|
|
70
|
+
message => $index
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
# Puppet creates one resource for each of the three items in $data, each named after the
|
|
74
|
+
# item's value and containing a parameter using the item's index.
|
|
75
|
+
~~~
|
|
76
|
+
|
|
77
|
+
When the first argument is a hash, Puppet passes its keys to the first parameter and its
|
|
78
|
+
values to the second parameter.
|
|
79
|
+
|
|
80
|
+
**Example**: Using the `each` function with a hash and a two-parameter lambda
|
|
81
|
+
|
|
82
|
+
~~~ puppet
|
|
83
|
+
# For the hash $data, run a lambda using each item's key and value to create a resource
|
|
84
|
+
# for each item.
|
|
85
|
+
$data = {"rtr" => "Router", "svr" => "Server", "wks" => "Workstation"}
|
|
86
|
+
$data.each |$key, $value| {
|
|
87
|
+
notify { $key:
|
|
88
|
+
message => $value
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
# Puppet creates one resource for each of the three items in $data, each named after the
|
|
92
|
+
# item's key and containing a parameter using the item's value.
|
|
93
|
+
~~~
|
|
94
|
+
|
|
95
|
+
For an example that demonstrates how to create multiple `file` resources using `each`,
|
|
96
|
+
see the Puppet
|
|
97
|
+
[iteration](https://docs.puppetlabs.com/puppet/latest/reference/lang_iteration.html)
|
|
98
|
+
documentation.
|
|
41
99
|
|
|
42
100
|
- Since 4.0.0
|
|
43
101
|
DOC
|
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
Puppet::Parser::Functions::newfunction(:epp, :type => :rvalue, :arity => -2, :doc =>
|
|
2
|
-
"Evaluates an Embedded Puppet
|
|
2
|
+
"Evaluates an Embedded Puppet (EPP) template file and returns the rendered text
|
|
3
|
+
result as a String.
|
|
4
|
+
|
|
5
|
+
`epp('<MODULE NAME>/<TEMPLATE FILE>', <PARAMETER HASH>)`
|
|
3
6
|
|
|
4
7
|
The first argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
|
|
5
|
-
reference, which
|
|
6
|
-
directory.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
given as template arguments when calling `inline_epp`, and that `z` if not given as a template argument
|
|
31
|
-
defaults to `'unicorn'`. Template parameters are available as variables, e.g.arguments `$x`, `$y` and `$z` in the example.
|
|
32
|
-
Note that `<%-` must be used or any leading whitespace will be interpreted as text
|
|
33
|
-
|
|
34
|
-
Arguments are passed to the template by calling `epp` with a Hash as the last argument, where parameters
|
|
35
|
-
are bound to values, e.g. `epp('...', {'x'=>10, 'y'=>20})`. Excess arguments may be given
|
|
36
|
-
(i.e. undeclared parameters) only if the EPP templates does not declare any parameters at all.
|
|
37
|
-
Template parameters shadow variables in outer scopes. File based epp does never have access to variables in the
|
|
38
|
-
scope where the `epp` function is called from.
|
|
39
|
-
|
|
40
|
-
- See function inline_epp for examples of EPP
|
|
8
|
+
reference, which loads `<TEMPLATE FILE>` from `<MODULE NAME>`'s `templates`
|
|
9
|
+
directory. In most cases, the last argument is optional; if used, it should be a
|
|
10
|
+
[hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
|
|
11
|
+
pass to the template.
|
|
12
|
+
|
|
13
|
+
- See the [template](/puppet/latest/reference/lang_template.html) documentation
|
|
14
|
+
for general template usage information.
|
|
15
|
+
- See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
|
|
16
|
+
documentation for examples of EPP.
|
|
17
|
+
|
|
18
|
+
For example, to call the apache module's `templates/vhost/_docroot.epp`
|
|
19
|
+
template and pass the `docroot` and `virtual_docroot` parameters, call the `epp`
|
|
20
|
+
function like this:
|
|
21
|
+
|
|
22
|
+
`epp('apache/templates/vhost/_docroot.epp', { 'docroot' => '/var/www/html',
|
|
23
|
+
'virtual_docroot' => '/var/www/example' })`
|
|
24
|
+
|
|
25
|
+
Puppet produces a syntax error if you pass more parameters than are declared in
|
|
26
|
+
the template's parameter tag. When passing parameters to a template that
|
|
27
|
+
contains a parameter tag, use the same names as the tag's declared parameters.
|
|
28
|
+
|
|
29
|
+
Parameters are required only if they are declared in the called template's
|
|
30
|
+
parameter tag without default values. Puppet produces an error if the `epp`
|
|
31
|
+
function fails to pass any required parameter.
|
|
32
|
+
|
|
41
33
|
- Since 4.0.0") do |args|
|
|
42
34
|
|
|
43
35
|
function_fail(["epp() is only available when parser/evaluator future is in effect"])
|
|
@@ -1,39 +1,75 @@
|
|
|
1
1
|
Puppet::Parser::Functions::newfunction(
|
|
2
2
|
:filter,
|
|
3
|
+
:type => :rvalue,
|
|
3
4
|
:arity => -3,
|
|
4
5
|
:doc => <<-DOC
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Applies a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
7
|
+
to every value in a data structure and returns an array or hash containing any elements
|
|
8
|
+
for which the lambda evaluates to `true`.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
Enumerable object (integer, Integer range, or String),
|
|
11
|
-
and the second a parameterized block as produced by the puppet syntax:
|
|
10
|
+
This function takes two mandatory arguments, in this order:
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
1. An array or hash the function will iterate over.
|
|
13
|
+
2. A lambda, which the function calls for each element in the first argument. It can
|
|
14
|
+
request one or two parameters.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
When the first argument is a Hash the entry is an array with `[key, value]`.
|
|
16
|
+
**Example**: Using the `filter` function
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
`$filtered_data = $data.filter |$parameter| { <PUPPET CODE BLOCK> }`
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
$a = ["raspberry", "blueberry", "orange"]
|
|
23
|
-
$a.filter |$x| { $x =~ /berry$/ } # rasberry, blueberry
|
|
20
|
+
or
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
enumerables except Hash, and to `key, value` for a Hash.
|
|
22
|
+
`$filtered_data = filter($data) |$parameter| { <PUPPET CODE BLOCK> }`
|
|
27
23
|
|
|
28
|
-
|
|
24
|
+
When the first argument (`$data` in the above example) is an array, Puppet passes each
|
|
25
|
+
value in turn to the lambda and returns an array containing the results.
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
$a = ["raspberry", "blueberry", "orange"]
|
|
32
|
-
$a.filter |$index, $x| { $index % 2 == 0 and $x =~ /berry$/ } # raspberry
|
|
27
|
+
**Example**: Using the `filter` function with an array and a one-parameter lambda
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
~~~ puppet
|
|
30
|
+
# For the array $data, return an array containing the values that end with "berry"
|
|
31
|
+
$data = ["orange", "blueberry", "raspberry"]
|
|
32
|
+
$filtered_data = $data.filter |$items| { $items =~ /berry$/ }
|
|
33
|
+
# $filtered_data = [blueberry, raspberry]
|
|
34
|
+
~~~
|
|
35
|
+
|
|
36
|
+
When the first argument is a hash, Puppet passes each key and value pair to the lambda
|
|
37
|
+
as an array in the form `[key, value]` and returns a hash containing the results.
|
|
38
|
+
|
|
39
|
+
**Example**: Using the `filter` function with a hash and a one-parameter lambda
|
|
40
|
+
|
|
41
|
+
~~~ puppet
|
|
42
|
+
# For the hash $data, return a hash containing all values of keys that end with "berry"
|
|
43
|
+
$data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
|
|
44
|
+
$filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
|
|
45
|
+
# $filtered_data = {blueberry => 1, raspberry => 2}
|
|
46
|
+
|
|
47
|
+
When the first argument is an array and the lambda has two parameters, Puppet passes the
|
|
48
|
+
array's indexes (enumerated from 0) in the first parameter and its values in the second
|
|
49
|
+
parameter.
|
|
50
|
+
|
|
51
|
+
**Example**: Using the `filter` function with an array and a two-parameter lambda
|
|
52
|
+
|
|
53
|
+
~~~ puppet
|
|
54
|
+
# For the array $data, return an array of all keys that both end with "berry" and have
|
|
55
|
+
# an even-numbered index
|
|
56
|
+
$data = ["orange", "blueberry", "raspberry"]
|
|
57
|
+
$filtered_data = $data.filter |$indexes, $values| { $indexes % 2 == 0 and $values =~ /berry$/ }
|
|
58
|
+
# $filtered_data = [raspberry]
|
|
59
|
+
~~~
|
|
60
|
+
|
|
61
|
+
When the first argument is a hash, Puppet passes its keys to the first parameter and its
|
|
62
|
+
values to the second parameter.
|
|
63
|
+
|
|
64
|
+
**Example**: Using the `filter` function with a hash and a two-parameter lambda
|
|
65
|
+
|
|
66
|
+
~~~ puppet
|
|
67
|
+
# For the hash $data, return a hash of all keys that both end with "berry" and have
|
|
68
|
+
# values less than or equal to 1
|
|
69
|
+
$data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
|
|
70
|
+
$filtered_data = $data.filter |$keys, $values| { $keys =~ /berry$/ and $values <= 1 }
|
|
71
|
+
# $filtered_data = {blueberry => 1}
|
|
72
|
+
~~~
|
|
37
73
|
|
|
38
74
|
- Since 4.0.0
|
|
39
75
|
DOC
|
|
@@ -1,33 +1,89 @@
|
|
|
1
1
|
require 'hiera_puppet'
|
|
2
2
|
|
|
3
3
|
module Puppet::Parser::Functions
|
|
4
|
-
newfunction(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
4
|
+
newfunction(
|
|
5
|
+
:hiera,
|
|
6
|
+
:type => :rvalue,
|
|
7
|
+
:arity => -2,
|
|
8
|
+
:doc => <<DOC
|
|
9
|
+
Performs a standard priority lookup of the hierarchy and returns the most specific value
|
|
10
|
+
for a given key. The returned value can be any type of data.
|
|
11
|
+
|
|
12
|
+
The function takes up to three arguments, in this order:
|
|
13
|
+
|
|
14
|
+
1. A string key that Hiera searches for in the hierarchy. **Required**.
|
|
15
|
+
2. An optional default value to return if Hiera doesn't find anything matching the key.
|
|
16
|
+
* If this argument isn't provided and this function results in a lookup failure, Puppet
|
|
17
|
+
fails with a compilation error.
|
|
18
|
+
3. The optional name of an arbitrary
|
|
19
|
+
[hierarchy level](https://docs.puppetlabs.com/hiera/latest/hierarchy.html) to insert at the
|
|
20
|
+
top of the hierarchy. This lets you temporarily modify the hierarchy for a single lookup.
|
|
21
|
+
* If Hiera doesn't find a matching key in the overriding hierarchy level, it continues
|
|
22
|
+
searching the rest of the hierarchy.
|
|
23
|
+
|
|
24
|
+
The `hiera` function does **not** find all matches throughout a hierarchy, instead
|
|
25
|
+
returining the first specific value starting at the top of the hierarchy. To search
|
|
26
|
+
throughout a hierarchy, use the `hiera_array` or `hiera_hash` functions.
|
|
27
|
+
|
|
28
|
+
**Example**: Using `hiera`
|
|
29
|
+
|
|
30
|
+
~~~ yaml
|
|
31
|
+
# Assuming hiera.yaml
|
|
32
|
+
# :hierarchy:
|
|
33
|
+
# - web01.example.com
|
|
34
|
+
# - common
|
|
35
|
+
|
|
36
|
+
# Assuming web01.example.com.yaml:
|
|
37
|
+
# users:
|
|
38
|
+
# - "Amy Barry"
|
|
39
|
+
# - "Carrie Douglas"
|
|
40
|
+
|
|
41
|
+
# Assuming common.yaml:
|
|
42
|
+
users:
|
|
43
|
+
admins:
|
|
44
|
+
- "Edith Franklin"
|
|
45
|
+
- "Ginny Hamilton"
|
|
46
|
+
regular:
|
|
47
|
+
- "Iris Jackson"
|
|
48
|
+
- "Kelly Lambert"
|
|
49
|
+
~~~
|
|
50
|
+
|
|
51
|
+
~~~ puppet
|
|
52
|
+
# Assuming we are not web01.example.com:
|
|
53
|
+
|
|
54
|
+
$users = hiera('users', undef)
|
|
55
|
+
|
|
56
|
+
# $users contains {admins => ["Edith Franklin", "Ginny Hamilton"],
|
|
57
|
+
# regular => ["Iris Jackson", "Kelly Lambert"]}
|
|
58
|
+
~~~
|
|
59
|
+
|
|
60
|
+
You can optionally generate the default value with a
|
|
61
|
+
[lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html) that
|
|
62
|
+
takes one parameter.
|
|
63
|
+
|
|
64
|
+
**Example**: Using `hiera` with a lambda
|
|
65
|
+
|
|
66
|
+
~~~ puppet
|
|
67
|
+
# Assuming the same Hiera data as the previous example:
|
|
68
|
+
|
|
69
|
+
$users = hiera('users') | $key | { "Key \'${key}\' not found" }
|
|
70
|
+
|
|
71
|
+
# $users contains {admins => ["Edith Franklin", "Ginny Hamilton"],
|
|
72
|
+
# regular => ["Iris Jackson", "Kelly Lambert"]}
|
|
73
|
+
# If hiera couldn't match its key, it would return the lambda result,
|
|
74
|
+
# "Key 'users' not found".
|
|
75
|
+
~~~
|
|
76
|
+
|
|
77
|
+
The returned value's data type depends on the types of the results. In the example
|
|
78
|
+
above, Hiera matches the 'users' key and returns it as a hash.
|
|
79
|
+
|
|
80
|
+
See
|
|
81
|
+
[the documentation](https://docs.puppetlabs.com/hiera/latest/puppet.html#hiera-lookup-functions)
|
|
82
|
+
for more information about Hiera lookup functions.
|
|
83
|
+
|
|
84
|
+
- Since 4.0.0
|
|
85
|
+
DOC
|
|
86
|
+
) do |*args|
|
|
30
87
|
function_fail(["hiera() has been converted to 4x API"])
|
|
31
88
|
end
|
|
32
89
|
end
|
|
33
|
-
|