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,74 +1,47 @@
|
|
|
1
|
-
# Evaluates an Embedded Puppet
|
|
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
|
-
# is
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
# # produces 'Hello given argument world!'
|
|
46
|
-
# $x ='local variable world'
|
|
47
|
-
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
|
48
|
-
# <%- |$x| -%>
|
|
49
|
-
# Hello <%= $x %> world!
|
|
50
|
-
# END
|
|
51
|
-
#
|
|
52
|
-
# # produces 'Hello given argument world!'
|
|
53
|
-
# $x ='local variable world'
|
|
54
|
-
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
|
55
|
-
# <%- |$x| -%>
|
|
56
|
-
# Hello <%= $x %>!
|
|
57
|
-
# END
|
|
58
|
-
#
|
|
59
|
-
# # results in error, missing value for y
|
|
60
|
-
# $x ='local variable world'
|
|
61
|
-
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
|
62
|
-
# <%- |$x, $y| -%>
|
|
63
|
-
# Hello <%= $x %>!
|
|
64
|
-
# END
|
|
65
|
-
#
|
|
66
|
-
# # Produces 'Hello given argument planet'
|
|
67
|
-
# $x ='local variable world'
|
|
68
|
-
# inline_epptemplate(@(END:epp), { x =>'given argument'})
|
|
69
|
-
# <%- |$x, $y=planet| -%>
|
|
70
|
-
# Hello <%= $x %> <%= $y %>!
|
|
71
|
-
# END
|
|
1
|
+
# Evaluates an Embedded Puppet (EPP) template string and returns the rendered
|
|
2
|
+
# text result as a String.
|
|
3
|
+
#
|
|
4
|
+
# `inline_epp('<EPP TEMPLATE STRING>', <PARAMETER HASH>)`
|
|
5
|
+
#
|
|
6
|
+
# The first argument to this function should be a string containing an EPP
|
|
7
|
+
# template. In most cases, the last argument is optional; if used, it should be a
|
|
8
|
+
# [hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
|
|
9
|
+
# pass to the template.
|
|
10
|
+
#
|
|
11
|
+
# - See the [template](/puppet/latest/reference/lang_template.html) documentation
|
|
12
|
+
# for general template usage information.
|
|
13
|
+
# - See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
|
|
14
|
+
# documentation for examples of EPP.
|
|
15
|
+
#
|
|
16
|
+
# For example, to evaluate an inline EPP template and pass it the `docroot` and
|
|
17
|
+
# `virtual_docroot` parameters, call the `inline_epp` function like this:
|
|
18
|
+
#
|
|
19
|
+
# `inline_epp('docroot: <%= $docroot %> Virtual docroot: <%= $virtual_docroot %>',
|
|
20
|
+
# { 'docroot' => '/var/www/html', 'virtual_docroot' => '/var/www/example' })`
|
|
21
|
+
#
|
|
22
|
+
# Puppet produces a syntax error if you pass more parameters than are declared in
|
|
23
|
+
# the template's parameter tag. When passing parameters to a template that
|
|
24
|
+
# contains a parameter tag, use the same names as the tag's declared parameters.
|
|
25
|
+
#
|
|
26
|
+
# Parameters are required only if they are declared in the called template's
|
|
27
|
+
# parameter tag without default values. Puppet produces an error if the
|
|
28
|
+
# `inline_epp` function fails to pass any required parameter.
|
|
29
|
+
#
|
|
30
|
+
# An inline EPP template should be written as a single-quoted string or
|
|
31
|
+
# [heredoc](puppet/latest/reference/lang_data_string.html#heredocs).
|
|
32
|
+
# A double-quoted string is subject to expression interpolation before the string
|
|
33
|
+
# is parsed as an EPP template.
|
|
34
|
+
#
|
|
35
|
+
# For example, to evaluate an inline EPP template using a heredoc, call the
|
|
36
|
+
# `inline_epp` function like this:
|
|
37
|
+
#
|
|
38
|
+
# ~~~ puppet
|
|
39
|
+
# # Outputs 'Hello given argument planet!'
|
|
40
|
+
# inline_epp(@(END), { x => 'given argument' })
|
|
41
|
+
# <%- | $x, $y = planet | -%>
|
|
42
|
+
# Hello <%= $x %> <%= $y %>!
|
|
43
|
+
# END
|
|
44
|
+
# ~~~
|
|
72
45
|
#
|
|
73
46
|
# @since 4.0.0
|
|
74
47
|
#
|
|
@@ -150,18 +150,16 @@
|
|
|
150
150
|
# - Since 4.0.0
|
|
151
151
|
Puppet::Functions.create_function(:lookup, Puppet::Functions::InternalFunction) do
|
|
152
152
|
name_t = 'Variant[String,Array[String]]'
|
|
153
|
-
value_type_t = '
|
|
153
|
+
value_type_t = 'Type'
|
|
154
154
|
default_value_t = 'Any'
|
|
155
|
-
|
|
156
|
-
default_values_hash_t = 'Optional[Hash[String,Any]]'
|
|
157
|
-
merge_t = 'Optional[Variant[String[1],Hash[String,Scalar]]]'
|
|
155
|
+
merge_t = 'Variant[String[1],Hash[String,Scalar]]'
|
|
158
156
|
block_t = "Callable[#{name_t}]"
|
|
159
157
|
option_pairs =
|
|
160
|
-
"value_type
|
|
158
|
+
"value_type=>Optional[#{value_type_t}],"\
|
|
161
159
|
"default_value=>Optional[#{default_value_t}],"\
|
|
162
|
-
"override
|
|
163
|
-
"default_values_hash
|
|
164
|
-
"merge
|
|
160
|
+
"override=>Optional[Hash[String,Any]],"\
|
|
161
|
+
"default_values_hash=>Optional[Hash[String,Any]],"\
|
|
162
|
+
"merge=>Optional[#{merge_t}]"
|
|
165
163
|
|
|
166
164
|
dispatch :lookup_1 do
|
|
167
165
|
scope_param
|
|
@@ -172,10 +170,10 @@ Puppet::Functions.create_function(:lookup, Puppet::Functions::InternalFunction)
|
|
|
172
170
|
|
|
173
171
|
dispatch :lookup_2 do
|
|
174
172
|
scope_param
|
|
175
|
-
param
|
|
176
|
-
param
|
|
177
|
-
param
|
|
178
|
-
param default_value_t,
|
|
173
|
+
param name_t, :name
|
|
174
|
+
param "Optional[#{value_type_t}]", :value_type
|
|
175
|
+
param "Optional[#{merge_t}]", :merge
|
|
176
|
+
param default_value_t, :default_value
|
|
179
177
|
end
|
|
180
178
|
|
|
181
179
|
dispatch :lookup_3 do
|
|
@@ -202,23 +200,27 @@ Puppet::Functions.create_function(:lookup, Puppet::Functions::InternalFunction)
|
|
|
202
200
|
end
|
|
203
201
|
|
|
204
202
|
def lookup_1(scope, name, value_type=nil, merge=nil)
|
|
205
|
-
|
|
203
|
+
do_lookup(scope, name, value_type, nil, false, {}, {}, merge)
|
|
206
204
|
end
|
|
207
205
|
|
|
208
206
|
def lookup_2(scope, name, value_type, merge, default_value)
|
|
209
|
-
|
|
207
|
+
do_lookup(scope, name, value_type, default_value, true, {}, {}, merge)
|
|
210
208
|
end
|
|
211
209
|
|
|
212
210
|
def lookup_3(scope, name, value_type=nil, merge=nil, &block)
|
|
213
|
-
|
|
211
|
+
do_lookup(scope, name, value_type, nil, false, {}, {}, merge, &block)
|
|
214
212
|
end
|
|
215
213
|
|
|
216
214
|
def lookup_4(scope, options_hash, &block)
|
|
217
|
-
|
|
215
|
+
do_lookup(scope, options_hash['name'], *hash_args(options_hash), &block)
|
|
218
216
|
end
|
|
219
217
|
|
|
220
218
|
def lookup_5(scope, name, options_hash, &block)
|
|
221
|
-
|
|
219
|
+
do_lookup(scope, name, *hash_args(options_hash), &block)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def do_lookup(scope, name, value_type, default_value, has_default, override, default_values_hash, merge, &block)
|
|
223
|
+
Puppet::Pops::Lookup.lookup(name, value_type, default_value, has_default, merge, Puppet::Pops::Lookup::Invocation.new(scope, override, default_values_hash), &block)
|
|
222
224
|
end
|
|
223
225
|
|
|
224
226
|
def hash_args(options_hash)
|
data/lib/puppet/functions/map.rb
CHANGED
|
@@ -1,33 +1,68 @@
|
|
|
1
|
-
# Applies a
|
|
2
|
-
#
|
|
1
|
+
# Applies a [lambda](http://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
2
|
+
# to every value in a data structure and returns an array containing the results.
|
|
3
3
|
#
|
|
4
|
-
# This function takes two mandatory arguments
|
|
5
|
-
# (integer, Integer range, or String), and the second a parameterized block as produced by the puppet syntax:
|
|
4
|
+
# This function takes two mandatory arguments, in this order:
|
|
6
5
|
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
6
|
+
# 1. An array or hash the function will iterate over.
|
|
7
|
+
# 2. A lambda, which the function calls for each element in the first argument. It can
|
|
8
|
+
# request one or two parameters.
|
|
9
9
|
#
|
|
10
|
-
#
|
|
11
|
-
# When the first argument is a hash the entry is an array with `[key, value]`.
|
|
10
|
+
# @example Using the `map` function
|
|
12
11
|
#
|
|
13
|
-
#
|
|
12
|
+
# `$transformed_data = $data.map |$parameter| { <PUPPET CODE BLOCK> }`
|
|
14
13
|
#
|
|
15
|
-
#
|
|
16
|
-
# $a.map |$x|{ $x[1] }
|
|
14
|
+
# or
|
|
17
15
|
#
|
|
18
|
-
#
|
|
19
|
-
# $a.map |$x| { $x[0] }
|
|
16
|
+
# `$transformed_data = map($data) |$parameter| { <PUPPET CODE BLOCK> }`
|
|
20
17
|
#
|
|
21
|
-
# When
|
|
22
|
-
#
|
|
18
|
+
# When the first argument (`$data` in the above example) is an array, Puppet passes each
|
|
19
|
+
# value in turn to the lambda.
|
|
23
20
|
#
|
|
24
|
-
# @example Using map with
|
|
21
|
+
# @example Using the `map` function with an array and a one-parameter lambda
|
|
25
22
|
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
23
|
+
# ~~~ puppet
|
|
24
|
+
# # For the array $data, return an array containing each value multiplied by 10
|
|
25
|
+
# $data = [1,2,3]
|
|
26
|
+
# $transformed_data = $data.map |$items| { $items * 10 }
|
|
27
|
+
# # $transformed_data contains [10,20,30]
|
|
28
|
+
# ~~~
|
|
28
29
|
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
30
|
+
# When the first argument is a hash, Puppet passes each key and value pair to the lambda
|
|
31
|
+
# as an array in the form `[key, value]`.
|
|
32
|
+
#
|
|
33
|
+
# @example Using the `map` function with a hash and a one-parameter lambda
|
|
34
|
+
#
|
|
35
|
+
# ~~~ puppet
|
|
36
|
+
# # For the hash $data, return an array containing the keys
|
|
37
|
+
# $data = {'a'=>1,'b'=>2,'c'=>3}
|
|
38
|
+
# $transformed_data = $data.map |$items| { $items[0] }
|
|
39
|
+
# # $transformed_data contains ['a','b','c']
|
|
40
|
+
# ~~~
|
|
41
|
+
#
|
|
42
|
+
# When the first argument is an array and the lambda has two parameters, Puppet passes the
|
|
43
|
+
# array's indexes (enumerated from 0) in the first parameter and its values in the second
|
|
44
|
+
# parameter.
|
|
45
|
+
#
|
|
46
|
+
# @example Using the `map` function with an array and a two-parameter lambda
|
|
47
|
+
#
|
|
48
|
+
# ~~~ puppet
|
|
49
|
+
# # For the array $data, return an array containing the indexes
|
|
50
|
+
# $data = [1,2,3]
|
|
51
|
+
# $transformed_data = $data.map |$index,$value| { $index }
|
|
52
|
+
# # $transformed_data contains [0,1,2]
|
|
53
|
+
# ~~~
|
|
54
|
+
#
|
|
55
|
+
# When the first argument is a hash, Puppet passes its keys to the first parameter and its
|
|
56
|
+
# values to the second parameter.
|
|
57
|
+
#
|
|
58
|
+
# @example Using the `map` function with a hash and a two-parameter lambda
|
|
59
|
+
#
|
|
60
|
+
# ~~~ puppet
|
|
61
|
+
# # For the hash $data, return an array containing each value
|
|
62
|
+
# $data = {'a'=>1,'b'=>2,'c'=>3}
|
|
63
|
+
# $transformed_data = $data.map |$key,$value| { $value }
|
|
64
|
+
# # $transformed_data contains [1,2,3]
|
|
65
|
+
# ~~~
|
|
31
66
|
#
|
|
32
67
|
# @since 4.0.0
|
|
33
68
|
#
|
|
@@ -57,7 +92,7 @@ Puppet::Functions.create_function(:map) do
|
|
|
57
92
|
end
|
|
58
93
|
|
|
59
94
|
def map_Hash_2(hash)
|
|
60
|
-
|
|
95
|
+
hash.map {|x, y| yield(x, y) }
|
|
61
96
|
end
|
|
62
97
|
|
|
63
98
|
def map_Enumerable_1(enumerable)
|
|
@@ -1,19 +1,36 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Matches a regular expression against a string and returns an array containing the match
|
|
2
|
+
# and any matched capturing groups.
|
|
2
3
|
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# * Regexp type
|
|
4
|
+
# The first argument is a string or array of strings. The second argument is either a
|
|
5
|
+
# regular expression, regular expression represented as a string, or Regex or Pattern
|
|
6
|
+
# data type that the function matches against the first argument.
|
|
7
7
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
# with mapped match results
|
|
8
|
+
# The returned array contains the entire match at index 0, and each captured group at
|
|
9
|
+
# subsequent index values. If the value or expression being matched is an array, the
|
|
10
|
+
# function returns an array with mapped match results.
|
|
11
11
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
12
|
+
# If the function doesn't find a match, it returns 'undef'.
|
|
13
|
+
#
|
|
14
|
+
# @example Matching a regular expression in a string
|
|
15
|
+
#
|
|
16
|
+
# ~~~ ruby
|
|
17
|
+
# $matches = "abc123".match(/[a-z]+[1-9]+/)
|
|
18
|
+
# # $matches contains [abc123]
|
|
19
|
+
# ~~~
|
|
20
|
+
#
|
|
21
|
+
# @example Matching a regular expressions with grouping captures in a string
|
|
22
|
+
#
|
|
23
|
+
# ~~~ ruby
|
|
24
|
+
# $matches = "abc123".match(/([a-z]+)([1-9]+)/)
|
|
25
|
+
# # $matches contains [abc123, abc, 123]
|
|
26
|
+
# ~~~
|
|
27
|
+
#
|
|
28
|
+
# @example Matching a regular expression with grouping captures in an array of strings
|
|
29
|
+
#
|
|
30
|
+
# ~~~ ruby
|
|
31
|
+
# $matches = ["abc123","def456"].match(/([a-z]+)([1-9]+)/)
|
|
32
|
+
# # $matches contains [[abc123, abc, 123], [def456, def, 456]]
|
|
15
33
|
#
|
|
16
|
-
# See the documentation for "The Puppet Type System" for more information about types.
|
|
17
34
|
# @since 4.0.0
|
|
18
35
|
#
|
|
19
36
|
Puppet::Functions.create_function(:match) do
|
|
@@ -1,61 +1,98 @@
|
|
|
1
|
-
# Applies a
|
|
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
|
-
#
|
|
1
|
+
# Applies a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
2
|
+
# to every value in a data structure from the first argument, carrying over the returned
|
|
3
|
+
# value of each iteration, and returns the result of the lambda's final iteration. This
|
|
4
|
+
# lets you create a new value or data structure by combining values from the first
|
|
5
|
+
# argument's data structure.
|
|
6
|
+
#
|
|
7
|
+
# This function takes two mandatory arguments, in this order:
|
|
8
|
+
#
|
|
9
|
+
# 1. An array or hash the function will iterate over.
|
|
10
|
+
# 2. A lambda, which the function calls for each element in the first argument. It takes
|
|
11
|
+
# two mandatory parameters:
|
|
12
|
+
# 1. A memo value that is overwritten after each iteration with the iteration's result.
|
|
13
|
+
# 2. A second value that is overwritten after each iteration with the next value in the
|
|
14
|
+
# function's first argument.
|
|
15
|
+
#
|
|
16
|
+
# @example Using the `reduce` function
|
|
17
|
+
#
|
|
18
|
+
# `$data.reduce |$memo, $value| { ... }`
|
|
19
|
+
#
|
|
20
|
+
# or
|
|
21
|
+
#
|
|
22
|
+
# `reduce($data) |$memo, $value| { ... }`
|
|
23
|
+
#
|
|
24
|
+
# You can also pass an optional "start memo" value as an argument, such as `start` below:
|
|
25
|
+
#
|
|
26
|
+
# `$data.reduce(start) |$memo, $value| { ... }`
|
|
27
|
+
#
|
|
28
|
+
# or
|
|
29
|
+
#
|
|
30
|
+
# `reduce($data, start) |$memo, $value| { ... }`
|
|
31
|
+
#
|
|
32
|
+
# When the first argument (`$data` in the above example) is an array, Puppet passes each
|
|
33
|
+
# of the data structure's values in turn to the lambda's parameters. When the first
|
|
34
|
+
# argument is a hash, Puppet converts each of the hash's values to an array in the form
|
|
35
|
+
# `[key, value]`.
|
|
36
|
+
#
|
|
37
|
+
# If you pass a start memo value, Puppet executes the lambda with the provided memo value
|
|
38
|
+
# and the data structure's first value. Otherwise, Puppet passes the structure's first two
|
|
39
|
+
# values to the lambda.
|
|
40
|
+
#
|
|
41
|
+
# Puppet calls the lambda for each of the data structure's remaining values. For each
|
|
42
|
+
# call, it passes the result of the previous call as the first parameter ($memo in the
|
|
43
|
+
# above examples) and the next value from the data structure as the second parameter
|
|
44
|
+
# ($value).
|
|
45
|
+
#
|
|
46
|
+
# If the structure has one value, Puppet returns the value and does not call the lambda.
|
|
47
|
+
#
|
|
48
|
+
# @example Using the `reduce` function
|
|
49
|
+
#
|
|
50
|
+
# ~~~ puppet
|
|
51
|
+
# # Reduce the array $data, returning the sum of all values in the array.
|
|
52
|
+
# $data = [1, 2, 3]
|
|
53
|
+
# $sum = $data.reduce |$memo, $value| { $memo + $value }
|
|
54
|
+
# # $sum contains 6
|
|
55
|
+
#
|
|
56
|
+
# # Reduce the array $data, returning the sum of a start memo value and all values in the
|
|
57
|
+
# # array.
|
|
58
|
+
# $data = [1, 2, 3]
|
|
59
|
+
# $sum = $data.reduce(4) |$memo, $value| { $memo + $value }
|
|
60
|
+
# # $sum contains 10
|
|
61
|
+
#
|
|
62
|
+
# # Reduce the hash $data, returning the sum of all values and concatenated string of all
|
|
63
|
+
# # keys.
|
|
64
|
+
# $data = {a => 1, b => 2, c => 3}
|
|
65
|
+
# $combine = $data.reduce |$memo, $value| {
|
|
66
|
+
# $string = "${memo[0]}${value[0]}"
|
|
67
|
+
# $number = $memo[1] + $value[1]
|
|
68
|
+
# [$string, $number]
|
|
69
|
+
# }
|
|
70
|
+
# # $combine contains [abc, 6]
|
|
71
|
+
# ~~~
|
|
72
|
+
#
|
|
73
|
+
# @example Using the `reduce` function with a start memo and two-parameter lambda
|
|
74
|
+
#
|
|
75
|
+
# ~~~ puppet
|
|
76
|
+
# # Reduce the array $data, returning the sum of all values in the array and starting
|
|
77
|
+
# # with $memo set to an arbitrary value instead of $data's first value.
|
|
78
|
+
# $data = [1, 2, 3]
|
|
79
|
+
# $sum = $data.reduce(4) |$memo, $value| { $memo + $value }
|
|
80
|
+
# # At the start of the lambda's first iteration, $memo contains 4 and $value contains 1.
|
|
81
|
+
# # After all iterations, $sum contains 10.
|
|
82
|
+
#
|
|
83
|
+
# # Reduce the hash $data, returning the sum of all values and concatenated string of
|
|
84
|
+
# # all keys, and starting with $memo set to an arbitrary array instead of $data's first
|
|
85
|
+
# # key-value pair.
|
|
86
|
+
# $data = {a => 1, b => 2, c => 3}
|
|
87
|
+
# $combine = $data.reduce( [d, 4] ) |$memo, $value| {
|
|
88
|
+
# $string = "${memo[0]}${value[0]}"
|
|
89
|
+
# $number = $memo[1] + $value[1]
|
|
90
|
+
# [$string, $number]
|
|
91
|
+
# }
|
|
92
|
+
# # At the start of the lambda's first iteration, $memo contains [d, 4] and $value
|
|
93
|
+
# # contains [a, 1].
|
|
94
|
+
# # $combine contains [dabc, 10]
|
|
95
|
+
# ~~~
|
|
59
96
|
#
|
|
60
97
|
# @since 4.0.0
|
|
61
98
|
#
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'puppet/util/package'
|
|
2
|
+
|
|
3
|
+
# Compares two version numbers.
|
|
4
|
+
#
|
|
5
|
+
# Prototype:
|
|
6
|
+
#
|
|
7
|
+
# \$result = versioncmp(a, b)
|
|
8
|
+
#
|
|
9
|
+
# Where a and b are arbitrary version strings.
|
|
10
|
+
#
|
|
11
|
+
# This function returns:
|
|
12
|
+
#
|
|
13
|
+
# * `1` if version a is greater than version b
|
|
14
|
+
# * `0` if the versions are equal
|
|
15
|
+
# * `-1` if version a is less than version b
|
|
16
|
+
#
|
|
17
|
+
# @example
|
|
18
|
+
#
|
|
19
|
+
# if versioncmp('2.6-1', '2.4.5') > 0 {
|
|
20
|
+
# notice('2.6-1 is > than 2.4.5')
|
|
21
|
+
# }
|
|
22
|
+
#
|
|
23
|
+
# This function uses the same version comparison algorithm used by Puppet's
|
|
24
|
+
# `package` type.
|
|
25
|
+
#
|
|
26
|
+
Puppet::Functions.create_function(:versioncmp) do
|
|
27
|
+
|
|
28
|
+
dispatch :versioncmp do
|
|
29
|
+
param 'String', :a
|
|
30
|
+
param 'String', :b
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def versioncmp(a, b)
|
|
34
|
+
Puppet::Util::Package.versioncmp(a, b)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
# Call a lambda
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
1
|
+
# Call a [lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html)
|
|
2
|
+
# with the given arguments and return the result. Since a lambda's scope is
|
|
3
|
+
# [local](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html#lambda-scope)
|
|
4
|
+
# to the lambda, you can use the `with` function to create private blocks of code within a
|
|
5
|
+
# class using variables whose values cannot be accessed outside of the lambda.
|
|
5
6
|
#
|
|
6
|
-
# @example Using with
|
|
7
|
+
# @example Using `with`
|
|
7
8
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
9
|
+
# ~~~ puppet
|
|
10
|
+
# # Concatenate three strings into a single string formatted as a list.
|
|
11
|
+
# $fruit = with("apples", "oranges", "bananas") |$x, $y, $z| {
|
|
12
|
+
# "${x}, ${y}, and ${z}"
|
|
13
|
+
# }
|
|
14
|
+
# $check_var = $x
|
|
15
|
+
# # $fruit contains "apples, oranges, and bananas"
|
|
16
|
+
# # $check_var is undefined, as the value of $x is local to the lambda.
|
|
17
|
+
# ~~~
|
|
10
18
|
#
|
|
11
19
|
# @since 4.0.0
|
|
12
20
|
#
|
data/lib/puppet/functions.rb
CHANGED
|
@@ -349,12 +349,10 @@ module Puppet::Functions
|
|
|
349
349
|
def block_param(*type_and_name)
|
|
350
350
|
case type_and_name.size
|
|
351
351
|
when 0
|
|
352
|
-
|
|
353
|
-
type = @all_callables.copy
|
|
352
|
+
type = @all_callables
|
|
354
353
|
name = :block
|
|
355
354
|
when 1
|
|
356
|
-
|
|
357
|
-
type = @all_callables.copy
|
|
355
|
+
type = @all_callables
|
|
358
356
|
name = type_and_name[0]
|
|
359
357
|
when 2
|
|
360
358
|
type_string, name = type_and_name
|
|
@@ -47,7 +47,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
|
47
47
|
node = node_from_request(request)
|
|
48
48
|
node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
|
|
49
49
|
|
|
50
|
-
if catalog = compile(node)
|
|
50
|
+
if catalog = compile(node, request.options[:code_id])
|
|
51
51
|
return catalog
|
|
52
52
|
else
|
|
53
53
|
# This shouldn't actually happen; we should either return
|
|
@@ -82,7 +82,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# Compile the actual catalog.
|
|
85
|
-
def compile(node)
|
|
85
|
+
def compile(node, code_id)
|
|
86
86
|
str = "Compiled catalog for #{node.name}"
|
|
87
87
|
str += " in environment #{node.environment}" if node.environment
|
|
88
88
|
config = nil
|
|
@@ -90,7 +90,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
|
90
90
|
benchmark(:notice, str) do
|
|
91
91
|
Puppet::Util::Profiler.profile(str, [:compiler, :compile, node.environment, node.name]) do
|
|
92
92
|
begin
|
|
93
|
-
config = Puppet::Parser::Compiler.compile(node)
|
|
93
|
+
config = Puppet::Parser::Compiler.compile(node, code_id)
|
|
94
94
|
rescue Puppet::Error => detail
|
|
95
95
|
Puppet.err(detail.to_s) if networked?
|
|
96
96
|
raise
|