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
|
@@ -15,7 +15,18 @@ require 'puppet/pops/binder/scheme_handler/symbolic_scheme'
|
|
|
15
15
|
# Does currently only support checking of optionality against files under a module. If the result should be loaded
|
|
16
16
|
# from any other location it can not be marked as optional as it will be ignored.
|
|
17
17
|
#
|
|
18
|
-
|
|
18
|
+
module Puppet::Pops::Binder
|
|
19
|
+
class SchemeHandler::ModuleScheme < SchemeHandler::SymbolicScheme
|
|
20
|
+
|
|
21
|
+
METADATA_DATA_PROVIDER = 'data_provider'.freeze
|
|
22
|
+
|
|
23
|
+
def contributed_bindings(uri, scope, composer)
|
|
24
|
+
split_name, fqn = fqn_from_path(uri)
|
|
25
|
+
bindings = Puppet::Bindings.resolve(scope, split_name[0]) || load_bindings(uri, scope, composer, split_name, fqn)
|
|
26
|
+
|
|
27
|
+
# Must clone as the rest mutates the model
|
|
28
|
+
BindingsFactory.contributed_bindings(fqn, Marshal.load(Marshal.dump(bindings)))
|
|
29
|
+
end
|
|
19
30
|
|
|
20
31
|
# Expands URIs with wildcards and checks optionality.
|
|
21
32
|
# @param uri [URI] the uri to possibly expand
|
|
@@ -29,13 +40,18 @@ class Puppet::Pops::Binder::SchemeHandler::ModuleScheme < Puppet::Pops::Binder::
|
|
|
29
40
|
# supports wild card in the module name
|
|
30
41
|
case split_name[0]
|
|
31
42
|
when '*'
|
|
32
|
-
# create new URIs, one per module name that has a corresponding
|
|
33
|
-
# '<root>/lib/puppet/bindings/'
|
|
43
|
+
# create new URIs, one per module name that has a corresponding data_provider entry in metadata.json
|
|
44
|
+
# or an .rb file relative to its '<root>/lib/puppet/bindings/'
|
|
34
45
|
#
|
|
35
|
-
composer.name_to_module.each_pair do |
|
|
36
|
-
expanded_name_parts = [
|
|
46
|
+
composer.name_to_module.each_pair do | module_name, mod |
|
|
47
|
+
expanded_name_parts = [module_name] + split_name[1..-1]
|
|
37
48
|
expanded_name = expanded_name_parts.join('::')
|
|
38
|
-
|
|
49
|
+
|
|
50
|
+
if is_metadata?(split_name)
|
|
51
|
+
if mod.metadata && mod.metadata[METADATA_DATA_PROVIDER]
|
|
52
|
+
result << URI.parse('module:/' + expanded_name)
|
|
53
|
+
end
|
|
54
|
+
elsif BindingsLoader.loadable?(mod.path, expanded_name)
|
|
39
55
|
result << URI.parse('module:/' + expanded_name)
|
|
40
56
|
end
|
|
41
57
|
end
|
|
@@ -43,11 +59,18 @@ class Puppet::Pops::Binder::SchemeHandler::ModuleScheme < Puppet::Pops::Binder::
|
|
|
43
59
|
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
|
44
60
|
else
|
|
45
61
|
joined_name = split_name.join('::')
|
|
62
|
+
module_name = split_name[0]
|
|
46
63
|
# skip optional uri if it does not exist
|
|
47
64
|
if is_optional?(uri)
|
|
48
|
-
mod = composer.name_to_module[
|
|
49
|
-
|
|
50
|
-
|
|
65
|
+
mod = composer.name_to_module[module_name]
|
|
66
|
+
unless mod.nil?
|
|
67
|
+
if is_metadata?(split_name)
|
|
68
|
+
if mod.metadata && mod.metadata[METADATA_DATA_PROVIDER]
|
|
69
|
+
result << URI.parse('module:/' + joined_name)
|
|
70
|
+
end
|
|
71
|
+
elsif BindingsLoader.loadable?(mod.path, joined_name)
|
|
72
|
+
result << URI.parse('module:/' + joined_name)
|
|
73
|
+
end
|
|
51
74
|
end
|
|
52
75
|
else
|
|
53
76
|
# assume it exists (do not give error if not, since it may be excluded later)
|
|
@@ -81,4 +104,40 @@ class Puppet::Pops::Binder::SchemeHandler::ModuleScheme < Puppet::Pops::Binder::
|
|
|
81
104
|
end
|
|
82
105
|
result
|
|
83
106
|
end
|
|
107
|
+
|
|
108
|
+
def load_bindings(uri, scope, composer, split_name, fqn)
|
|
109
|
+
module_name = split_name[0]
|
|
110
|
+
mod = composer.name_to_module[module_name]
|
|
111
|
+
# given module name must exist
|
|
112
|
+
raise ArgumentError, "Cannot load bindings '#{uri}' - module not found." if mod.nil?
|
|
113
|
+
|
|
114
|
+
if is_metadata?(split_name)
|
|
115
|
+
metadata = mod.metadata
|
|
116
|
+
data_provider = metadata.nil? ? nil : metadata[METADATA_DATA_PROVIDER]
|
|
117
|
+
unless data_provider.nil?
|
|
118
|
+
# bind the data provider in a binding named after the module
|
|
119
|
+
# loader.load('thallgren/sample_module_data', Puppet.lookup(:current_environment))
|
|
120
|
+
Puppet::Bindings.newbindings(module_name) do
|
|
121
|
+
bind {
|
|
122
|
+
name(module_name)
|
|
123
|
+
to(data_provider)
|
|
124
|
+
in_multibind(Puppet::Plugins::DataProviders::PER_MODULE_DATA_PROVIDER_KEY)
|
|
125
|
+
}
|
|
126
|
+
end
|
|
127
|
+
# pick up and return the just created and registered bindings
|
|
128
|
+
bindings = Puppet::Bindings.resolve(scope, module_name)
|
|
129
|
+
end
|
|
130
|
+
else
|
|
131
|
+
bindings = BindingsLoader.provide(scope, fqn)
|
|
132
|
+
end
|
|
133
|
+
raise ArgumentError, "Cannot load bindings '#{uri}' - no bindings found." unless bindings
|
|
134
|
+
bindings
|
|
135
|
+
end
|
|
136
|
+
private :load_bindings
|
|
137
|
+
|
|
138
|
+
def is_metadata?(split_name)
|
|
139
|
+
split_name.size > 1 && split_name[1] == 'metadata'
|
|
140
|
+
end
|
|
141
|
+
private :is_metadata?
|
|
142
|
+
end
|
|
84
143
|
end
|
|
@@ -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)
|
|
@@ -256,7 +256,11 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
256
256
|
# Reserved Words fail to evaluate
|
|
257
257
|
#
|
|
258
258
|
def eval_ReservedWord(o, scope)
|
|
259
|
-
|
|
259
|
+
if !o.future
|
|
260
|
+
fail(Puppet::Pops::Issues::RESERVED_WORD, o, {:word => o.word})
|
|
261
|
+
else
|
|
262
|
+
o.word
|
|
263
|
+
end
|
|
260
264
|
end
|
|
261
265
|
|
|
262
266
|
def eval_LiteralDefault(o, scope)
|
|
@@ -661,7 +665,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
661
665
|
|
|
662
666
|
evaluated_name = evaluate(tmp_name, scope)
|
|
663
667
|
unless type_name_acceptable
|
|
664
|
-
actual = type_calculator.generalize
|
|
668
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
|
665
669
|
fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
|
|
666
670
|
end
|
|
667
671
|
|
|
@@ -680,7 +684,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
680
684
|
evaluated_name.type_name # assume validated
|
|
681
685
|
|
|
682
686
|
else
|
|
683
|
-
actual = type_calculator.generalize
|
|
687
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
|
684
688
|
fail(Puppet::Pops::Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
|
|
685
689
|
end
|
|
686
690
|
end
|
|
@@ -716,7 +720,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
716
720
|
fail(Puppet::Pops::Issues::MISSING_TITLE_AT, body.title, {:index => index})
|
|
717
721
|
|
|
718
722
|
elsif !title.is_a?(String) && title != :default
|
|
719
|
-
actual = type_calculator.generalize
|
|
723
|
+
actual = type_calculator.generalize(type_calculator.infer(title)).to_s
|
|
720
724
|
fail(Puppet::Pops::Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
|
|
721
725
|
|
|
722
726
|
elsif title == EMPTY_STRING
|
|
@@ -775,7 +779,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
775
779
|
def eval_AttributesOperation(o, scope)
|
|
776
780
|
hashed_params = evaluate(o.expr, scope)
|
|
777
781
|
unless hashed_params.is_a?(Hash)
|
|
778
|
-
actual = type_calculator.generalize
|
|
782
|
+
actual = type_calculator.generalize(type_calculator.infer(hashed_params)).to_s
|
|
779
783
|
fail(Puppet::Pops::Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
|
|
780
784
|
end
|
|
781
785
|
hashed_params.map { |k,v| create_resource_parameter(o, scope, k, v, :'=>') }
|
|
@@ -789,7 +793,7 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
|
|
|
789
793
|
if type.is_a?(Puppet::Pops::Types::PResourceType) && !type.type_name.nil? && type.title.nil?
|
|
790
794
|
type.type_name # assume it is a valid name
|
|
791
795
|
else
|
|
792
|
-
actual = type_calculator.generalize
|
|
796
|
+
actual = type_calculator.generalize(type_calculator.infer(type))
|
|
793
797
|
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_ref, {:actual => actual})
|
|
794
798
|
end
|
|
795
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
|
@@ -261,11 +261,15 @@ module Puppet::Pops::Issues
|
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
ILLEGAL_NAME = hard_issue :ILLEGAL_NAME, :name do
|
|
264
|
-
"Illegal name. The given name #{name} does not conform to the naming rule /^((::)?[a-z_]\w*)(::[a-z]
|
|
264
|
+
"Illegal name. The given name '#{name}' does not conform to the naming rule /^((::)?[a-z_]\w*)(::[a-z]\\w*)*$/"
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
ILLEGAL_PARAM_NAME = hard_issue :ILLEGAL_PARAM_NAME, :name do
|
|
268
|
+
"Illegal parameter name. The given name '#{name}' does not conform to the naming rule /^[a-z_]\\w*$/"
|
|
265
269
|
end
|
|
266
270
|
|
|
267
271
|
ILLEGAL_VAR_NAME = hard_issue :ILLEGAL_VAR_NAME, :name do
|
|
268
|
-
"Illegal variable name, The given name '#{name}' does not conform to the naming rule /^((::)?[a-z]
|
|
272
|
+
"Illegal variable name, The given name '#{name}' does not conform to the naming rule /^((::)?[a-z]\\w*)*((::)?[a-z_]\\w*)$/"
|
|
269
273
|
end
|
|
270
274
|
|
|
271
275
|
ILLEGAL_NUMERIC_VAR_NAME = hard_issue :ILLEGAL_NUMERIC_VAR_NAME, :name do
|
|
@@ -529,7 +533,7 @@ module Puppet::Pops::Issues
|
|
|
529
533
|
end
|
|
530
534
|
|
|
531
535
|
IDEM_EXPRESSION_NOT_LAST = issue :IDEM_EXPRESSION_NOT_LAST do
|
|
532
|
-
"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)"
|
|
533
537
|
end
|
|
534
538
|
|
|
535
539
|
IDEM_NOT_ALLOWED_LAST = hard_issue :IDEM_NOT_ALLOWED_LAST, :container do
|
|
@@ -540,6 +544,10 @@ module Puppet::Pops::Issues
|
|
|
540
544
|
"Use of reserved word: #{word}, must be quoted if intended to be a String value"
|
|
541
545
|
end
|
|
542
546
|
|
|
547
|
+
FUTURE_RESERVED_WORD = issue :FUTURE_RESERVED_WORD, :word do
|
|
548
|
+
"Use of future reserved word: '#{word}'"
|
|
549
|
+
end
|
|
550
|
+
|
|
543
551
|
RESERVED_TYPE_NAME = hard_issue :RESERVED_TYPE_NAME, :name do
|
|
544
552
|
"The name: '#{name}' is already defined by Puppet and can not be used as the name of #{label.a_an(semantic)}."
|
|
545
553
|
end
|
|
@@ -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"
|