puppet 4.2.3 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/Gemfile +3 -0
- data/README.md +1 -1
- data/ext/debian/puppet.init +0 -1
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/osx/puppet.plist +0 -2
- data/ext/redhat/client.init +13 -5
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +5 -1
- data/ext/redhat/server.init +1 -1
- data/ext/systemd/puppet.service +1 -0
- data/lib/puppet.rb +12 -0
- data/lib/puppet/agent.rb +4 -4
- data/lib/puppet/agent/locker.rb +11 -2
- data/lib/puppet/application/agent.rb +5 -1
- data/lib/puppet/application/apply.rb +4 -0
- data/lib/puppet/application/filebucket.rb +78 -4
- data/lib/puppet/application/lookup.rb +356 -0
- data/lib/puppet/application/master.rb +3 -0
- data/lib/puppet/configurer.rb +9 -5
- data/lib/puppet/context.rb +16 -1
- data/lib/puppet/context/trusted_information.rb +21 -1
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- data/lib/puppet/data_providers.rb +12 -13
- 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/defaults.rb +12 -2
- 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/functions.rb +2 -4
- 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/filter.rb +58 -23
- 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 +75 -2
- 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/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/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.rb +7 -0
- data/lib/puppet/info_service/class_information_service.rb +111 -0
- 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/network/authconfig.rb +21 -1
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
- data/lib/puppet/node/environment.rb +9 -2
- data/lib/puppet/parser.rb +3 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
- data/lib/puppet/parser/compiler.rb +302 -12
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- 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/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/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/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 +98 -19
- data/lib/puppet/plugins/configuration.rb +3 -2
- data/lib/puppet/plugins/data_providers.rb +12 -60
- data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
- data/lib/puppet/plugins/data_providers/registry.rb +84 -0
- data/lib/puppet/pops.rb +19 -17
- 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 +5 -5
- 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 +1 -1
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/lookup.rb +25 -47
- data/lib/puppet/pops/lookup/explainer.rb +402 -0
- data/lib/puppet/pops/lookup/invocation.rb +117 -0
- data/lib/puppet/pops/merge_strategy.rb +73 -5
- data/lib/puppet/pops/model/factory.rb +34 -0
- data/lib/puppet/pops/model/model_label_provider.rb +10 -1
- data/lib/puppet/pops/model/model_meta.rb +15 -0
- 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 +56 -3
- data/lib/puppet/pops/parser/eparser.rb +1549 -1352
- data/lib/puppet/pops/parser/lexer2.rb +31 -6
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +25 -13
- 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 +116 -127
- data/lib/puppet/pops/types/types.rb +1394 -255
- data/lib/puppet/pops/types/types_meta.rb +0 -234
- data/lib/puppet/pops/validation.rb +7 -2
- data/lib/puppet/pops/validation/checker4_0.rb +28 -0
- data/lib/puppet/provider/augeas/augeas.rb +50 -0
- 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/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 +14 -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/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 +15 -3
- data/lib/puppet/provider/sshkey/parsed.rb +19 -9
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reports.rb +5 -1
- data/lib/puppet/resource.rb +50 -73
- 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/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.rb +4 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
- data/lib/puppet/transaction/resource_harness.rb +9 -4
- data/lib/puppet/type.rb +74 -3
- data/lib/puppet/type/augeas.rb +8 -0
- data/lib/puppet/type/file/source.rb +14 -12
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/util/windows/security.rb +4 -1
- data/lib/puppet/util/windows/taskscheduler.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- 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 +23 -19
- data/spec/integration/parser/resource_expressions_spec.rb +4 -4
- data/spec/integration/parser/undef_param_spec.rb +1 -1
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/type/package_spec.rb +2 -0
- 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 +8 -0
- data/spec/unit/application/filebucket_spec.rb +87 -1
- data/spec/unit/application/lookup_spec.rb +195 -0
- 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/file_bucket/dipper_spec.rb +210 -1
- 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/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/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/request_spec.rb +8 -8
- data/spec/unit/info_service_spec.rb +236 -0
- 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/http/connection_spec.rb +14 -19
- 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 +19 -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 +33 -7
- 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 +7 -12
- data/spec/unit/pops/validator/validator_spec.rb +25 -0
- 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/rpm_spec.rb +25 -2
- data/spec/unit/provider/package/windows/package_spec.rb +41 -0
- data/spec/unit/provider/package/yum_spec.rb +21 -13
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
- data/spec/unit/provider/service/debian_spec.rb +27 -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 +19 -4
- data/spec/unit/provider/service/systemd_spec.rb +78 -29
- data/spec/unit/provider/sshkey/parsed_spec.rb +23 -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 +22 -4
- data/spec/unit/settings_spec.rb +90 -1
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
- 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/type/package_spec.rb +1 -0
- data/spec/unit/type/user_spec.rb +14 -7
- data/spec/unit/type_spec.rb +1 -1
- metadata +169 -5
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/spec/integration/data_binding.rb +0 -104
@@ -164,10 +164,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
164
164
|
keys = keys[0, keys.size - 1]
|
165
165
|
end
|
166
166
|
assert_keys(keys, o, 1, Float::INFINITY, Puppet::Pops::Types::PAnyType)
|
167
|
-
|
168
|
-
# set size type, or nil for default (exactly 1)
|
169
|
-
t.size_type = size_type
|
170
|
-
t
|
167
|
+
Puppet::Pops::Types::TypeFactory.tuple(keys, size_type)
|
171
168
|
end
|
172
169
|
|
173
170
|
def access_PCallableType(o, scope, keys)
|
@@ -189,9 +186,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
189
186
|
else
|
190
187
|
fail(Puppet::Pops::Issues::BAD_STRING_SLICE_ARITY, @semantic, {:actual => keys.size})
|
191
188
|
end
|
192
|
-
|
193
|
-
string_t.size_type = size_t
|
194
|
-
string_t
|
189
|
+
TYPEFACTORY.string(size_t)
|
195
190
|
end
|
196
191
|
|
197
192
|
# Asserts type of each key and calls fail with BAD_TYPE_SPECIFICATION
|
@@ -229,7 +224,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
229
224
|
when :default
|
230
225
|
'Default'
|
231
226
|
else
|
232
|
-
Puppet::Pops::Types::TypeCalculator.generalize
|
227
|
+
Puppet::Pops::Types::TypeCalculator.generalize(Puppet::Pops::Types::TypeCalculator.infer(actual)).to_s
|
233
228
|
end
|
234
229
|
end
|
235
230
|
|
@@ -252,10 +247,14 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
252
247
|
keys.flatten!
|
253
248
|
if keys.size == 1
|
254
249
|
type = keys[0]
|
255
|
-
unless type.is_a?(Puppet::Pops::Types::PAnyType)
|
256
|
-
|
250
|
+
unless type.is_a?(Puppet::Pops::Types::PAnyType)
|
251
|
+
if type.is_a?(String)
|
252
|
+
type = TYPEFACTORY.string(nil, type)
|
253
|
+
else
|
254
|
+
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
|
255
|
+
end
|
257
256
|
end
|
258
|
-
|
257
|
+
Puppet::Pops::Types::POptionalType.new(type)
|
259
258
|
else
|
260
259
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Optional-Type', :min => 1, :actual => keys.size})
|
261
260
|
end
|
@@ -270,7 +269,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
270
269
|
type = keys[0]
|
271
270
|
case type
|
272
271
|
when String
|
273
|
-
type = TYPEFACTORY.string(type)
|
272
|
+
type = TYPEFACTORY.string(nil, type)
|
274
273
|
when Puppet::Pops::Types::PAnyType
|
275
274
|
type = nil if type.class == Puppet::Pops::Types::PAnyType
|
276
275
|
else
|
@@ -288,9 +287,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
288
287
|
unless keys[0].is_a?(Puppet::Pops::Types::PAnyType)
|
289
288
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Type-Type', :actual => keys[0].class})
|
290
289
|
end
|
291
|
-
|
292
|
-
result.type = keys[0]
|
293
|
-
result
|
290
|
+
Puppet::Pops::Types::PType.new(keys[0])
|
294
291
|
else
|
295
292
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Type-Type', :min => 1, :actual => keys.size})
|
296
293
|
end
|
@@ -312,11 +309,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
312
309
|
fail(Puppet::Pops::Issues::BAD_INTEGER_SLICE_TYPE, @semantic.keys[index],
|
313
310
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
314
311
|
end
|
315
|
-
|
316
|
-
from, to = keys
|
317
|
-
ranged_integer.from = from == :default ? nil : from
|
318
|
-
ranged_integer.to = to == :default ? nil : to
|
319
|
-
ranged_integer
|
312
|
+
Puppet::Pops::Types::PIntegerType.new(*keys)
|
320
313
|
end
|
321
314
|
|
322
315
|
def access_PFloatType(o, scope, keys)
|
@@ -328,11 +321,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
328
321
|
fail(Puppet::Pops::Issues::BAD_FLOAT_SLICE_TYPE, @semantic.keys[index],
|
329
322
|
{:actual => x.class}) unless (x.is_a?(Float) || x.is_a?(Integer) || x == :default)
|
330
323
|
end
|
331
|
-
ranged_float = Puppet::Pops::Types::PFloatType.new()
|
332
324
|
from, to = keys
|
333
|
-
|
334
|
-
|
335
|
-
|
325
|
+
from = from == :default || from.nil? ? nil : Float(from)
|
326
|
+
to = to == :default || to.nil? ? nil : Float(to)
|
327
|
+
Puppet::Pops::Types::PFloatType.new(from, to)
|
336
328
|
end
|
337
329
|
|
338
330
|
# A Hash can create a new Hash type, one arg sets value type, two args sets key and value type in new type.
|
@@ -348,29 +340,18 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
348
340
|
end
|
349
341
|
case keys.size
|
350
342
|
when 2
|
351
|
-
|
352
|
-
result.key_type = keys[0]
|
353
|
-
result.element_type = keys[1]
|
354
|
-
result
|
343
|
+
Puppet::Pops::Types::PHashType.new(keys[0], keys[1], nil)
|
355
344
|
when 3
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
size_t = collection_size_t(1, keys[2])
|
360
|
-
result
|
345
|
+
size_t = keys[2]
|
346
|
+
size_t = Puppet::Pops::Types::PIntegerType.new(size_t) unless size_t.is_a?(Puppet::Pops::Types::PIntegerType)
|
347
|
+
Puppet::Pops::Types::PHashType.new(keys[0], keys[1], size_t)
|
361
348
|
when 4
|
362
|
-
|
363
|
-
result.key_type = keys[0]
|
364
|
-
result.element_type = keys[1]
|
365
|
-
size_t = collection_size_t(1, keys[2], keys[3])
|
366
|
-
result
|
349
|
+
Puppet::Pops::Types::PHashType.new(keys[0], keys[1], collection_size_t(1, keys[2], keys[3]))
|
367
350
|
else
|
368
351
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic, {
|
369
352
|
:base_type => 'Hash-Type', :min => 2, :max => 4, :actual => keys.size
|
370
353
|
})
|
371
354
|
end
|
372
|
-
result.size_type = size_t if size_t
|
373
|
-
result
|
374
355
|
end
|
375
356
|
|
376
357
|
# CollectionType is parameterized with a range
|
@@ -385,9 +366,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
385
366
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_ARITY, @semantic,
|
386
367
|
{:base_type => 'Collection-Type', :min => 1, :max => 2, :actual => keys.size})
|
387
368
|
end
|
388
|
-
|
389
|
-
result.size_type = size_t
|
390
|
-
result
|
369
|
+
Puppet::Pops::Types::PCollectionType.new(size_t)
|
391
370
|
end
|
392
371
|
|
393
372
|
# An Array can create a new Array type. It is not possible to create a collection of Array types.
|
@@ -408,26 +387,19 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
408
387
|
unless keys[0].is_a?(Puppet::Pops::Types::PAnyType)
|
409
388
|
fail(Puppet::Pops::Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Array-Type', :actual => keys[0].class})
|
410
389
|
end
|
411
|
-
|
412
|
-
result.element_type = keys[0]
|
413
|
-
result.size_type = size_t
|
414
|
-
result
|
390
|
+
Puppet::Pops::Types::PArrayType.new(keys[0], size_t)
|
415
391
|
end
|
416
392
|
|
417
393
|
# Produces an PIntegerType (range) given one or two keys.
|
418
394
|
def collection_size_t(start_index, *keys)
|
419
395
|
if keys.size == 1 && keys[0].is_a?(Puppet::Pops::Types::PIntegerType)
|
420
|
-
keys[0]
|
396
|
+
keys[0]
|
421
397
|
else
|
422
398
|
keys.each_with_index do |x, index|
|
423
399
|
fail(Puppet::Pops::Issues::BAD_COLLECTION_SLICE_TYPE, @semantic.keys[start_index + index],
|
424
400
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
425
401
|
end
|
426
|
-
|
427
|
-
from, to = keys
|
428
|
-
ranged_integer.from = from == :default ? nil : from
|
429
|
-
ranged_integer.to = to == :default ? nil : to
|
430
|
-
ranged_integer
|
402
|
+
Puppet::Pops::Types::PIntegerType.new(*keys)
|
431
403
|
end
|
432
404
|
end
|
433
405
|
|
@@ -527,10 +499,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
527
499
|
})
|
528
500
|
end
|
529
501
|
|
530
|
-
|
531
|
-
rtype.type_name = type_name
|
532
|
-
rtype.title = (t == :no_title ? nil : t)
|
533
|
-
rtype
|
502
|
+
Puppet::Pops::Types::PResourceType.new(type_name, t == :no_title ? nil : t)
|
534
503
|
end
|
535
504
|
# returns single type if request was for a single entity, else an array of types (possibly empty)
|
536
505
|
return result_type_array ? result : result.pop
|
@@ -577,10 +546,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
577
546
|
end
|
578
547
|
|
579
548
|
if name =~ Puppet::Pops::Patterns::NAME
|
580
|
-
ctype = Puppet::Pops::Types::PHostClassType.new()
|
581
549
|
# Remove leading '::' since all references are global, and 3x runtime does the wrong thing
|
582
|
-
|
583
|
-
ctype
|
550
|
+
Puppet::Pops::Types::PHostClassType.new(name.sub(/^::/, EMPTY_STRING))
|
584
551
|
else
|
585
552
|
fail(Issues::ILLEGAL_NAME, @semantic.keys[i], {:name=>c})
|
586
553
|
end
|
@@ -27,8 +27,8 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
27
27
|
def call(*args)
|
28
28
|
variable_bindings = combine_values_with_parameters(args)
|
29
29
|
|
30
|
-
tc = Puppet::Pops::Types::TypeCalculator
|
31
|
-
final_args = tc.infer_set(parameters.
|
30
|
+
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
31
|
+
final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
|
32
32
|
if param.captures_rest
|
33
33
|
tmp_args.concat(variable_bindings[param.name])
|
34
34
|
else
|
@@ -36,10 +36,10 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
36
36
|
end
|
37
37
|
end)
|
38
38
|
|
39
|
-
if
|
39
|
+
if type.callable?(final_args)
|
40
40
|
@evaluator.evaluate_block_with_bindings(@enclosing_scope, variable_bindings, @model.body)
|
41
41
|
else
|
42
|
-
raise ArgumentError,
|
42
|
+
raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -78,10 +78,10 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
78
78
|
raise ArgumentError, "Too few arguments; no value given for required parameters #{missing.collect(&:name).join(" ,")}"
|
79
79
|
end
|
80
80
|
|
81
|
-
tc = Puppet::Pops::Types::TypeCalculator
|
81
|
+
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
82
82
|
final_args = tc.infer_set(parameter_names.collect { |param| scope_hash[param] })
|
83
|
-
if !
|
84
|
-
raise ArgumentError,
|
83
|
+
if !type.callable?(final_args)
|
84
|
+
raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
|
85
85
|
end
|
86
86
|
else
|
87
87
|
scope_hash = args_hash
|
@@ -199,7 +199,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
199
199
|
type = if param.type_expr
|
200
200
|
@evaluator.evaluate(param.type_expr, @enclosing_scope)
|
201
201
|
else
|
202
|
-
Puppet::Pops::Types::
|
202
|
+
Puppet::Pops::Types::PAnyType::DEFAULT
|
203
203
|
end
|
204
204
|
|
205
205
|
if param.captures_rest && type.is_a?(Puppet::Pops::Types::PArrayType)
|
@@ -665,7 +665,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
665
665
|
|
666
666
|
evaluated_name = evaluate(tmp_name, scope)
|
667
667
|
unless type_name_acceptable
|
668
|
-
actual = type_calculator.generalize
|
668
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
669
669
|
fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
|
670
670
|
end
|
671
671
|
|
@@ -684,7 +684,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
684
684
|
evaluated_name.type_name # assume validated
|
685
685
|
|
686
686
|
else
|
687
|
-
actual = type_calculator.generalize
|
687
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
688
688
|
fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
|
689
689
|
end
|
690
690
|
end
|
@@ -720,7 +720,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
720
720
|
fail(Puppet::Pops::Issues::MISSING_TITLE_AT, body.title, {:index => index})
|
721
721
|
|
722
722
|
elsif !title.is_a?(String) && title != :default
|
723
|
-
actual = type_calculator.generalize
|
723
|
+
actual = type_calculator.generalize(type_calculator.infer(title)).to_s
|
724
724
|
fail(Puppet::Pops::Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
|
725
725
|
|
726
726
|
elsif title == EMPTY_STRING
|
@@ -779,7 +779,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
779
779
|
def eval_AttributesOperation(o, scope)
|
780
780
|
hashed_params = evaluate(o.expr, scope)
|
781
781
|
unless hashed_params.is_a?(Hash)
|
782
|
-
actual = type_calculator.generalize
|
782
|
+
actual = type_calculator.generalize(type_calculator.infer(hashed_params)).to_s
|
783
783
|
fail(Puppet::Pops::Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
|
784
784
|
end
|
785
785
|
hashed_params.map { |k,v| create_resource_parameter(o, scope, k, v, :'=>') }
|
@@ -793,7 +793,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
793
793
|
if type.is_a?(Puppet::Pops::Types::PResourceType) && !type.type_name.nil? && type.title.nil?
|
794
794
|
type.type_name # assume it is a valid name
|
795
795
|
else
|
796
|
-
actual = type_calculator.generalize
|
796
|
+
actual = type_calculator.generalize(type_calculator.infer(type))
|
797
797
|
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_ref, {:actual => actual})
|
798
798
|
end
|
799
799
|
evaluated_parameters = o.operations.map {|op| evaluate(op, scope) }
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'rgen/ecore/ecore'
|
2
|
+
|
3
|
+
# Literal values for
|
4
|
+
# String (not containing interpolation)
|
5
|
+
# Numbers
|
6
|
+
# Booleans
|
7
|
+
# Undef (produces nil)
|
8
|
+
# Array
|
9
|
+
# Hash
|
10
|
+
# QualifiedName
|
11
|
+
# Default (produced :default)
|
12
|
+
# Regular Expression (produces ruby reqular expression)
|
13
|
+
#
|
14
|
+
# Not considered literal
|
15
|
+
# QualifiedReference # i.e. File, FooBar
|
16
|
+
#
|
17
|
+
class Puppet::Pops::Evaluator::LiteralEvaluator
|
18
|
+
#include Puppet::Pops::Utils
|
19
|
+
|
20
|
+
EMPTY_STRING = ''.freeze
|
21
|
+
COMMA_SEPARATOR = ', '.freeze
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@@literal_visitor ||= Puppet::Pops::Visitor.new(self, "literal", 0, 0)
|
25
|
+
end
|
26
|
+
|
27
|
+
def literal(ast)
|
28
|
+
@@literal_visitor.visit_this_0(self, ast)
|
29
|
+
end
|
30
|
+
|
31
|
+
def literal_Object(o)
|
32
|
+
throw :not_literal
|
33
|
+
end
|
34
|
+
|
35
|
+
def literal_Factory(o)
|
36
|
+
literal(o.model)
|
37
|
+
end
|
38
|
+
|
39
|
+
def literal_Program(o)
|
40
|
+
literal(o.body)
|
41
|
+
end
|
42
|
+
|
43
|
+
def literal_LiteralString(o)
|
44
|
+
o.value
|
45
|
+
end
|
46
|
+
|
47
|
+
def literal_QualifiedName(o)
|
48
|
+
o.value
|
49
|
+
end
|
50
|
+
|
51
|
+
def literal_LiteralNumber(o)
|
52
|
+
o.value
|
53
|
+
end
|
54
|
+
|
55
|
+
def literal_LiteralBoolean(o)
|
56
|
+
o.value
|
57
|
+
end
|
58
|
+
|
59
|
+
def literal_LiteralUndef(o)
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def literal_LiteralDefault(o)
|
64
|
+
:default
|
65
|
+
end
|
66
|
+
|
67
|
+
def literal_LiteralRegularExpression(o)
|
68
|
+
o.value
|
69
|
+
end
|
70
|
+
|
71
|
+
def literal_ConcatenatedString(o)
|
72
|
+
# use double quoted string value if there is no interpolation
|
73
|
+
throw :not_literal unless o.segments.size == 1 && o.segments[0].is_a?(Puppet::Pops::Model::LiteralString)
|
74
|
+
o.segments[0].value
|
75
|
+
end
|
76
|
+
|
77
|
+
def literal_LiteralList(o)
|
78
|
+
o.values.map {|v| literal(v) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def literal_LiteralHash(o)
|
82
|
+
o.entries.reduce({}) do |result, entry|
|
83
|
+
result[literal(entry.key)] = literal(entry.value)
|
84
|
+
result
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -48,6 +48,12 @@ class Puppet::Pops::Evaluator::RelationshipOperator
|
|
48
48
|
raise IllegalRelationshipOperandError.new(o)
|
49
49
|
end
|
50
50
|
|
51
|
+
# A Resource is by definition a Catalog type, but of 3.x type
|
52
|
+
# @api private
|
53
|
+
def transform_Resource(o, scope)
|
54
|
+
Puppet::Pops::Types::TypeFactory.resource(o.type, o.title)
|
55
|
+
end
|
56
|
+
|
51
57
|
# A string must be a type reference in string format
|
52
58
|
# @api private
|
53
59
|
def transform_String(o, scope)
|
@@ -149,7 +155,7 @@ class Puppet::Pops::Evaluator::RelationshipOperator
|
|
149
155
|
# Produce the transformed source RHS (if this is a chain, this does not need to be done again)
|
150
156
|
real.slice(1)
|
151
157
|
rescue NotCatalogTypeError => e
|
152
|
-
fail(Issues::
|
158
|
+
fail(Issues::NOT_CATALOG_TYPE, relationship_expression, {:type => @type_calculator.string(e.type)})
|
153
159
|
rescue IllegalRelationshipOperandError => e
|
154
160
|
fail(Issues::ILLEGAL_RELATIONSHIP_OPERAND_TYPE, relationship_expression, {:operand => e.operand})
|
155
161
|
end
|
@@ -28,13 +28,13 @@ class Puppet::Pops::Functions::Dispatcher
|
|
28
28
|
#
|
29
29
|
# @api private
|
30
30
|
def dispatch(instance, calling_scope, args, &block)
|
31
|
-
tc = Puppet::Pops::Types::TypeCalculator
|
31
|
+
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
32
32
|
actual = tc.infer_set(block_given? ? args + [block] : args)
|
33
33
|
found = @dispatchers.find { |d| tc.callable?(d.type, actual) }
|
34
34
|
if found
|
35
35
|
found.invoke(instance, calling_scope, args, &block)
|
36
36
|
else
|
37
|
-
raise ArgumentError,
|
37
|
+
raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(instance.class.name, @dispatchers, actual)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -62,7 +62,7 @@ class Puppet::Pops::Functions::Dispatcher
|
|
62
62
|
# make a copy to make sure it can be contained by someone else (even if it is not contained here, it
|
63
63
|
# should be treated as immutable).
|
64
64
|
#
|
65
|
-
callables = dispatchers.map { | dispatch | dispatch.type
|
65
|
+
callables = dispatchers.map { | dispatch | dispatch.type }
|
66
66
|
|
67
67
|
# multiple signatures, produce a Variant type of Callable1-n (must copy them)
|
68
68
|
# single signature, produce single Callable
|
data/lib/puppet/pops/issues.rb
CHANGED
@@ -533,7 +533,7 @@ module Puppet::Pops::Issues
|
|
533
533
|
end
|
534
534
|
|
535
535
|
IDEM_EXPRESSION_NOT_LAST = issue :IDEM_EXPRESSION_NOT_LAST do
|
536
|
-
"This #{label.label(semantic)} has no effect. A value
|
536
|
+
"This #{label.label(semantic)} has no effect. A value was produced and then forgotten (one or more preceding expressions may have the wrong form)"
|
537
537
|
end
|
538
538
|
|
539
539
|
IDEM_NOT_ALLOWED_LAST = hard_issue :IDEM_NOT_ALLOWED_LAST, :container do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Provides a label for an object.
|
2
2
|
# This simple implementation calls #to_s on the given object, and handles articles 'a/an/the'.
|
3
3
|
#
|
4
|
-
|
4
|
+
module Puppet::Pops::LabelProvider
|
5
5
|
VOWELS = %w{a e i o u y}
|
6
6
|
SKIPPED_CHARACTERS = %w{" '}
|
7
7
|
A = "a"
|
data/lib/puppet/pops/lookup.rb
CHANGED
@@ -1,43 +1,45 @@
|
|
1
1
|
# This class is the backing implementation of the Puppet function 'lookup'.
|
2
2
|
# See puppet/functions/lookup.rb for documentation.
|
3
3
|
#
|
4
|
-
|
4
|
+
module Puppet::Pops::Lookup
|
5
5
|
# Performs a lookup in the configured scopes and optionally merges the default.
|
6
6
|
#
|
7
7
|
# This is a backing function and all parameters are assumed to have been type checked.
|
8
8
|
# See puppet/functions/lookup.rb for full documentation and all parameter combinations.
|
9
9
|
#
|
10
|
-
# @param scope [Puppet::Parser::Scope] The scope to use for the lookup
|
11
10
|
# @param name [String|Array<String>] The name or names to lookup
|
12
11
|
# @param type [Puppet::Pops::Types::PAnyType|nil] The expected type of the found value
|
13
12
|
# @param default_value [Object] The value to use as default when no value is found
|
14
13
|
# @param has_default [Boolean] Set to _true_ if _default_value_ is included (_nil_ is a valid _default_value_)
|
15
|
-
# @param
|
16
|
-
# @param
|
17
|
-
# @param merge [String|Hash<String,Object>|nil] Merge strategy or hash with strategy and options
|
14
|
+
# @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] Merge strategy or hash with strategy and options
|
15
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] Invocation data containing scope, overrides, and defaults
|
18
16
|
# @return [Object] The found value
|
19
17
|
#
|
20
|
-
def self.lookup(
|
21
|
-
value_type = Puppet::Pops::Types::PDataType
|
18
|
+
def self.lookup(name, value_type, default_value, has_default, merge, lookup_invocation)
|
19
|
+
value_type = Puppet::Pops::Types::PDataType::DEFAULT if value_type.nil?
|
22
20
|
names = name.is_a?(Array) ? name : [name]
|
23
21
|
|
24
22
|
# find first name that yields a non-nil result and wrap it in a two element array
|
25
23
|
# with name and value.
|
26
|
-
not_found =
|
27
|
-
|
28
|
-
|
29
|
-
value =
|
24
|
+
not_found = Puppet::Pops::MergeStrategy::NOT_FOUND
|
25
|
+
override_values = lookup_invocation.override_values
|
26
|
+
result_with_name = names.reduce([nil, not_found]) do |memo, key|
|
27
|
+
value = override_values.include?(key) ? assert_type('override', value_type, override_values[key]) : not_found
|
28
|
+
catch(:no_such_key) { value = search_and_merge(key, lookup_invocation, merge) } if value.equal?(not_found)
|
30
29
|
break [key, assert_type('found', value_type, value)] unless value.equal?(not_found)
|
31
30
|
memo
|
32
31
|
end
|
33
32
|
|
34
|
-
# Use the '
|
35
|
-
if result_with_name[1].equal?(not_found)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
# Use the 'default_values' hash as a last resort if nothing is found
|
34
|
+
if result_with_name[1].equal?(not_found)
|
35
|
+
default_values = lookup_invocation.default_values
|
36
|
+
unless default_values.empty?
|
37
|
+
result_with_name = names.reduce(result_with_name) do |memo, key|
|
38
|
+
value = default_values.include?(key) ? assert_type('default_values_hash', value_type, default_values[key]) : not_found
|
39
|
+
memo = [key, value]
|
40
|
+
break memo unless value.equal?(not_found)
|
41
|
+
memo
|
42
|
+
end
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -54,34 +56,10 @@ class Puppet::Pops::Lookup
|
|
54
56
|
answer
|
55
57
|
end
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
in_module = lambda { Puppet::DataProviders.lookup_in_module(name, scope, merge) }
|
61
|
-
|
62
|
-
[in_global, in_env, in_module].reduce(not_found) do |memo, f|
|
63
|
-
found = false # can't trust catch return value since nil is valid
|
64
|
-
value = catch (:no_such_key) do
|
65
|
-
answer = f.call
|
66
|
-
found = true
|
67
|
-
answer
|
68
|
-
end
|
69
|
-
next memo unless found
|
70
|
-
break value if merge.nil? # value found and no merge
|
71
|
-
strategy = Puppet::Pops::MergeStrategy.strategy(merge)
|
72
|
-
memo.equal?(not_found) ? strategy.convert_value(value) : strategy.merge(memo, value)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
private_class_method :search_and_merge
|
76
|
-
|
77
|
-
def self.lookup_with_databinding(key, scope, merge)
|
78
|
-
begin
|
79
|
-
Puppet::DataBinding.indirection.find(key, { :environment => scope.environment.to_s, :variables => scope, :merge => merge })
|
80
|
-
rescue Puppet::DataBinding::LookupError => e
|
81
|
-
raise Puppet::Error, "Error from DataBinding '#{Puppet[:data_binding_terminus]}' while looking up '#{name}': #{e.message}", e
|
82
|
-
end
|
59
|
+
# @api private
|
60
|
+
def self.search_and_merge(name, lookup_invocation, merge)
|
61
|
+
return Puppet::DataProviders.lookup_adapter(lookup_invocation).lookup(name, lookup_invocation, merge)
|
83
62
|
end
|
84
|
-
private_class_method :lookup_with_databinding
|
85
63
|
|
86
64
|
def self.assert_type(subject, type, value)
|
87
65
|
Puppet::Pops::Types::TypeAsserter.assert_instance_of(subject, type, value)
|
@@ -89,8 +67,8 @@ class Puppet::Pops::Lookup
|
|
89
67
|
private_class_method :assert_type
|
90
68
|
|
91
69
|
def self.fail_lookup(names)
|
92
|
-
name_part = names.size == 1 ? "the name '#{names[0]}'" : 'any of the names [' + names.map {|n| "'#{n}'"}
|
93
|
-
raise Puppet::
|
70
|
+
name_part = names.size == 1 ? "the name '#{names[0]}'" : 'any of the names [' + names.map { |n| "'#{n}'" }.join(', ') + ']'
|
71
|
+
raise Puppet::DataBinding::LookupError, "Function lookup() did not find a value for #{name_part}"
|
94
72
|
end
|
95
73
|
private_class_method :fail_lookup
|
96
74
|
end
|