puppet 4.2.3-x64-mingw32 → 4.3.0-x64-mingw32
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
@@ -0,0 +1,117 @@
|
|
1
|
+
module Puppet::Pops::Lookup
|
2
|
+
class Invocation
|
3
|
+
attr_reader :scope, :override_values, :default_values, :explainer, :module_name
|
4
|
+
|
5
|
+
# Creates a context object for a lookup invocation. The object contains the current scope, overrides, and default
|
6
|
+
# values and may optionally contain an {ExplanationAcceptor} instance that will receive book-keeping information
|
7
|
+
# about the progress of the lookup.
|
8
|
+
#
|
9
|
+
# If the _explain_ argument is a boolean, then _false_ means that no explanation is needed and _true_ means that
|
10
|
+
# the default explanation acceptor should be used. The _explain_ argument may also be an instance of the
|
11
|
+
# `ExplanationAcceptor` class.
|
12
|
+
#
|
13
|
+
# @param scope [Puppet::Parser::Scope] The scope to use for the lookup
|
14
|
+
# @param override_values [Hash<String,Object>|nil] A map to use as override. Values found here are returned immediately (no merge)
|
15
|
+
# @param default_values [Hash<String,Object>] A map to use as the last resort (but before default)
|
16
|
+
# @param explainer [boolean,Explanainer] An boolean true to use the default explanation acceptor or an explainer instance that will receive information about the lookup
|
17
|
+
def initialize(scope, override_values = {}, default_values = {}, explainer = nil)
|
18
|
+
@name_stack = []
|
19
|
+
@scope = scope
|
20
|
+
@override_values = override_values
|
21
|
+
@default_values = default_values
|
22
|
+
unless explainer.is_a?(Explainer)
|
23
|
+
explainer = explainer == true ? Explainer.new : nil
|
24
|
+
end
|
25
|
+
@explainer = explainer
|
26
|
+
end
|
27
|
+
|
28
|
+
def check(name)
|
29
|
+
if @name_stack.include?(name)
|
30
|
+
raise Puppet::DataBinding::RecursiveLookupError, "Recursive lookup detected in [#{@name_stack.join(', ')}]"
|
31
|
+
end
|
32
|
+
return unless block_given?
|
33
|
+
|
34
|
+
@name_stack.push(name)
|
35
|
+
begin
|
36
|
+
yield
|
37
|
+
rescue Puppet::DataBinding::LookupError
|
38
|
+
raise
|
39
|
+
rescue Puppet::Error => detail
|
40
|
+
raise Puppet::DataBinding::LookupError.new(detail.message, detail)
|
41
|
+
ensure
|
42
|
+
@name_stack.pop
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# The qualifier_type can be one of:
|
47
|
+
# :global - qualifier is the data binding terminus name
|
48
|
+
# :data_provider - qualifier a DataProvider instance
|
49
|
+
# :path - qualifier is a ResolvedPath instance
|
50
|
+
# :merge - qualifier is a MergeStrategy instance
|
51
|
+
# :module - qualifier is the name of a module
|
52
|
+
# :interpolation - qualifier is the unresolved interpolation expression
|
53
|
+
# :meta - qualifier is the name of a module or nil if that's not applicable
|
54
|
+
#
|
55
|
+
# @param qualifier [Object] A branch, a provider, or a path
|
56
|
+
def with(qualifier_type, qualifier)
|
57
|
+
is_meta = qualifier_type == :meta
|
58
|
+
@module_name = qualifier if is_meta
|
59
|
+
if @explainer.nil?
|
60
|
+
yield
|
61
|
+
else
|
62
|
+
if is_meta
|
63
|
+
save_explainer = @explainer
|
64
|
+
@explainer = nil
|
65
|
+
begin
|
66
|
+
yield
|
67
|
+
ensure
|
68
|
+
@explainer = save_explainer
|
69
|
+
end
|
70
|
+
else
|
71
|
+
@explainer.push(qualifier_type, qualifier)
|
72
|
+
begin
|
73
|
+
yield
|
74
|
+
ensure
|
75
|
+
@explainer.pop
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def report_found_in_overrides(key, value)
|
82
|
+
@explainer.accept_found_in_overrides(key, value) unless @explainer.nil?
|
83
|
+
value
|
84
|
+
end
|
85
|
+
|
86
|
+
def report_found_in_defaults(key, value)
|
87
|
+
@explainer.accept_found_in_defaults(key, value) unless @explainer.nil?
|
88
|
+
value
|
89
|
+
end
|
90
|
+
|
91
|
+
def report_found(key, value)
|
92
|
+
@explainer.accept_found(key, value) unless @explainer.nil?
|
93
|
+
value
|
94
|
+
end
|
95
|
+
|
96
|
+
# Report the result of a merge or fully resolved interpolated string
|
97
|
+
# @param value [Object] The result to report
|
98
|
+
# @return [Object] the given value
|
99
|
+
def report_result(value)
|
100
|
+
@explainer.accept_result(value) unless @explainer.nil?
|
101
|
+
value
|
102
|
+
end
|
103
|
+
|
104
|
+
def report_not_found(key)
|
105
|
+
@explainer.accept_not_found(key) unless @explainer.nil?
|
106
|
+
end
|
107
|
+
|
108
|
+
def report_path_not_found
|
109
|
+
@explainer.accept_path_not_found unless @explainer.nil?
|
110
|
+
end
|
111
|
+
|
112
|
+
def report_module_not_found
|
113
|
+
@explainer.accept_module_not_found unless @explainer.nil?
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
@@ -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
|