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
@@ -4,6 +4,8 @@ module Puppet::Pops
|
|
4
4
|
# Merges to objects into one based on an implemented strategy.
|
5
5
|
#
|
6
6
|
class MergeStrategy
|
7
|
+
NOT_FOUND = Object.new.freeze
|
8
|
+
|
7
9
|
TypeAsserter = Puppet::Pops::Types::TypeAsserter
|
8
10
|
TypeParser = Puppet::Pops::Types::TypeParser
|
9
11
|
|
@@ -20,12 +22,14 @@ module Puppet::Pops
|
|
20
22
|
|
21
23
|
# Finds the merge strategy for the given _merge_, creates an instance of it and returns that instance.
|
22
24
|
#
|
23
|
-
# @param merge [String
|
25
|
+
# @param merge [Puppet::Pops::MergeStrategy,String,Hash<String,Object>,nil] The merge strategy. Can be a string or symbol denoting the key
|
24
26
|
# identifier or a hash with options where the key 'strategy' denotes the key
|
25
27
|
# @return [MergeStrategy] The matching merge strategy
|
26
28
|
#
|
27
29
|
def self.strategy(merge)
|
28
|
-
|
30
|
+
return merge if merge.is_a?(MergeStrategy)
|
31
|
+
merge = :first if merge.nil?
|
32
|
+
TypeAsserter.assert_instance_of("MergeStrategy 'merge' parameter", merge_t, merge)
|
29
33
|
if merge.is_a?(Hash)
|
30
34
|
merge_strategy = merge['strategy']
|
31
35
|
if merge_strategy.nil?
|
@@ -82,7 +86,7 @@ module Puppet::Pops
|
|
82
86
|
@options = options
|
83
87
|
end
|
84
88
|
|
85
|
-
# Merges the elements of _e1_ and _e2_
|
89
|
+
# Merges the elements of _e1_ and _e2_ according to the rules of this strategy and options given when this
|
86
90
|
# instance was created
|
87
91
|
#
|
88
92
|
# @param e1 [Object] The first element
|
@@ -95,6 +99,33 @@ module Puppet::Pops
|
|
95
99
|
assert_type('e2', value_t, e2))
|
96
100
|
end
|
97
101
|
|
102
|
+
# Merges the result of yielding the given _lookup_variants_ to a given block.
|
103
|
+
#
|
104
|
+
# @param lookup_variants [Array] The variants to pass as second argument to the given block
|
105
|
+
# @return [Object] the merged value.
|
106
|
+
# @yield [} ]
|
107
|
+
# @yieldparam variant [Object] each variant given in the _lookup_variants_ array.
|
108
|
+
# @yieldreturn [Object] the value to merge with other values
|
109
|
+
# @throws :no_such_key if the lookup was unsuccessful
|
110
|
+
#
|
111
|
+
def merge_lookup(lookup_variants)
|
112
|
+
result = lookup_variants.reduce(NOT_FOUND) do |memo, lookup_variant|
|
113
|
+
not_found = true
|
114
|
+
value = catch(:no_such_key) do
|
115
|
+
v = yield(lookup_variant)
|
116
|
+
not_found = false
|
117
|
+
v
|
118
|
+
end
|
119
|
+
if not_found
|
120
|
+
memo
|
121
|
+
else
|
122
|
+
memo.equal?(NOT_FOUND) ? convert_value(value) : merge(memo, value)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
throw :no_such_key if result == NOT_FOUND
|
126
|
+
result
|
127
|
+
end
|
128
|
+
|
98
129
|
# Converts a single value to the type expeced when peforming a merge of two elements
|
99
130
|
# @param value [Object] the value to convert
|
100
131
|
# @return [Object] the converted value
|
@@ -102,12 +133,20 @@ module Puppet::Pops
|
|
102
133
|
value
|
103
134
|
end
|
104
135
|
|
105
|
-
protected
|
106
|
-
|
107
136
|
def options
|
108
137
|
@options
|
109
138
|
end
|
110
139
|
|
140
|
+
def configuration
|
141
|
+
if @options.nil? || @options.empty?
|
142
|
+
self.class.key.to_s
|
143
|
+
else
|
144
|
+
@options.include?('strategy') ? @options : { 'strategy' => self.class.key.to_s }.merge(@options)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
protected
|
149
|
+
|
111
150
|
# Returns the type used to validate the options hash
|
112
151
|
#
|
113
152
|
# @return [Puppet::Pops::Types::PStructType] the puppet type
|
@@ -133,6 +172,35 @@ module Puppet::Pops
|
|
133
172
|
end
|
134
173
|
end
|
135
174
|
|
175
|
+
# Simple strategy that returns the first value found. It never merges any values.
|
176
|
+
#
|
177
|
+
class FirstFoundStrategy < MergeStrategy
|
178
|
+
def self.key
|
179
|
+
:first
|
180
|
+
end
|
181
|
+
|
182
|
+
# Returns the first value found
|
183
|
+
#
|
184
|
+
# @param lookup_variants [Array] The variants to pass as second argument to the given block
|
185
|
+
# @return [Object] the merged value
|
186
|
+
# @throws :no_such_key unless the lookup was successful
|
187
|
+
#
|
188
|
+
def merge_lookup(lookup_variants)
|
189
|
+
lookup_variants.each do |lookup_variant|
|
190
|
+
catch(:no_such_key) { return yield(lookup_variant) }
|
191
|
+
end
|
192
|
+
throw :no_such_key
|
193
|
+
end
|
194
|
+
|
195
|
+
protected
|
196
|
+
|
197
|
+
def value_t
|
198
|
+
@value_t ||= Puppet::Pops::Types::PAnyType::DEFAULT
|
199
|
+
end
|
200
|
+
|
201
|
+
MergeStrategy.add_strategy(self)
|
202
|
+
end
|
203
|
+
|
136
204
|
# Produces a new hash by merging hash e1 with hash e2 in such a way that the values of duplicate keys
|
137
205
|
# will be those of e1
|
138
206
|
#
|
@@ -53,6 +53,14 @@ class Puppet::Pops::Model::Factory
|
|
53
53
|
|
54
54
|
# Building of Model classes
|
55
55
|
|
56
|
+
def build_Application(o, n, ps, body)
|
57
|
+
o.name = n
|
58
|
+
ps.each { |p| o.addParameters(build(p)) }
|
59
|
+
b = f_build_body(body)
|
60
|
+
o.body = b.current if b
|
61
|
+
o
|
62
|
+
end
|
63
|
+
|
56
64
|
def build_ArithmeticExpression(o, op, a, b)
|
57
65
|
o.operator = op
|
58
66
|
build_BinaryExpression(o, a, b)
|
@@ -231,6 +239,15 @@ class Puppet::Pops::Model::Factory
|
|
231
239
|
o
|
232
240
|
end
|
233
241
|
|
242
|
+
def build_CapabilityMapping(o, kind, component, capability, mappings)
|
243
|
+
o.kind = kind
|
244
|
+
component = component.current if component.is_a?(Puppet::Pops::Model::Factory)
|
245
|
+
o.component = component
|
246
|
+
o.capability = capability
|
247
|
+
o.mappings = mappings.map { |m| build(m) }
|
248
|
+
o
|
249
|
+
end
|
250
|
+
|
234
251
|
# @param o [Model::NodeDefinition]
|
235
252
|
# @param hosts [Array<Expression>] host matches
|
236
253
|
# @param parent [Expression] parent node matcher
|
@@ -243,6 +260,14 @@ class Puppet::Pops::Model::Factory
|
|
243
260
|
o
|
244
261
|
end
|
245
262
|
|
263
|
+
# @param o [Model::SiteDefinition]
|
264
|
+
# @param body [Object] see {#f_build_body}
|
265
|
+
def build_SiteDefinition(o, body)
|
266
|
+
b = f_build_body(body)
|
267
|
+
o.body = b.current if b
|
268
|
+
o
|
269
|
+
end
|
270
|
+
|
246
271
|
def build_Parameter(o, name, expr)
|
247
272
|
o.name = name
|
248
273
|
o.value = build(expr) if expr # don't build a nil/nop
|
@@ -584,6 +609,7 @@ class Puppet::Pops::Model::Factory
|
|
584
609
|
|
585
610
|
def self.NODE(hosts, parent, body); new(Model::NodeDefinition, hosts, parent, body); end
|
586
611
|
|
612
|
+
def self.SITE(body); new(Model::SiteDefinition, body); end
|
587
613
|
|
588
614
|
# Parameters
|
589
615
|
|
@@ -755,6 +781,14 @@ class Puppet::Pops::Model::Factory
|
|
755
781
|
new(Model::ResourceTypeDefinition, name, parameters, body)
|
756
782
|
end
|
757
783
|
|
784
|
+
def self.CAPABILITY_MAPPING(kind, component, cap_name, mappings)
|
785
|
+
new(Model::CapabilityMapping, kind, component, cap_name, mappings)
|
786
|
+
end
|
787
|
+
|
788
|
+
def self.APPLICATION(name, parameters, body)
|
789
|
+
new(Model::Application, name, parameters, body)
|
790
|
+
end
|
791
|
+
|
758
792
|
def self.FUNCTION(name, parameters, body)
|
759
793
|
new(Model::FunctionDefinition, name, parameters, body)
|
760
794
|
end
|
@@ -2,7 +2,9 @@
|
|
2
2
|
# As an example, if object is an ArithmeticExpression with operator +, `#a_an(o)` produces "a '+' Expression",
|
3
3
|
# #the(o) produces "the + Expression", and #label produces "+ Expression".
|
4
4
|
#
|
5
|
-
class Puppet::Pops::Model::ModelLabelProvider
|
5
|
+
class Puppet::Pops::Model::ModelLabelProvider
|
6
|
+
include Puppet::Pops::LabelProvider
|
7
|
+
|
6
8
|
def initialize
|
7
9
|
@@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
|
8
10
|
end
|
@@ -56,6 +58,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
56
58
|
def label_HeredocExpression o ; "'@(#{o.syntax})' expression" end
|
57
59
|
def label_HostClassDefinition o ; "Host Class Definition" end
|
58
60
|
def label_NodeDefinition o ; "Node Definition" end
|
61
|
+
def label_SiteDefinition o ; "Site Definition" end
|
59
62
|
def label_ResourceTypeDefinition o ; "'define' expression" end
|
60
63
|
def label_ResourceOverrideExpression o ; "Resource Override" end
|
61
64
|
def label_Parameter o ; "Parameter Definition" end
|
@@ -64,6 +67,7 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
64
67
|
def label_UnlessExpression o ; "'unless' Statement" end
|
65
68
|
def label_CallNamedFunctionExpression o ; "Function Call" end
|
66
69
|
def label_CallMethodExpression o ; "Method call" end
|
70
|
+
def label_CapabilityMapping o ; "Capability Mapping" end
|
67
71
|
def label_CaseExpression o ; "'case' statement" end
|
68
72
|
def label_CaseOption o ; "Case Option" end
|
69
73
|
def label_RenderStringExpression o ; "Epp Text" end
|
@@ -97,6 +101,11 @@ class Puppet::Pops::Model::ModelLabelProvider < Puppet::Pops::LabelProvider
|
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
104
|
+
def label_Resource o
|
105
|
+
'Resource Statement'
|
106
|
+
end
|
107
|
+
|
108
|
+
|
100
109
|
def label_Class o
|
101
110
|
if o <= Puppet::Pops::Types::PAnyType
|
102
111
|
simple_name = o.name.split('::').last
|
@@ -291,6 +291,9 @@ module Puppet::Pops::Model
|
|
291
291
|
class ResourceTypeDefinition < NamedDefinition
|
292
292
|
end
|
293
293
|
|
294
|
+
class Application < NamedDefinition
|
295
|
+
end
|
296
|
+
|
294
297
|
# A node definition matches hosts using Strings, or Regular expressions. It may inherit from
|
295
298
|
# a parent node (also using a String or Regular expression).
|
296
299
|
#
|
@@ -300,6 +303,10 @@ module Puppet::Pops::Model
|
|
300
303
|
contains_one_uni 'body', Expression
|
301
304
|
end
|
302
305
|
|
306
|
+
class SiteDefinition < Definition
|
307
|
+
contains_one_uni 'body', Expression
|
308
|
+
end
|
309
|
+
|
303
310
|
class LocatableExpression < Expression
|
304
311
|
has_many_attr 'line_offsets', Integer
|
305
312
|
has_attr 'locator', Object, :lowerBound => 1, :transient => true
|
@@ -534,6 +541,14 @@ module Puppet::Pops::Model
|
|
534
541
|
contains_many_uni 'bodies', ResourceBody
|
535
542
|
end
|
536
543
|
|
544
|
+
class CapabilityMapping < Definition
|
545
|
+
# 'produces' or 'consumes'
|
546
|
+
has_attr 'kind', String, :lowerBound => 1
|
547
|
+
has_attr 'capability', String, :lowerBound => 1
|
548
|
+
contains_one_uni 'component', Expression, :lowerBound => 1
|
549
|
+
contains_many_uni 'mappings', AbstractAttributeOperation
|
550
|
+
end
|
551
|
+
|
537
552
|
# A resource defaults sets defaults for a resource type. This class inherits from AbstractResource
|
538
553
|
# but does only support the :regular form (this is intentional to be able to produce better error messages
|
539
554
|
# when illegal forms are applied to a model.
|
@@ -32,6 +32,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
32
32
|
do_dump(o.current)
|
33
33
|
end
|
34
34
|
|
35
|
+
def dump_Application o
|
36
|
+
["application", o.name, do_dump(o.parameters), do_dump(o.body)]
|
37
|
+
end
|
38
|
+
|
35
39
|
def dump_ArithmeticExpression o
|
36
40
|
[o.operator.to_s, do_dump(o.left_expr), do_dump(o.right_expr)]
|
37
41
|
end
|
@@ -230,6 +234,16 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
230
234
|
result
|
231
235
|
end
|
232
236
|
|
237
|
+
def dump_SiteDefinition o
|
238
|
+
result = ["site"]
|
239
|
+
if o.body
|
240
|
+
result << do_dump(o.body)
|
241
|
+
else
|
242
|
+
result << []
|
243
|
+
end
|
244
|
+
result
|
245
|
+
end
|
246
|
+
|
233
247
|
def dump_NamedDefinition o
|
234
248
|
# the nil must be replaced with a string
|
235
249
|
result = [nil, o.name]
|
@@ -248,6 +262,10 @@ class Puppet::Pops::Model::ModelTreeDumper < Puppet::Pops::Model::TreeDumper
|
|
248
262
|
result
|
249
263
|
end
|
250
264
|
|
265
|
+
def dump_CapabilityMapping o
|
266
|
+
[o.kind, do_dump(o.component), o.capability, do_dump(o.mappings)]
|
267
|
+
end
|
268
|
+
|
251
269
|
def dump_ResourceOverrideExpression o
|
252
270
|
form = o.form == :regular ? '' : o.form.to_s + "-"
|
253
271
|
result = [form+"override", do_dump(o.resources), :indent]
|
@@ -8,9 +8,21 @@ class Puppet::Pops::Parser::CodeMerger
|
|
8
8
|
# this is a bit brute force as the result is already 3x ast with wrapped 4x content
|
9
9
|
# this could be combined in a more elegant way, but it is only used to process a handful of files
|
10
10
|
# at the beginning of a puppet run. TODO: Revisit for Puppet 4x when there is no 3x ast at the top.
|
11
|
+
# PUP-5299, some sites have thousands of entries, and run out of stack when evaluating - the logic
|
12
|
+
# below maps the logic as flatly as possible.
|
11
13
|
#
|
12
14
|
children = parse_results.select {|x| !x.nil? && x.code}.reduce([]) do |memo, parsed_class|
|
13
|
-
|
15
|
+
case parsed_class.code
|
16
|
+
when Puppet::Parser::AST::BlockExpression
|
17
|
+
# the BlockExpression wraps a single 4x instruction that is most likely wrapped in a Factory
|
18
|
+
memo += parsed_class.code.children.map {|c| c.is_a?(Puppet::Pops::Model::Factory) ? c.model : c }
|
19
|
+
when Puppet::Pops::Model::Factory
|
20
|
+
# If it is a 4x instruction wrapped in a Factory
|
21
|
+
memo += parsed_class.code.model
|
22
|
+
else
|
23
|
+
# It is the instruction directly
|
24
|
+
memo << parsed_class.code
|
25
|
+
end
|
14
26
|
end
|
15
27
|
Puppet::Parser::AST::BlockExpression.new(:children => children)
|
16
28
|
end
|
@@ -22,7 +22,8 @@ token RENDER_STRING RENDER_EXPR EPP_START EPP_END EPP_END_TRIM
|
|
22
22
|
token FUNCTION
|
23
23
|
token PRIVATE ATTR TYPE
|
24
24
|
token FUNCTION
|
25
|
-
token APPLICATION_R CONSUMES_R PRODUCES_R
|
25
|
+
token APPLICATION_R CONSUMES_R PRODUCES_R SITE_R
|
26
|
+
token APPLICATION PRODUCES CONSUMES SITE
|
26
27
|
token LOW
|
27
28
|
|
28
29
|
prechigh
|
@@ -193,8 +194,9 @@ resource
|
|
193
194
|
#
|
194
195
|
expression
|
195
196
|
: primary_expression
|
197
|
+
| capability_mapping
|
196
198
|
| call_function_expression
|
197
|
-
|
|
199
|
+
| bracketed_expression
|
198
200
|
| expression IN expression { result = val[0].in val[2] ; loc result, val[1] }
|
199
201
|
| expression MATCH expression { result = val[0] =~ val[2] ; loc result, val[1] }
|
200
202
|
| expression NOMATCH expression { result = val[0].mne val[2] ; loc result, val[1] }
|
@@ -219,6 +221,8 @@ expression
|
|
219
221
|
| expression QMARK selector_entries { result = val[0].select(*val[2]) ; loc result, val[0] }
|
220
222
|
| LPAREN assignment RPAREN { result = val[1].paren() ; loc result, val[0] }
|
221
223
|
|
224
|
+
bracketed_expression
|
225
|
+
: expression LBRACK expressions endcomma RBRACK =LBRACK { result = val[0][*val[2]] ; loc result, val[0], val[4] }
|
222
226
|
|
223
227
|
#---EXPRESSIONS
|
224
228
|
# (i.e. "argument list")
|
@@ -238,8 +242,12 @@ primary_expression
|
|
238
242
|
| if_expression
|
239
243
|
| unless_expression
|
240
244
|
| definition_expression
|
245
|
+
# @todo lutter 2014-09-03: application declarations must be at the toplevel
|
246
|
+
# in a manifest - Should be validated, not handled here. helindbe 2015-09-10
|
247
|
+
| application_expression
|
241
248
|
| hostclass_expression
|
242
249
|
| node_definition_expression
|
250
|
+
| site_definition_expression
|
243
251
|
| epp_render_expression
|
244
252
|
| function_definition
|
245
253
|
| reserved_word
|
@@ -459,7 +467,7 @@ attribute_operations
|
|
459
467
|
| APPLICATION_R
|
460
468
|
| CONSUMES_R
|
461
469
|
| PRODUCES_R
|
462
|
-
|
470
|
+
| SITE_R
|
463
471
|
|
464
472
|
# In this version, illegal combinations are validated instead of producing syntax errors
|
465
473
|
# (Can give nicer error message "+> is not applicable to...")
|
@@ -492,6 +500,33 @@ definition_expression
|
|
492
500
|
end
|
493
501
|
}
|
494
502
|
|
503
|
+
#---APPLICATION
|
504
|
+
application_expression
|
505
|
+
: APPLICATION classname parameter_list LBRACE opt_statements RBRACE {
|
506
|
+
result = add_definition(Factory.APPLICATION(classname(val[1][:value]), val[2], val[4]))
|
507
|
+
loc result, val[0], val[5]
|
508
|
+
}
|
509
|
+
|
510
|
+
capability_mapping
|
511
|
+
: classname capability_kw classname LBRACE attribute_operations endcomma RBRACE {
|
512
|
+
result = Factory.CAPABILITY_MAPPING(val[1][:value],
|
513
|
+
Factory.QNAME(classname(val[0][:value])),
|
514
|
+
classname(val[2][:value]), val[4])
|
515
|
+
loc result, val[0], val[6]
|
516
|
+
add_mapping(result)
|
517
|
+
}
|
518
|
+
| bracketed_expression capability_kw classname LBRACE attribute_operations endcomma RBRACE {
|
519
|
+
result = Factory.CAPABILITY_MAPPING(val[1][:value],
|
520
|
+
val[0],
|
521
|
+
classname(val[2][:value]), val[4])
|
522
|
+
loc result, val[0], val[6]
|
523
|
+
add_mapping(result)
|
524
|
+
}
|
525
|
+
|
526
|
+
capability_kw
|
527
|
+
: PRODUCES
|
528
|
+
| CONSUMES
|
529
|
+
|
495
530
|
#---HOSTCLASS
|
496
531
|
#
|
497
532
|
# Produces Model::HostClassDefinition
|
@@ -528,6 +563,20 @@ hostclass_expression
|
|
528
563
|
: classname
|
529
564
|
| DEFAULT
|
530
565
|
|
566
|
+
#---SITE
|
567
|
+
#
|
568
|
+
# Produces Model::SiteDefinition
|
569
|
+
#
|
570
|
+
site_definition_expression
|
571
|
+
: SITE LBRACE statements RBRACE {
|
572
|
+
result = add_definition(Factory.SITE(val[2]))
|
573
|
+
loc result, val[0], val[3]
|
574
|
+
}
|
575
|
+
| SITE LBRACE RBRACE {
|
576
|
+
result = add_definition(Factory.SITE(nil))
|
577
|
+
loc result, val[0], val[2]
|
578
|
+
}
|
579
|
+
|
531
580
|
#---NODE
|
532
581
|
#
|
533
582
|
# Produces Model::NodeDefinition
|
@@ -590,6 +639,7 @@ classname
|
|
590
639
|
| APPLICATION_R
|
591
640
|
| CONSUMES_R
|
592
641
|
| PRODUCES_R
|
642
|
+
| SITE_R
|
593
643
|
| CLASS { error val[0], "'class' is not a valid classname" }
|
594
644
|
|
595
645
|
# Produces Array<Model::Parameter>
|
@@ -640,6 +690,7 @@ reserved_word
|
|
640
690
|
| APPLICATION_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
641
691
|
| CONSUMES_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
642
692
|
| PRODUCES_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
693
|
+
| SITE_R { result = Factory.RESERVED(val[0][:value], true) ; loc result, val[0] }
|
643
694
|
|
644
695
|
#---LITERALS (dynamic and static)
|
645
696
|
#
|
@@ -744,6 +795,8 @@ keyword
|
|
744
795
|
| ATTR
|
745
796
|
| FUNCTION
|
746
797
|
| PRIVATE
|
798
|
+
| APPLICATION
|
799
|
+
| PRODUCES
|
747
800
|
|
748
801
|
nil
|
749
802
|
: { result = nil}
|