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
|
@@ -27,19 +27,24 @@ describe "when performing lookup" do
|
|
|
27
27
|
# @param *args [String] splat of args that will be concatenated to form the puppet args sent to lookup
|
|
28
28
|
# @return [Array<String>] List of names of Notify resources in the resulting catalog
|
|
29
29
|
#
|
|
30
|
-
def assemble_and_compile(fmt, *lookup_args)
|
|
31
|
-
assemble_and_compile_with_block(fmt, "'no_block_present'", *lookup_args)
|
|
30
|
+
def assemble_and_compile(fmt, *lookup_args, &block)
|
|
31
|
+
assemble_and_compile_with_block(fmt, "'no_block_present'", *lookup_args, &block)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
def assemble_and_compile_with_block(fmt, block, *lookup_args)
|
|
35
|
-
|
|
34
|
+
def assemble_and_compile_with_block(fmt, block, *lookup_args, &cblock)
|
|
35
|
+
compile_and_get_notifications(<<-END.gsub(/^ {6}/, ''), &cblock)
|
|
36
36
|
$args = [#{lookup_args.join(',')}]
|
|
37
37
|
$block = #{block}
|
|
38
38
|
include abc
|
|
39
39
|
$r = if $abc::result == undef { 'no_value' } else { $abc::result }
|
|
40
40
|
notify { \"#{fmt}\": }
|
|
41
41
|
END
|
|
42
|
-
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def compile_and_get_notifications(code)
|
|
45
|
+
Puppet[:code] = code
|
|
46
|
+
catalog = block_given? ? compiler.compile { |catalog| yield(compiler.topscope); catalog } : compiler.compile
|
|
47
|
+
catalog.resources.map(&:ref).select { |r| r.start_with?('Notify[') }.map { |r| r[7..-2] }
|
|
43
48
|
end
|
|
44
49
|
|
|
45
50
|
# There is a fully configured 'production' environment in fixtures at this location
|
|
@@ -76,7 +81,18 @@ describe "when performing lookup" do
|
|
|
76
81
|
expect(resources).to include('module_b')
|
|
77
82
|
end
|
|
78
83
|
|
|
84
|
+
it "can lookup value provided by the module that has 'function' data_provider entry in metadata.json" do
|
|
85
|
+
resources = compile_and_get_notifications("$args = ['meta::b']\ninclude meta\nnotify { $meta::result: }\n")
|
|
86
|
+
expect(resources).to include('module_b')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "can lookup value provided by the module that has 'sample' data_provider entry in metadata.json" do
|
|
90
|
+
resources = compile_and_get_notifications("$args = ['metawcp::b']\ninclude metawcp\nnotify { $metawcp::result: }\n")
|
|
91
|
+
expect(resources).to include('module_b')
|
|
92
|
+
end
|
|
93
|
+
|
|
79
94
|
it 'can lookup value provided in global scope' do
|
|
95
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
80
96
|
Hiera.any_instance.expects(:lookup).with('abc::a', any_parameters).returns('global_a')
|
|
81
97
|
resources = assemble_and_compile('${r}', "'abc::a'")
|
|
82
98
|
expect(resources).to include('global_a')
|
|
@@ -108,6 +124,7 @@ describe "when performing lookup" do
|
|
|
108
124
|
end
|
|
109
125
|
|
|
110
126
|
it "can 'hash' merge values provided by global, environment, and module" do
|
|
127
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
111
128
|
Hiera.any_instance.expects(:lookup).with('abc::e', any_parameters).returns({ 'k1' => 'global_e1' })
|
|
112
129
|
resources = assemble_and_compile('${r[k1]}_${r[k2]}_${r[k3]}', "'abc::e'", 'Hash[String,String]', "'hash'")
|
|
113
130
|
expect(resources).to include('global_e1_module_e2_env_e3')
|
|
@@ -173,30 +190,35 @@ describe "when performing lookup" do
|
|
|
173
190
|
end
|
|
174
191
|
|
|
175
192
|
it 'can lookup and deep merge deep values provided by global, environment, and module' do
|
|
193
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
176
194
|
Hiera.any_instance.expects(:lookup).with('abc::f', any_parameters).returns({ 'k1' => { 's1' => 'global_f11' }, 'k2' => { 's3' => 'global_f23' }})
|
|
177
195
|
resources = assemble_and_compile('${r[k1][s1]}_${r[k1][s2]}_${r[k1][s3]}_${r[k2][s1]}_${r[k2][s2]}_${r[k2][s3]}', "'abc::f'", 'Hash[String,Hash[String,String]]', "'deep'")
|
|
178
196
|
expect(resources).to include('global_f11_env_f12_module_f13_env_f21_module_f22_global_f23')
|
|
179
197
|
end
|
|
180
198
|
|
|
181
199
|
it 'will propagate resolution_type :array to Hiera when merge == \'unique\'' do
|
|
200
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
182
201
|
Hiera.any_instance.expects(:lookup).with('abc::c', anything, anything, anything, :array).returns(['global_c'])
|
|
183
202
|
resources = assemble_and_compile('${r[0]}_${r[1]}_${r[2]}', "'abc::c'", 'Array[String]', "'unique'")
|
|
184
203
|
expect(resources).to include('global_c_env_c_module_c')
|
|
185
204
|
end
|
|
186
205
|
|
|
187
206
|
it 'will propagate a Hash resolution_type with :behavior => :native to Hiera when merge == \'hash\'' do
|
|
207
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
188
208
|
Hiera.any_instance.expects(:lookup).with('abc::e', anything, anything, anything, { :behavior => :native }).returns({ 'k1' => 'global_e1' })
|
|
189
209
|
resources = assemble_and_compile('${r[k1]}_${r[k2]}_${r[k3]}', "'abc::e'", 'Hash[String,String]', "{strategy => 'hash'}")
|
|
190
210
|
expect(resources).to include('global_e1_module_e2_env_e3')
|
|
191
211
|
end
|
|
192
212
|
|
|
193
213
|
it 'will propagate a Hash resolution_type with :behavior => :deeper to Hiera when merge == \'deep\'' do
|
|
214
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
194
215
|
Hiera.any_instance.expects(:lookup).with('abc::f', anything, anything, anything, { :behavior => :deeper }).returns({ 'k1' => { 's1' => 'global_f11' }, 'k2' => { 's3' => 'global_f23' }})
|
|
195
216
|
resources = assemble_and_compile('${r[k1][s1]}_${r[k1][s2]}_${r[k1][s3]}_${r[k2][s1]}_${r[k2][s2]}_${r[k2][s3]}', "'abc::f'", 'Hash[String,Hash[String,String]]', "'deep'")
|
|
196
217
|
expect(resources).to include('global_f11_env_f12_module_f13_env_f21_module_f22_global_f23')
|
|
197
218
|
end
|
|
198
219
|
|
|
199
220
|
it 'will propagate a Hash resolution_type with symbolic deep merge options to Hiera' do
|
|
221
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
200
222
|
Hiera.any_instance.expects(:lookup).with('abc::f', anything, anything, anything, { :behavior => :deeper, :knockout_prefix => '--' }).returns({ 'k1' => { 's1' => 'global_f11' }, 'k2' => { 's3' => 'global_f23' }})
|
|
201
223
|
resources = assemble_and_compile('${r[k1][s1]}_${r[k1][s2]}_${r[k1][s3]}_${r[k2][s1]}_${r[k2][s2]}_${r[k2][s3]}', "'abc::f'", 'Hash[String,Hash[String,String]]', "{ 'strategy' => 'deep', 'knockout_prefix' => '--' }")
|
|
202
224
|
expect(resources).to include('global_f11_env_f12_module_f13_env_f21_module_f22_global_f23')
|
|
@@ -331,24 +353,26 @@ describe "when performing lookup" do
|
|
|
331
353
|
end
|
|
332
354
|
|
|
333
355
|
it 'will resolve global, environment, and module correctly' do
|
|
356
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
334
357
|
Hiera.any_instance.expects(:lookup).with('bca::e', any_parameters).returns({ 'k1' => 'global_e1' })
|
|
335
|
-
|
|
358
|
+
resources = compile_and_get_notifications(<<-END.gsub(/^ {8}/, '')
|
|
336
359
|
include bca
|
|
337
360
|
$r = lookup(bca::e, Hash[String,String], hash)
|
|
338
361
|
notify { "${r[k1]}_${r[k2]}_${r[k3]}": }
|
|
339
362
|
END
|
|
340
|
-
|
|
363
|
+
)
|
|
341
364
|
expect(resources).to include('global_e1_module_bca_e2_env_bca_e3')
|
|
342
365
|
end
|
|
343
366
|
|
|
344
367
|
it 'will resolve global and environment correctly when module has no provider' do
|
|
368
|
+
Hiera.any_instance.expects(:lookup).with('lookup_options', any_parameters).at_most_once.throws(:no_such_key)
|
|
345
369
|
Hiera.any_instance.expects(:lookup).with('no_provider::e', any_parameters).returns({ 'k1' => 'global_e1' })
|
|
346
|
-
|
|
370
|
+
resources = compile_and_get_notifications(<<-END.gsub(/^ {8}/, '')
|
|
347
371
|
include no_provider
|
|
348
372
|
$r = lookup(no_provider::e, Hash[String,String], hash)
|
|
349
373
|
notify { "${r[k1]}_${r[k2]}_${r[k3]}": }
|
|
350
374
|
END
|
|
351
|
-
|
|
375
|
+
)
|
|
352
376
|
expect(resources).to include('global_e1__env_no_provider_e3') # k2 is missing
|
|
353
377
|
end
|
|
354
378
|
end
|
|
@@ -361,4 +385,171 @@ describe "when performing lookup" do
|
|
|
361
385
|
end.to raise_error(Puppet::ParseError, /data for module 'bad_data' must use keys qualified with the name of the module/)
|
|
362
386
|
end
|
|
363
387
|
end
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
context 'when using explain' do
|
|
391
|
+
it 'will explain that module is not found' do
|
|
392
|
+
assemble_and_compile('${r}', "'abc::a'") do |scope|
|
|
393
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
394
|
+
begin
|
|
395
|
+
Puppet::Pops::Lookup.lookup('ppx::e',nil, nil, false, nil, lookup_invocation)
|
|
396
|
+
rescue Puppet::Error
|
|
397
|
+
end
|
|
398
|
+
expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
|
|
399
|
+
Merge strategy first
|
|
400
|
+
Data Binding "hiera"
|
|
401
|
+
No such key: "ppx::e"
|
|
402
|
+
Data Provider "FunctionEnvDataProvider"
|
|
403
|
+
No such key: "ppx::e"
|
|
404
|
+
Module "ppx"
|
|
405
|
+
Module not found
|
|
406
|
+
EOS
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
it 'will explain that module does not find a key' do
|
|
411
|
+
assemble_and_compile('${r}', "'abc::a'") do |scope|
|
|
412
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
413
|
+
begin
|
|
414
|
+
Puppet::Pops::Lookup.lookup('abc::x', nil, nil, false, nil, lookup_invocation)
|
|
415
|
+
rescue Puppet::Error
|
|
416
|
+
end
|
|
417
|
+
expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
|
|
418
|
+
Merge strategy first
|
|
419
|
+
Data Binding "hiera"
|
|
420
|
+
No such key: "abc::x"
|
|
421
|
+
Data Provider "FunctionEnvDataProvider"
|
|
422
|
+
No such key: "abc::x"
|
|
423
|
+
Module "abc" using Data Provider "FunctionModuleDataProvider"
|
|
424
|
+
No such key: "abc::x"
|
|
425
|
+
EOS
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
it 'will explain deep merge results without options' do
|
|
430
|
+
assemble_and_compile('${r}', "'abc::a'") do |scope|
|
|
431
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
432
|
+
Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, 'deep', lookup_invocation)
|
|
433
|
+
expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
|
|
434
|
+
Merge strategy deep
|
|
435
|
+
Data Binding "hiera"
|
|
436
|
+
No such key: "abc::e"
|
|
437
|
+
Data Provider "FunctionEnvDataProvider"
|
|
438
|
+
Found key: "abc::e" value: {
|
|
439
|
+
"k1" => "env_e1",
|
|
440
|
+
"k3" => "env_e3"
|
|
441
|
+
}
|
|
442
|
+
Module "abc" using Data Provider "FunctionModuleDataProvider"
|
|
443
|
+
Found key: "abc::e" value: {
|
|
444
|
+
"k1" => "module_e1",
|
|
445
|
+
"k2" => "module_e2"
|
|
446
|
+
}
|
|
447
|
+
Merged result: {
|
|
448
|
+
"k1" => "env_e1",
|
|
449
|
+
"k2" => "module_e2",
|
|
450
|
+
"k3" => "env_e3"
|
|
451
|
+
}
|
|
452
|
+
EOS
|
|
453
|
+
end
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
it 'will explain deep merge results with options' do
|
|
457
|
+
assemble_and_compile('${r}', "'abc::a'") do |scope|
|
|
458
|
+
Hiera.any_instance.expects(:lookup).with(any_parameters).returns({'k1' => 'global_g1'})
|
|
459
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
460
|
+
Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
|
|
461
|
+
expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
|
|
462
|
+
Merge strategy deep
|
|
463
|
+
Options: {
|
|
464
|
+
"merge_hash_arrays" => true
|
|
465
|
+
}
|
|
466
|
+
Data Binding "hiera"
|
|
467
|
+
Found key: "abc::e" value: {
|
|
468
|
+
"k1" => "global_g1"
|
|
469
|
+
}
|
|
470
|
+
Data Provider "FunctionEnvDataProvider"
|
|
471
|
+
Found key: "abc::e" value: {
|
|
472
|
+
"k1" => "env_e1",
|
|
473
|
+
"k3" => "env_e3"
|
|
474
|
+
}
|
|
475
|
+
Module "abc" using Data Provider "FunctionModuleDataProvider"
|
|
476
|
+
Found key: "abc::e" value: {
|
|
477
|
+
"k1" => "module_e1",
|
|
478
|
+
"k2" => "module_e2"
|
|
479
|
+
}
|
|
480
|
+
Merged result: {
|
|
481
|
+
"k1" => "global_g1",
|
|
482
|
+
"k2" => "module_e2",
|
|
483
|
+
"k3" => "env_e3"
|
|
484
|
+
}
|
|
485
|
+
EOS
|
|
486
|
+
end
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it 'will handle path merge with not found correctly' do
|
|
490
|
+
assemble_and_compile('${r}', "'hieraprovider::test::param_a'") do |scope|
|
|
491
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
492
|
+
begin
|
|
493
|
+
Puppet::Pops::Lookup.lookup('hieraprovider::test::not_found', nil, nil, false, nil, lookup_invocation)
|
|
494
|
+
rescue Puppet::DataBinding::LookupError
|
|
495
|
+
end
|
|
496
|
+
expect(lookup_invocation.explainer.to_s).to eq(<<EOS)
|
|
497
|
+
Merge strategy first
|
|
498
|
+
Data Binding "hiera"
|
|
499
|
+
No such key: "hieraprovider::test::not_found"
|
|
500
|
+
Data Provider "FunctionEnvDataProvider"
|
|
501
|
+
No such key: "hieraprovider::test::not_found"
|
|
502
|
+
Module "hieraprovider" using Data Provider "Hiera Data Provider, version 4"
|
|
503
|
+
ConfigurationPath "#{environmentpath}/production/modules/hieraprovider/hiera.yaml"
|
|
504
|
+
Data Provider "two paths"
|
|
505
|
+
Merge strategy first
|
|
506
|
+
Path "#{environmentpath}/production/modules/hieraprovider/data/first.json"
|
|
507
|
+
Original path: first
|
|
508
|
+
No such key: "hieraprovider::test::not_found"
|
|
509
|
+
Path "#{environmentpath}/production/modules/hieraprovider/data/second_not_present.json"
|
|
510
|
+
Original path: second_not_present
|
|
511
|
+
Path not found
|
|
512
|
+
EOS
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
it 'will provide a hash containing all explanation elements' do
|
|
517
|
+
assemble_and_compile('${r}', "'abc::a'") do |scope|
|
|
518
|
+
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, true)
|
|
519
|
+
Puppet::Pops::Lookup.lookup('abc::e', Puppet::Pops::Types::TypeParser.new.parse('Hash[String,String]'), nil, false, {'strategy' => 'deep', 'merge_hash_arrays' => true}, lookup_invocation)
|
|
520
|
+
expect(lookup_invocation.explainer.to_hash).to eq(
|
|
521
|
+
{
|
|
522
|
+
:branches => [
|
|
523
|
+
{
|
|
524
|
+
:key => 'abc::e',
|
|
525
|
+
:event => :not_found,
|
|
526
|
+
:type => :global,
|
|
527
|
+
:name => :hiera
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
:key => 'abc::e',
|
|
531
|
+
:value => { 'k1' => 'env_e1', 'k3' => 'env_e3' },
|
|
532
|
+
:event => :found,
|
|
533
|
+
:type => :data_provider,
|
|
534
|
+
:name => 'FunctionEnvDataProvider'
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
:key => 'abc::e',
|
|
538
|
+
:value => { 'k1' => 'module_e1', 'k2' => 'module_e2' },
|
|
539
|
+
:event => :found,
|
|
540
|
+
:type => :data_provider,
|
|
541
|
+
:name => 'FunctionModuleDataProvider',
|
|
542
|
+
:module => 'abc'
|
|
543
|
+
}
|
|
544
|
+
],
|
|
545
|
+
:value => { 'k1' => 'env_e1', 'k2' => 'module_e2', 'k3' => 'env_e3' },
|
|
546
|
+
:event => :result,
|
|
547
|
+
:merge => :deep,
|
|
548
|
+
:options => { 'merge_hash_arrays' => true },
|
|
549
|
+
:type => :merge
|
|
550
|
+
}
|
|
551
|
+
)
|
|
552
|
+
end
|
|
553
|
+
end
|
|
554
|
+
end
|
|
364
555
|
end
|
|
@@ -22,19 +22,19 @@ describe 'the regsubst function' do
|
|
|
22
22
|
|
|
23
23
|
context 'when using a string pattern' do
|
|
24
24
|
it 'should raise an Error if there is less than 3 arguments' do
|
|
25
|
-
expect { regsubst('foo', 'bar') }.to raise_error(/
|
|
25
|
+
expect { regsubst('foo', 'bar') }.to raise_error(/expects between 3 and 5 arguments, got 2/)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it 'should raise an Error if there is more than 5 arguments' do
|
|
29
|
-
expect { regsubst('foo', 'bar', 'gazonk', 'G', 'U', 'y') }.to raise_error(/
|
|
29
|
+
expect { regsubst('foo', 'bar', 'gazonk', 'G', 'U', 'y') }.to raise_error(/expects between 3 and 5 arguments, got 6/)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
it 'should raise an Error if given a bad flag' do
|
|
33
|
-
expect { regsubst('foo', 'bar', 'gazonk', 'X') }.to raise_error(/
|
|
33
|
+
expect { regsubst('foo', 'bar', 'gazonk', 'X') }.to raise_error(/parameter 'flags' expects a match for Pattern\[\/\^\[GEIM\]\*\$\/\], got 'X'/)
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it 'should raise an Error if given a bad encoding' do
|
|
37
|
-
expect { regsubst('foo', 'bar', 'gazonk', nil, 'X') }.to raise_error(/
|
|
37
|
+
expect { regsubst('foo', 'bar', 'gazonk', nil, 'X') }.to raise_error(/parameter 'encoding' expects a match for Enum\['E', 'N', 'S', 'U'\], got 'X'/)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it 'should raise an Error if given a bad regular expression' do
|
|
@@ -48,15 +48,15 @@ describe 'the regsubst function' do
|
|
|
48
48
|
|
|
49
49
|
context 'when using a regexp pattern' do
|
|
50
50
|
it 'should raise an Error if there is less than 3 arguments' do
|
|
51
|
-
expect { regsubst('foo', /bar/) }.to raise_error(/
|
|
51
|
+
expect { regsubst('foo', /bar/) }.to raise_error(/expects between 3 and 5 arguments, got 2/)
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
it 'should raise an Error if there is more than
|
|
55
|
-
expect { regsubst('foo', /bar/, 'gazonk', 'G', 'y') }.to raise_error(/
|
|
54
|
+
it 'should raise an Error if there is more than 5 arguments' do
|
|
55
|
+
expect { regsubst('foo', /bar/, 'gazonk', 'G', 'E', 'y') }.to raise_error(/expects between 3 and 5 arguments, got 6/)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it 'should raise an Error if given a flag other thant G' do
|
|
59
|
-
expect { regsubst('foo', /bar/, 'gazonk', 'I') }.to raise_error(/
|
|
59
|
+
expect { regsubst('foo', /bar/, 'gazonk', 'I') }.to raise_error(/expected one of/)
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it 'should handle global substitutions' do
|
|
@@ -94,5 +94,14 @@ describe 'the regsubst function' do
|
|
|
94
94
|
'G')
|
|
95
95
|
).to eql(['<130>.<236>.<254>.<10>', '<foo>.<example>.<com>','<coconut>', '<10>.<20>.<30>.<40>'])
|
|
96
96
|
end
|
|
97
|
+
|
|
98
|
+
it 'should return an empty array if given an empty array and string pattern' do
|
|
99
|
+
expect(regsubst([], '', '')).to eql([])
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'should return an empty array if given an empty array and regexp pattern' do
|
|
103
|
+
expect(regsubst([], //, '')).to eql([])
|
|
104
|
+
end
|
|
105
|
+
|
|
97
106
|
end
|
|
98
107
|
end
|
|
@@ -27,6 +27,6 @@ describe 'the scanf function' do
|
|
|
27
27
|
it 'errors when not given enough arguments' do
|
|
28
28
|
expect do
|
|
29
29
|
compile_to_catalog("'42'.scanf()")
|
|
30
|
-
end.to raise_error(
|
|
30
|
+
end.to raise_error(/'scanf' expects 2 arguments, got 1/)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
@@ -21,11 +21,11 @@ describe 'the split function' do
|
|
|
21
21
|
let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
|
|
22
22
|
|
|
23
23
|
it 'should raise an Error if there is less than 2 arguments' do
|
|
24
|
-
expect { split('a,b') }.to raise_error(/
|
|
24
|
+
expect { split('a,b') }.to raise_error(/'split' expects 2 arguments, got 1/)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it 'should raise an Error if there is more than 2 arguments' do
|
|
28
|
-
expect { split('a,b','foo', 'bar') }.to raise_error(/
|
|
28
|
+
expect { split('a,b','foo', 'bar') }.to raise_error(/'split' expects 2 arguments, got 3/)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
it 'should raise a RegexpError if the regexp is malformed' do
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet/pops'
|
|
3
|
+
require 'puppet/loaders'
|
|
4
|
+
|
|
5
|
+
describe "the versioncmp function" do
|
|
6
|
+
|
|
7
|
+
before(:all) do
|
|
8
|
+
loaders = Puppet::Pops::Loaders.new(Puppet::Node::Environment.create(:testing, []))
|
|
9
|
+
Puppet.push_context({:loaders => loaders}, "test-examples")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after(:all) do
|
|
13
|
+
Puppet::Pops::Loaders.clear
|
|
14
|
+
Puppet::pop_context()
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def versioncmp(*args)
|
|
18
|
+
Puppet.lookup(:loaders).puppet_system_loader.load(:function, 'versioncmp').call({}, *args)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
let(:type_parser) { Puppet::Pops::Types::TypeParser.new }
|
|
22
|
+
|
|
23
|
+
it 'should raise an Error if there is less than 2 arguments' do
|
|
24
|
+
expect { versioncmp('a,b') }.to raise_error(/expects 2 arguments, got 1/)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'should raise an Error if there is more than 2 arguments' do
|
|
28
|
+
expect { versioncmp('a,b','foo', 'bar') }.to raise_error(/expects 2 arguments, got 3/)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should call Puppet::Util::Package.versioncmp (included in scope)" do
|
|
32
|
+
Puppet::Util::Package.expects(:versioncmp).with('1.2', '1.3').returns(-1)
|
|
33
|
+
|
|
34
|
+
expect(versioncmp('1.2', '1.3')).to eq -1
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -74,11 +74,7 @@ describe 'the 4x function api' do
|
|
|
74
74
|
it 'an error is raised when calling a no arguments function with arguments' do
|
|
75
75
|
f = create_noargs_function_class()
|
|
76
76
|
func = f.new(:closure_scope, :loader)
|
|
77
|
-
expect{func.call({}, 'surprise')}.to raise_error(ArgumentError, "
|
|
78
|
-
expected:
|
|
79
|
-
test() - arg count {0}
|
|
80
|
-
actual:
|
|
81
|
-
test(String) - arg count {1}")
|
|
77
|
+
expect{func.call({}, 'surprise')}.to raise_error(ArgumentError, "'test' expects no arguments, got 1")
|
|
82
78
|
end
|
|
83
79
|
|
|
84
80
|
it 'a simple function can be called' do
|
|
@@ -97,11 +93,7 @@ actual:
|
|
|
97
93
|
signature = 'Any x, Any y'
|
|
98
94
|
expect do
|
|
99
95
|
func.call({}, 10)
|
|
100
|
-
end.to raise_error(ArgumentError, "
|
|
101
|
-
expected:
|
|
102
|
-
min(#{signature}) - arg count {2}
|
|
103
|
-
actual:
|
|
104
|
-
min(Integer) - arg count {1}")
|
|
96
|
+
end.to raise_error(ArgumentError, "'min' expects 2 arguments, got 1")
|
|
105
97
|
end
|
|
106
98
|
|
|
107
99
|
it 'an error is raised if called with too many arguments' do
|
|
@@ -112,12 +104,7 @@ actual:
|
|
|
112
104
|
signature = 'Any x, Any y'
|
|
113
105
|
expect do
|
|
114
106
|
func.call({}, 10, 10, 10)
|
|
115
|
-
end.to raise_error(ArgumentError,
|
|
116
|
-
"function 'min' called with mis-matched arguments
|
|
117
|
-
expected:
|
|
118
|
-
min(#{signature}) - arg count {2}
|
|
119
|
-
actual:
|
|
120
|
-
min(Integer, Integer, Integer) - arg count {3}")))
|
|
107
|
+
end.to raise_error(ArgumentError, "'min' expects 2 arguments, got 3")
|
|
121
108
|
end
|
|
122
109
|
|
|
123
110
|
it 'an error is raised if simple function-name and method are not matched' do
|
|
@@ -151,44 +138,22 @@ actual:
|
|
|
151
138
|
func = f.new(:closure_scope, :loader)
|
|
152
139
|
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
|
153
140
|
expect do
|
|
154
|
-
func.call({}, 10,
|
|
155
|
-
end.to raise_error(ArgumentError,
|
|
156
|
-
"function 'min' called with mis-matched arguments
|
|
157
|
-
expected:
|
|
158
|
-
min(Numeric a, Numeric b) - arg count {2}
|
|
159
|
-
actual:
|
|
160
|
-
min(Integer, Integer, Integer) - arg count {3}")))
|
|
141
|
+
func.call({}, 10, 'ten')
|
|
142
|
+
end.to raise_error(ArgumentError, "'min' parameter 'b' expects a Numeric value, got String")
|
|
161
143
|
end
|
|
162
144
|
|
|
163
|
-
it 'an error includes optional indicators
|
|
164
|
-
f =
|
|
145
|
+
it 'an error includes optional indicators for last element' do
|
|
146
|
+
f = create_function_with_optionals_and_repeated_via_multiple_dispatch()
|
|
165
147
|
# TODO: Bogus parameters, not yet used
|
|
166
148
|
func = f.new(:closure_scope, :loader)
|
|
167
149
|
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
|
168
|
-
signature = 'Any x, Any y, Any a?, Any b?, Any c{0,}'
|
|
169
150
|
expect do
|
|
170
|
-
func.call({}, 10)
|
|
171
|
-
end.to raise_error(ArgumentError,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
min(Integer) - arg count {1}")
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
it 'an error includes optional indicators and count for last element when defined via dispatch' do
|
|
180
|
-
f = create_function_with_optionals_and_repeated_via_dispatch()
|
|
181
|
-
# TODO: Bogus parameters, not yet used
|
|
182
|
-
func = f.new(:closure_scope, :loader)
|
|
183
|
-
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
|
184
|
-
expect do
|
|
185
|
-
func.call({}, 10)
|
|
186
|
-
end.to raise_error(ArgumentError,
|
|
187
|
-
"function 'min' called with mis-matched arguments
|
|
188
|
-
expected:
|
|
189
|
-
min(Numeric x, Numeric y, Numeric a?, Numeric b?, Numeric c{0,}) - arg count {2,}
|
|
190
|
-
actual:
|
|
191
|
-
min(Integer) - arg count {1}")
|
|
151
|
+
func.call({}, 3, 10, 3, "4")
|
|
152
|
+
end.to raise_error(ArgumentError, "'min' expected one of:
|
|
153
|
+
(Numeric x, Numeric y, Numeric a?, Numeric b?, Numeric c*)
|
|
154
|
+
rejected: parameter 'b' expects a Numeric value, got String
|
|
155
|
+
(String x, String y, String a+)
|
|
156
|
+
rejected: parameter 'x' expects a String value, got Integer")
|
|
192
157
|
end
|
|
193
158
|
|
|
194
159
|
it 'can create optional repeated parameter' do
|
|
@@ -210,12 +175,7 @@ actual:
|
|
|
210
175
|
func = f.new(:closure_scope, :loader)
|
|
211
176
|
expect(func.call({}, 1)).to eql(1)
|
|
212
177
|
expect(func.call({}, 1, 2)).to eql(2)
|
|
213
|
-
expect { func.call({}) }.to raise_error(ArgumentError,
|
|
214
|
-
"function 'count_args' called with mis-matched arguments
|
|
215
|
-
expected:
|
|
216
|
-
count_args(Any c{1,}) - arg count {1,}
|
|
217
|
-
actual:
|
|
218
|
-
count_args(Undef{0}) - arg count {0}")
|
|
178
|
+
expect { func.call({}) }.to raise_error(ArgumentError, "'count_args' expects at least 1 argument, got none")
|
|
219
179
|
end
|
|
220
180
|
|
|
221
181
|
it 'can create scope_param followed by repeated parameter' do
|
|
@@ -256,14 +216,12 @@ actual:
|
|
|
256
216
|
func = f.new(:closure_scope, :loader)
|
|
257
217
|
expect(func.is_a?(Puppet::Functions::Function)).to be_truthy
|
|
258
218
|
expect do
|
|
259
|
-
func.call({}, 10,
|
|
260
|
-
end.to raise_error(ArgumentError,
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
actual:
|
|
266
|
-
min(Integer, Integer, Integer) - arg count {3}")
|
|
219
|
+
func.call({}, 10, '20')
|
|
220
|
+
end.to raise_error(ArgumentError, "'min' expected one of:
|
|
221
|
+
(Numeric a, Numeric b)
|
|
222
|
+
rejected: parameter 'b' expects a Numeric value, got String
|
|
223
|
+
(String s1, String s2)
|
|
224
|
+
rejected: parameter 's1' expects a String value, got Integer")
|
|
267
225
|
end
|
|
268
226
|
|
|
269
227
|
context 'can use injection' do
|
|
@@ -334,12 +292,7 @@ actual:
|
|
|
334
292
|
the_function = create_function_with_required_block_all_defaults().new(:closure_scope, :loader)
|
|
335
293
|
expect do
|
|
336
294
|
the_function.call({}, 10)
|
|
337
|
-
end.to raise_error(ArgumentError,
|
|
338
|
-
"function 'test' called with mis-matched arguments
|
|
339
|
-
expected:
|
|
340
|
-
test(Integer x, Callable block) - arg count {2}
|
|
341
|
-
actual:
|
|
342
|
-
test(Integer) - arg count {1}")
|
|
295
|
+
end.to raise_error(ArgumentError, "'test' expects a block")
|
|
343
296
|
end
|
|
344
297
|
|
|
345
298
|
it 'such that, an optional block can be defined and given as an argument' do
|
|
@@ -361,7 +314,7 @@ actual:
|
|
|
361
314
|
|
|
362
315
|
context 'provides signature information' do
|
|
363
316
|
it 'about capture rest (varargs)' do
|
|
364
|
-
fc =
|
|
317
|
+
fc = create_function_with_optionals_and_repeated
|
|
365
318
|
signatures = fc.signatures
|
|
366
319
|
expect(signatures.size).to eql(1)
|
|
367
320
|
signature = signatures[0]
|
|
@@ -369,14 +322,14 @@ actual:
|
|
|
369
322
|
end
|
|
370
323
|
|
|
371
324
|
it 'about optional and required parameters' do
|
|
372
|
-
fc =
|
|
325
|
+
fc = create_function_with_optionals_and_repeated
|
|
373
326
|
signature = fc.signatures[0]
|
|
374
327
|
expect(signature.args_range).to eql( [2, Float::INFINITY ] )
|
|
375
328
|
expect(signature.infinity?(signature.args_range[1])).to be_truthy
|
|
376
329
|
end
|
|
377
330
|
|
|
378
331
|
it 'about block not being allowed' do
|
|
379
|
-
fc =
|
|
332
|
+
fc = create_function_with_optionals_and_repeated
|
|
380
333
|
signature = fc.signatures[0]
|
|
381
334
|
expect(signature.block_range).to eql( [ 0, 0 ] )
|
|
382
335
|
expect(signature.block_type).to be_nil
|
|
@@ -582,7 +535,7 @@ actual:
|
|
|
582
535
|
end
|
|
583
536
|
end
|
|
584
537
|
|
|
585
|
-
def
|
|
538
|
+
def create_function_with_optionals_and_repeated
|
|
586
539
|
f = Puppet::Functions.create_function('min') do
|
|
587
540
|
def min(x,y,a=1, b=1, *c)
|
|
588
541
|
x <= y ? x : y
|
|
@@ -605,6 +558,39 @@ actual:
|
|
|
605
558
|
end
|
|
606
559
|
end
|
|
607
560
|
|
|
561
|
+
def create_function_with_optionals_and_repeated_via_multiple_dispatch
|
|
562
|
+
f = Puppet::Functions.create_function('min') do
|
|
563
|
+
dispatch :min do
|
|
564
|
+
param 'Numeric', :x
|
|
565
|
+
param 'Numeric', :y
|
|
566
|
+
optional_param 'Numeric', :a
|
|
567
|
+
optional_param 'Numeric', :b
|
|
568
|
+
repeated_param 'Numeric', :c
|
|
569
|
+
end
|
|
570
|
+
dispatch :min do
|
|
571
|
+
param 'String', :x
|
|
572
|
+
param 'String', :y
|
|
573
|
+
required_repeated_param 'String', :a
|
|
574
|
+
end
|
|
575
|
+
def min(x,y,a=1, b=1, *c)
|
|
576
|
+
x <= y ? x : y
|
|
577
|
+
end
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
def create_function_with_required_repeated_via_dispatch
|
|
582
|
+
f = Puppet::Functions.create_function('min') do
|
|
583
|
+
dispatch :min do
|
|
584
|
+
param 'Numeric', :x
|
|
585
|
+
param 'Numeric', :y
|
|
586
|
+
required_repeated_param 'Numeric', :z
|
|
587
|
+
end
|
|
588
|
+
def min(x,y, *z)
|
|
589
|
+
x <= y ? x : y
|
|
590
|
+
end
|
|
591
|
+
end
|
|
592
|
+
end
|
|
593
|
+
|
|
608
594
|
def create_function_with_repeated
|
|
609
595
|
f = Puppet::Functions.create_function('count_args') do
|
|
610
596
|
dispatch :count_args do
|
|
@@ -27,6 +27,6 @@ describe Puppet::Graph::SequentialPrioritizer do
|
|
|
27
27
|
it "fails to prioritize a key contained in an unknown container" do
|
|
28
28
|
expect do
|
|
29
29
|
priorities.generate_priority_contained_in("unknown", "child 1")
|
|
30
|
-
end.to raise_error
|
|
30
|
+
end.to raise_error(NoMethodError, /`down' for nil/)
|
|
31
31
|
end
|
|
32
32
|
end
|