puppet 4.8.2 → 4.9.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.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet.rb +52 -0
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/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/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2593
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require_relative 'interpolation'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Lookup
|
6
|
+
# Class that keeps track of the original location (as it appears in the declaration, before interpolation),
|
7
|
+
# and the fully resolved location, and whether or not the resolved location exists.
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
class ResolvedLocation
|
11
|
+
attr_reader :original_location, :location
|
12
|
+
|
13
|
+
# @param original_location [String] location as found in declaration. May contain interpolation expressions
|
14
|
+
# @param location [Pathname,URI] the expanded location
|
15
|
+
# @param exist [Boolean] `true` if the location is assumed to exist
|
16
|
+
# @api public
|
17
|
+
def initialize(original_location, location, exist)
|
18
|
+
@original_location = original_location
|
19
|
+
@location = location
|
20
|
+
@exist = exist
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Boolean] `true` if the location is assumed to exist
|
24
|
+
# @api public
|
25
|
+
def exist?
|
26
|
+
@exist
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Helper methods to resolve interpolated locations
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
module LocationResolver
|
34
|
+
include Interpolation
|
35
|
+
|
36
|
+
def expand_globs(datadir, declared_globs, lookup_invocation)
|
37
|
+
declared_globs.map do |declared_glob|
|
38
|
+
glob = interpolate(declared_glob, lookup_invocation, false)
|
39
|
+
Pathname.glob(datadir, glob).reject { |path| path.directory? }.map { |path| ResolvedLocation.new(glob, path, true) }
|
40
|
+
end.flatten
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param datadir [Pathname] The base when creating absolute paths
|
44
|
+
# @param declared_paths [Array<String>] paths as found in declaration. May contain interpolation expressions
|
45
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
|
46
|
+
# @param is_default_config [Boolean] `true` if this is the default config and non-existent paths should be excluded
|
47
|
+
# @param extension [String] Required extension such as '.yaml' or '.json'. Use only if paths without extension can be expected
|
48
|
+
# @return [Array<ResolvedLocation>] Array of resolved paths
|
49
|
+
def resolve_paths(datadir, declared_paths, lookup_invocation, is_default_config, extension = nil)
|
50
|
+
result = []
|
51
|
+
declared_paths.each do |declared_path|
|
52
|
+
path = interpolate(declared_path, lookup_invocation, false)
|
53
|
+
path += extension unless extension.nil? || path.end_with?(extension)
|
54
|
+
path = datadir + path
|
55
|
+
path_exists = path.exist?
|
56
|
+
result << ResolvedLocation.new(declared_path, path, path_exists) unless is_default_config && !path_exists
|
57
|
+
end
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
# @param declared_uris [Array<String>] paths as found in declaration. May contain interpolation expressions
|
62
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] The current lookup invocation
|
63
|
+
# @return [Array<ResolvedLocation>] Array of resolved paths
|
64
|
+
def expand_uris(declared_uris, lookup_invocation)
|
65
|
+
declared_uris.map do |declared_uri|
|
66
|
+
uri = URI(interpolate(declared_uri, lookup_invocation, false))
|
67
|
+
ResolvedLocation.new(declared_uri, uri, true)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,451 @@
|
|
1
|
+
require_relative 'data_adapter'
|
2
|
+
require_relative 'lookup_key'
|
3
|
+
|
4
|
+
module Puppet::Pops
|
5
|
+
module Lookup
|
6
|
+
# A LookupAdapter is a specialized DataAdapter that uses its hash to store data providers. It also remembers the compiler
|
7
|
+
# that it is attached to and maintains a cache of _lookup options_ retrieved from the data providers associated with the
|
8
|
+
# compiler's environment.
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
class LookupAdapter < DataAdapter
|
12
|
+
|
13
|
+
LOOKUP_OPTIONS_PREFIX = LOOKUP_OPTIONS + '.'
|
14
|
+
LOOKUP_OPTIONS_PREFIX.freeze
|
15
|
+
LOOKUP_OPTIONS_PATTERN_START = '^'.freeze
|
16
|
+
|
17
|
+
HASH = 'hash'.freeze
|
18
|
+
MERGE = 'merge'.freeze
|
19
|
+
|
20
|
+
def self.create_adapter(compiler)
|
21
|
+
new(compiler)
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(compiler)
|
25
|
+
super()
|
26
|
+
@compiler = compiler
|
27
|
+
@lookup_options = {}
|
28
|
+
end
|
29
|
+
|
30
|
+
# Performs a lookup using global, environment, and module data providers. Merge the result using the given
|
31
|
+
# _merge_ strategy. If the merge strategy is nil, then an attempt is made to find merge options in the
|
32
|
+
# `lookup_options` hash for an entry associated with the key. If no options are found, the no merge is performed
|
33
|
+
# and the first found entry is returned.
|
34
|
+
#
|
35
|
+
# @param key [String] The key to lookup
|
36
|
+
# @param lookup_invocation [Invocation] the lookup invocation
|
37
|
+
# @param merge [MergeStrategy,String,Hash{String => Object},nil] Merge strategy, merge strategy name, strategy and options hash, or nil (implies "first found")
|
38
|
+
# @return [Object] the found object
|
39
|
+
# @throw :no_such_key when the object is not found
|
40
|
+
#
|
41
|
+
def lookup(key, lookup_invocation, merge)
|
42
|
+
# The 'lookup_options' key is reserved and not found as normal data
|
43
|
+
if key == LOOKUP_OPTIONS || key.start_with?(LOOKUP_OPTIONS_PREFIX)
|
44
|
+
lookup_invocation.with(:invalid_key, LOOKUP_OPTIONS) do
|
45
|
+
throw :no_such_key
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
key = LookupKey.new(key)
|
50
|
+
lookup_invocation.lookup(key, key.module_name) do
|
51
|
+
merge_explained = false
|
52
|
+
if lookup_invocation.only_explain_options?
|
53
|
+
catch(:no_such_key) { do_lookup(LookupKey::LOOKUP_OPTIONS, lookup_invocation, HASH) }
|
54
|
+
nil
|
55
|
+
else
|
56
|
+
if merge.nil?
|
57
|
+
# Used cached lookup_options
|
58
|
+
merge = lookup_merge_options(key, lookup_invocation)
|
59
|
+
lookup_invocation.report_merge_source(LOOKUP_OPTIONS) unless merge.nil?
|
60
|
+
end
|
61
|
+
lookup_invocation.with(:data, key.to_s) { do_lookup(key, lookup_invocation, merge) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def lookup_global(key, lookup_invocation, merge_strategy)
|
67
|
+
terminus = Puppet[:data_binding_terminus]
|
68
|
+
case terminus
|
69
|
+
when :hiera, 'hiera'
|
70
|
+
provider = global_provider(lookup_invocation)
|
71
|
+
throw :no_such_key if provider.nil?
|
72
|
+
provider.key_lookup(key, lookup_invocation, merge_strategy)
|
73
|
+
when :none, 'none', '', nil
|
74
|
+
# If global lookup is disabled, immediately report as not found
|
75
|
+
lookup_invocation.report_not_found(key)
|
76
|
+
throw :no_such_key
|
77
|
+
else
|
78
|
+
lookup_invocation.with(:global, terminus) do
|
79
|
+
catch(:no_such_key) do
|
80
|
+
return lookup_invocation.report_found(key, Puppet::DataBinding.indirection.find(key.root_key,
|
81
|
+
{:environment => environment, :variables => lookup_invocation.scope, :merge => merge_strategy}))
|
82
|
+
end
|
83
|
+
lookup_invocation.report_not_found(key)
|
84
|
+
throw :no_such_key
|
85
|
+
end
|
86
|
+
end
|
87
|
+
rescue Puppet::DataBinding::LookupError => detail
|
88
|
+
error = Puppet::Error.new("Lookup of key '#{lookup_invocation.top_key}' failed: #{detail.message}")
|
89
|
+
error.set_backtrace(detail.backtrace)
|
90
|
+
raise error
|
91
|
+
end
|
92
|
+
|
93
|
+
def lookup_in_environment(key, lookup_invocation, merge_strategy)
|
94
|
+
provider = env_provider(lookup_invocation)
|
95
|
+
throw :no_such_key if provider.nil?
|
96
|
+
provider.key_lookup(key, lookup_invocation, merge_strategy)
|
97
|
+
end
|
98
|
+
|
99
|
+
def lookup_in_module(key, lookup_invocation, merge_strategy)
|
100
|
+
module_name = lookup_invocation.module_name
|
101
|
+
|
102
|
+
# Do not attempt to do a lookup in a module unless the name is qualified.
|
103
|
+
throw :no_such_key if module_name.nil?
|
104
|
+
|
105
|
+
provider = module_provider(lookup_invocation, module_name)
|
106
|
+
if provider.nil?
|
107
|
+
if environment.module(module_name).nil?
|
108
|
+
lookup_invocation.report_module_not_found(module_name)
|
109
|
+
else
|
110
|
+
lookup_invocation.report_module_provider_not_found(module_name)
|
111
|
+
end
|
112
|
+
throw :no_such_key
|
113
|
+
end
|
114
|
+
provider.key_lookup(key, lookup_invocation, merge_strategy)
|
115
|
+
end
|
116
|
+
|
117
|
+
# Retrieve the merge options that match the given `name`.
|
118
|
+
#
|
119
|
+
# @param key [LookupKey] The key for which we want merge options
|
120
|
+
# @param lookup_invocation [Invocation] the lookup invocation
|
121
|
+
# @return [String,Hash,nil] The found merge options or nil
|
122
|
+
#
|
123
|
+
def lookup_merge_options(key, lookup_invocation)
|
124
|
+
lookup_options = lookup_lookup_options(key, lookup_invocation)
|
125
|
+
lookup_options.nil? ? nil : lookup_options[MERGE]
|
126
|
+
end
|
127
|
+
|
128
|
+
# Retrieve the lookup options that match the given `name`.
|
129
|
+
#
|
130
|
+
# @param key [LookupKey] The key for which we want lookup options
|
131
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] the lookup invocation
|
132
|
+
# @return [String,Hash,nil] The found lookup options or nil
|
133
|
+
#
|
134
|
+
def lookup_lookup_options(key, lookup_invocation)
|
135
|
+
module_name = key.module_name
|
136
|
+
|
137
|
+
# Retrieve the options for the module. We use nil as a key in case we have no module
|
138
|
+
if !@lookup_options.include?(module_name)
|
139
|
+
options = retrieve_lookup_options(module_name, lookup_invocation, MergeStrategy.strategy(HASH))
|
140
|
+
@lookup_options[module_name] = options
|
141
|
+
else
|
142
|
+
options = @lookup_options[module_name]
|
143
|
+
end
|
144
|
+
return nil if options.nil?
|
145
|
+
|
146
|
+
rk = key.root_key
|
147
|
+
key_opts = options[0][rk]
|
148
|
+
return key_opts unless key_opts.nil?
|
149
|
+
|
150
|
+
patterns = options[1]
|
151
|
+
patterns.each_pair { |pattern, value| return value if pattern =~ rk } unless patterns.nil?
|
152
|
+
nil
|
153
|
+
end
|
154
|
+
|
155
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] the lookup invocation
|
156
|
+
# @return [Boolean] `true` if an environment data provider version 5 is configured
|
157
|
+
def has_environment_data_provider?(lookup_invocation)
|
158
|
+
ep = env_provider(lookup_invocation)
|
159
|
+
ep.nil? ? false : ep.config(lookup_invocation).version >= 5
|
160
|
+
end
|
161
|
+
|
162
|
+
# @return [Pathname] the full path of the hiera.yaml config file
|
163
|
+
def global_hiera_config_path
|
164
|
+
@global_hiera_config_path ||= Pathname.new(Puppet.settings[:hiera_config])
|
165
|
+
end
|
166
|
+
|
167
|
+
# @param path [String] the absolute path name of the global hiera.yaml file.
|
168
|
+
# @return [LookupAdapter] self
|
169
|
+
def set_global_hiera_config_path(path)
|
170
|
+
@global_hiera_config_path = Pathname.new(path)
|
171
|
+
self
|
172
|
+
end
|
173
|
+
|
174
|
+
def global_only?
|
175
|
+
instance_variable_defined?(:@global_only) ? @global_only : false
|
176
|
+
end
|
177
|
+
|
178
|
+
# Instructs the lookup framework to only perform lookups in the global layer
|
179
|
+
# @return [LookupAdapter] self
|
180
|
+
def set_global_only
|
181
|
+
@global_only = true
|
182
|
+
self
|
183
|
+
end
|
184
|
+
|
185
|
+
private
|
186
|
+
|
187
|
+
PROVIDER_STACK = [:lookup_global, :lookup_in_environment, :lookup_in_module].freeze
|
188
|
+
|
189
|
+
def validate_lookup_options(options, module_name)
|
190
|
+
raise Puppet::DataBinding::LookupError.new("value of #{LOOKUP_OPTIONS} must be a hash") unless options.is_a?(Hash) unless options.nil?
|
191
|
+
return options if module_name.nil?
|
192
|
+
|
193
|
+
pfx = "#{module_name}::"
|
194
|
+
options.each_pair do |key, value|
|
195
|
+
if key.start_with?(LOOKUP_OPTIONS_PATTERN_START)
|
196
|
+
unless key[1..pfx.length] == pfx
|
197
|
+
raise Puppet::DataBinding::LookupError.new("all #{LOOKUP_OPTIONS} patterns must match a key starting with module name '#{module_name}'")
|
198
|
+
end
|
199
|
+
else
|
200
|
+
unless key.start_with?(pfx)
|
201
|
+
raise Puppet::DataBinding::LookupError.new("all #{LOOKUP_OPTIONS} keys must start with module name '#{module_name}'")
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def compile_patterns(options)
|
208
|
+
return nil if options.nil?
|
209
|
+
key_options = {}
|
210
|
+
pattern_options = {}
|
211
|
+
options.each_pair do |key, value|
|
212
|
+
if key.start_with?(LOOKUP_OPTIONS_PATTERN_START)
|
213
|
+
pattern_options[Regexp.compile(key)] = value
|
214
|
+
else
|
215
|
+
key_options[key] = value
|
216
|
+
end
|
217
|
+
end
|
218
|
+
[key_options.empty? ? nil : key_options, pattern_options.empty? ? nil : pattern_options]
|
219
|
+
end
|
220
|
+
|
221
|
+
def do_lookup(key, lookup_invocation, merge)
|
222
|
+
if lookup_invocation.global_only?
|
223
|
+
key.dig(lookup_invocation, lookup_global(key, lookup_invocation, merge))
|
224
|
+
else
|
225
|
+
merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
|
226
|
+
key.dig(lookup_invocation,
|
227
|
+
merge_strategy.lookup(PROVIDER_STACK, lookup_invocation) { |m| send(m, key, lookup_invocation, merge_strategy) })
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
GLOBAL_ENV_MERGE = 'Global and Environment'.freeze
|
232
|
+
|
233
|
+
# Retrieve lookup options that applies when using a specific module (i.e. a merge of the pre-cached
|
234
|
+
# `env_lookup_options` and the module specific data)
|
235
|
+
def retrieve_lookup_options(module_name, lookup_invocation, merge_strategy)
|
236
|
+
meta_invocation = Invocation.new(lookup_invocation.scope)
|
237
|
+
meta_invocation.lookup(LookupKey::LOOKUP_OPTIONS, lookup_invocation.module_name) do
|
238
|
+
meta_invocation.with(:meta, LOOKUP_OPTIONS) do
|
239
|
+
if meta_invocation.global_only?
|
240
|
+
global_lookup_options(meta_invocation, merge_strategy)
|
241
|
+
else
|
242
|
+
opts = env_lookup_options(meta_invocation, merge_strategy)
|
243
|
+
catch(:no_such_key) do
|
244
|
+
module_opts = validate_lookup_options(lookup_in_module(LookupKey::LOOKUP_OPTIONS, meta_invocation, merge_strategy), module_name)
|
245
|
+
opts = if opts.nil?
|
246
|
+
module_opts
|
247
|
+
else
|
248
|
+
merge_strategy.lookup([GLOBAL_ENV_MERGE, "Module #{lookup_invocation.module_name}"], meta_invocation) do |n|
|
249
|
+
meta_invocation.with(:scope, n) { meta_invocation.report_found(LOOKUP_OPTIONS, n == GLOBAL_ENV_MERGE ? opts : module_opts) }
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
compile_patterns(opts)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
# Retrieve and cache the global lookup options
|
260
|
+
def global_lookup_options(lookup_invocation, merge_strategy)
|
261
|
+
if !instance_variable_defined?(:@global_lookup_options)
|
262
|
+
@global_lookup_options = nil
|
263
|
+
catch(:no_such_key) { @global_lookup_options = validate_lookup_options(lookup_global(LookupKey::LOOKUP_OPTIONS, lookup_invocation, merge_strategy), nil) }
|
264
|
+
end
|
265
|
+
@global_lookup_options
|
266
|
+
end
|
267
|
+
|
268
|
+
# Retrieve and cache lookup options specific to the environment of the compiler that this adapter is attached to (i.e. a merge
|
269
|
+
# of global and environment lookup options).
|
270
|
+
def env_lookup_options(lookup_invocation, merge_strategy)
|
271
|
+
if !instance_variable_defined?(:@env_lookup_options)
|
272
|
+
global_options = global_lookup_options(lookup_invocation, merge_strategy)
|
273
|
+
@env_only_lookup_options = nil
|
274
|
+
catch(:no_such_key) { @env_only_lookup_options = validate_lookup_options(lookup_in_environment(LookupKey::LOOKUP_OPTIONS, lookup_invocation, merge_strategy), nil) }
|
275
|
+
if global_options.nil?
|
276
|
+
@env_lookup_options = @env_only_lookup_options
|
277
|
+
elsif @env_only_lookup_options.nil?
|
278
|
+
@env_lookup_options = global_options
|
279
|
+
else
|
280
|
+
@env_lookup_options = merge_strategy.merge(global_options, @env_only_lookup_options)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
@env_lookup_options
|
284
|
+
end
|
285
|
+
|
286
|
+
def global_provider(lookup_invocation)
|
287
|
+
@global_provider = GlobalDataProvider.new unless instance_variable_defined?(:@global_provider)
|
288
|
+
@global_provider
|
289
|
+
end
|
290
|
+
|
291
|
+
def env_provider(lookup_invocation)
|
292
|
+
@env_provider = initialize_env_provider(lookup_invocation) unless instance_variable_defined?(:@env_provider)
|
293
|
+
@env_provider
|
294
|
+
end
|
295
|
+
|
296
|
+
def module_provider(lookup_invocation, module_name)
|
297
|
+
# Test if the key is present for the given module_name. It might be there even if the
|
298
|
+
# value is nil (which indicates that no module provider is configured for the given name)
|
299
|
+
unless self.include?(module_name)
|
300
|
+
self[module_name] = initialize_module_provider(lookup_invocation, module_name)
|
301
|
+
end
|
302
|
+
self[module_name]
|
303
|
+
end
|
304
|
+
|
305
|
+
def initialize_module_provider(lookup_invocation, module_name)
|
306
|
+
mod = environment.module(module_name)
|
307
|
+
return nil if mod.nil?
|
308
|
+
|
309
|
+
metadata = mod.metadata
|
310
|
+
binding = false
|
311
|
+
provider_name = metadata.nil? ? nil : metadata['data_provider']
|
312
|
+
if provider_name.nil?
|
313
|
+
provider_name = bound_module_provider_name(module_name)
|
314
|
+
binding = !provider_name.nil?
|
315
|
+
end
|
316
|
+
|
317
|
+
mp = nil
|
318
|
+
if mod.has_hiera_conf?
|
319
|
+
mp = ModuleDataProvider.new(module_name)
|
320
|
+
# A version 5 hiera.yaml trumps a data provider setting or binding in the module
|
321
|
+
if mp.config(lookup_invocation).version >= 5
|
322
|
+
unless provider_name.nil? || Puppet[:strict] == :off
|
323
|
+
if binding
|
324
|
+
Puppet.warn_once(:deprecation, "ModuleBinding#data_provider-#{module_name}",
|
325
|
+
"Defining data_provider '#{provider_name}' as a Puppet::Binding is deprecated. The binding is ignored since a '#{HieraConfig::CONFIG_FILE_NAME}' with version >= 5 is present")
|
326
|
+
else
|
327
|
+
Puppet.warn_once(:deprecation, "metadata.json#data_provider-#{module_name}",
|
328
|
+
"Defining \"data_provider\": \"#{provider_name}\" in metadata.json is deprecated. It is ignored since a '#{HieraConfig::CONFIG_FILE_NAME}' with version >= 5 is present", mod.metadata_file)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
provider_name = nil
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
if provider_name.nil?
|
336
|
+
mp
|
337
|
+
else
|
338
|
+
unless Puppet[:strict] == :off
|
339
|
+
if binding
|
340
|
+
msg = "Defining data_provider '#{provider_name}' as a Puppet::Binding is deprecated"
|
341
|
+
msg += ". A '#{HieraConfig::CONFIG_FILE_NAME}' file should be used instead" if mp.nil?
|
342
|
+
Puppet.warn_once(:deprecation, "ModuleBinding#data_provider-#{module_name}", msg)
|
343
|
+
else
|
344
|
+
msg = "Defining \"data_provider\": \"#{provider_name}\" in metadata.json is deprecated"
|
345
|
+
msg += ". A '#{HieraConfig::CONFIG_FILE_NAME}' file should be used instead" if mp.nil?
|
346
|
+
Puppet.warn_once(:deprecation, "metadata.json#data_provider-#{module_name}", msg, mod.metadata_file)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
case provider_name
|
351
|
+
when 'none'
|
352
|
+
nil
|
353
|
+
when 'hiera'
|
354
|
+
mp || ModuleDataProvider.new(module_name)
|
355
|
+
when 'function'
|
356
|
+
ModuleDataProvider.new(module_name, HieraConfig.v4_function_config(Pathname(mod.path), "#{module_name}::data"))
|
357
|
+
else
|
358
|
+
injector = Puppet.lookup(:injector) { nil }
|
359
|
+
provider = injector.lookup(nil,
|
360
|
+
Puppet::Plugins::DataProviders::Registry.hash_of_module_data_providers,
|
361
|
+
Puppet::Plugins::DataProviders::MODULE_DATA_PROVIDERS_KEY)[provider_name]
|
362
|
+
unless provider
|
363
|
+
raise Puppet::Error.new("Environment '#{environment.name}', cannot find module_data_provider '#{provider_name}'")
|
364
|
+
end
|
365
|
+
# Provider is configured per module but cached using compiler life cycle so it must be cloned
|
366
|
+
provider.clone
|
367
|
+
end
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
def bound_module_provider_name(module_name)
|
372
|
+
injector = Puppet.lookup(:injector) { nil }
|
373
|
+
injector.nil? ? nil : injector.lookup(nil,
|
374
|
+
Puppet::Plugins::DataProviders::Registry.hash_of_per_module_data_provider,
|
375
|
+
Puppet::Plugins::DataProviders::PER_MODULE_DATA_PROVIDER_KEY)[module_name]
|
376
|
+
end
|
377
|
+
|
378
|
+
def initialize_env_provider(lookup_invocation)
|
379
|
+
env_conf = environment.configuration
|
380
|
+
return nil if env_conf.nil? || env_conf.path_to_env.nil?
|
381
|
+
|
382
|
+
# Get the name of the data provider from the environment's configuration
|
383
|
+
provider_name = env_conf.environment_data_provider
|
384
|
+
env_path = Pathname(env_conf.path_to_env)
|
385
|
+
config_path = env_path + HieraConfig::CONFIG_FILE_NAME
|
386
|
+
|
387
|
+
ep = nil
|
388
|
+
if config_path.exist?
|
389
|
+
ep = EnvironmentDataProvider.new
|
390
|
+
# A version 5 hiera.yaml trumps any data provider setting in the environment.conf
|
391
|
+
if ep.config(lookup_invocation).version >= 5
|
392
|
+
unless provider_name.nil? || Puppet[:strict] == :off
|
393
|
+
Puppet.warn_once(:deprecation, 'environment.conf#data_provider',
|
394
|
+
"Defining environment_data_provider='#{provider_name}' in environment.conf is deprecated", env_path + 'environment.conf')
|
395
|
+
|
396
|
+
unless provider_name == 'hiera'
|
397
|
+
Puppet.warn_once(:deprecation, 'environment.conf#data_provider_overridden',
|
398
|
+
"The environment_data_provider='#{provider_name}' setting is ignored since '#{config_path}' version >= 5", env_path + 'environment.conf')
|
399
|
+
end
|
400
|
+
end
|
401
|
+
provider_name = nil
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
if provider_name.nil?
|
406
|
+
ep
|
407
|
+
else
|
408
|
+
unless Puppet[:strict] == :off
|
409
|
+
msg = "Defining environment_data_provider='#{provider_name}' in environment.conf is deprecated"
|
410
|
+
msg += ". A '#{HieraConfig::CONFIG_FILE_NAME}' file should be used instead" if ep.nil?
|
411
|
+
Puppet.warn_once(:deprecation, 'environment.conf#data_provider', msg, env_path + 'environment.conf')
|
412
|
+
end
|
413
|
+
|
414
|
+
case provider_name
|
415
|
+
when 'none'
|
416
|
+
nil
|
417
|
+
when 'hiera'
|
418
|
+
# Use hiera.yaml or default settings if it is missing
|
419
|
+
ep || EnvironmentDataProvider.new
|
420
|
+
when 'function'
|
421
|
+
EnvironmentDataProvider.new(HieraConfigV5.v4_function_config(env_path, 'environment::data'))
|
422
|
+
else
|
423
|
+
injector = Puppet.lookup(:injector) { nil }
|
424
|
+
|
425
|
+
# Support running tests without an injector being configured == using a null implementation
|
426
|
+
return nil unless injector
|
427
|
+
|
428
|
+
# Get the service (registry of known implementations)
|
429
|
+
provider = injector.lookup(nil,
|
430
|
+
Puppet::Plugins::DataProviders::Registry.hash_of_environment_data_providers,
|
431
|
+
Puppet::Plugins::DataProviders::ENV_DATA_PROVIDERS_KEY)[provider_name]
|
432
|
+
unless provider
|
433
|
+
raise Puppet::Error.new("Environment '#{environment.name}', cannot find environment_data_provider '#{provider_name}'")
|
434
|
+
end
|
435
|
+
provider
|
436
|
+
end
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
# @return [Puppet::Node::Environment] the environment of the compiler that this adapter is associated with
|
441
|
+
def environment
|
442
|
+
@compiler.environment
|
443
|
+
end
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
require_relative 'invocation'
|
449
|
+
require_relative 'global_data_provider'
|
450
|
+
require_relative 'environment_data_provider'
|
451
|
+
require_relative 'module_data_provider'
|