puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin
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/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/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/data_providers.rb +6 -3
- 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/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- 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/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- 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/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- 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/module_tool.rb +4 -4
- 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/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- 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/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/lookup.rb +4 -3
- 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/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- 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/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- 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/settings.rb +1 -1
- 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/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/util.rb +1 -0
- 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/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/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- 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/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- 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 -2595
- 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/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- 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
@@ -1,23 +1,28 @@
|
|
1
1
|
require_relative 'sub_lookup'
|
2
|
-
|
3
|
-
# Add support for Hiera-like interpolation expressions. The expressions may contain keys that uses dot-notation
|
4
|
-
# to further navigate into hashes and arrays
|
5
|
-
#
|
6
2
|
module Puppet::Pops
|
7
3
|
module Lookup
|
4
|
+
# Adds support for interpolation expressions. The expressions may contain keys that uses dot-notation
|
5
|
+
# to further navigate into hashes and arrays
|
6
|
+
#
|
7
|
+
# @api public
|
8
8
|
module Interpolation
|
9
9
|
include SubLookup
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
# @param value [Object] The value to interpolate
|
12
|
+
# @param context [Context] The current lookup context
|
13
|
+
# @param allow_methods [Boolean] `true` if interpolation expression that contains lookup methods are allowed
|
14
|
+
# @return [Object] the result of resolving all interpolations in the given value
|
15
|
+
# @api public
|
16
|
+
def interpolate(value, context, allow_methods)
|
17
|
+
case value
|
13
18
|
when String
|
14
|
-
|
19
|
+
value.index('%{').nil? ? value : interpolate_string(value, context, allow_methods)
|
15
20
|
when Array
|
16
|
-
|
21
|
+
value.map { |element| interpolate(element, context, allow_methods) }
|
17
22
|
when Hash
|
18
|
-
Hash[
|
23
|
+
Hash[value.map { |k, v| [k, interpolate(v, context, allow_methods)] }]
|
19
24
|
else
|
20
|
-
|
25
|
+
value
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
@@ -35,7 +40,8 @@ module Interpolation
|
|
35
40
|
# Matches a key that is quoted using a matching pair of either single or double quotes.
|
36
41
|
QUOTED_KEY = /^(?:"([^"]+)"|'([^']+)')$/
|
37
42
|
|
38
|
-
def interpolate_string(subject,
|
43
|
+
def interpolate_string(subject, context, allow_methods)
|
44
|
+
lookup_invocation = context.is_a?(Invocation) ? context : context.invocation
|
39
45
|
lookup_invocation.with(:interpolate, subject) do
|
40
46
|
subject.gsub(/%\{([^\}]*)\}/) do |match|
|
41
47
|
expr = $1
|
@@ -44,16 +50,12 @@ module Interpolation
|
|
44
50
|
value = nil
|
45
51
|
unless EMPTY_INTERPOLATIONS[expr]
|
46
52
|
method_key, key = get_method_and_data(expr, allow_methods)
|
47
|
-
is_alias = method_key ==
|
53
|
+
is_alias = method_key == :alias
|
48
54
|
|
49
55
|
# Alias is only permitted if the entire string is equal to the interpolate expression
|
50
56
|
raise Puppet::DataBinding::LookupError, "'alias' interpolation is only permitted if the expression is equal to the entire string" if is_alias && subject != match
|
51
|
-
|
52
|
-
|
53
|
-
root_key = segments.shift
|
54
|
-
value = interpolate_method(method_key).call(root_key, lookup_invocation)
|
55
|
-
value = sub_lookup(key, lookup_invocation, segments, value) unless segments.empty?
|
56
|
-
value = lookup_invocation.check(key) { interpolate(value, lookup_invocation, allow_methods) }
|
57
|
+
value = interpolate_method(method_key).call(key, lookup_invocation, subject)
|
58
|
+
value = lookup_invocation.check(method_key == :scope ? "scope:#{key}" : key) { interpolate(value, lookup_invocation, allow_methods) }
|
57
59
|
|
58
60
|
# break gsub and return value immediately if this was an alias substitution. The value might be something other than a String
|
59
61
|
return value if is_alias
|
@@ -65,34 +67,44 @@ module Interpolation
|
|
65
67
|
|
66
68
|
def interpolate_method(method_key)
|
67
69
|
@@interpolate_methods ||= begin
|
68
|
-
global_lookup = lambda { |key, lookup_invocation| Lookup.lookup(key, nil, '', true, nil, lookup_invocation) }
|
69
|
-
scope_lookup = lambda do |key, lookup_invocation|
|
70
|
-
|
70
|
+
global_lookup = lambda { |key, lookup_invocation, _| Lookup.lookup(key, nil, '', true, nil, lookup_invocation) }
|
71
|
+
scope_lookup = lambda do |key, lookup_invocation, subject|
|
72
|
+
segments = split_key(key) { |problem| Puppet::DataBinding::LookupError.new("#{problem} in string: #{subject}") }
|
73
|
+
root_key = segments.shift
|
74
|
+
value = lookup_invocation.with(:scope, 'Global Scope') do
|
71
75
|
ovr = lookup_invocation.override_values
|
72
|
-
if ovr.include?(
|
73
|
-
lookup_invocation.report_found_in_overrides(
|
76
|
+
if ovr.include?(root_key)
|
77
|
+
lookup_invocation.report_found_in_overrides(root_key, ovr[root_key])
|
74
78
|
else
|
75
79
|
scope = lookup_invocation.scope
|
76
|
-
|
77
|
-
|
78
|
-
else
|
80
|
+
val = scope[root_key]
|
81
|
+
if val.nil? && !nil_in_scope?(scope, root_key)
|
79
82
|
defaults = lookup_invocation.default_values
|
80
|
-
if defaults.include?(
|
81
|
-
lookup_invocation.report_found_in_defaults(
|
83
|
+
if defaults.include?(root_key)
|
84
|
+
lookup_invocation.report_found_in_defaults(root_key, defaults[root_key])
|
82
85
|
else
|
83
86
|
nil
|
84
87
|
end
|
88
|
+
else
|
89
|
+
lookup_invocation.report_found(root_key, val)
|
85
90
|
end
|
86
91
|
end
|
87
92
|
end
|
93
|
+
unless segments.empty?
|
94
|
+
found = '';
|
95
|
+
catch(:no_such_key) { found = sub_lookup(key, lookup_invocation, segments, value) }
|
96
|
+
value = found;
|
97
|
+
end
|
98
|
+
lookup_invocation.remember_scope_lookup(key, value)
|
99
|
+
value
|
88
100
|
end
|
89
101
|
|
90
102
|
{
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
103
|
+
:lookup => global_lookup,
|
104
|
+
:hiera => global_lookup, # this is just an alias for 'lookup'
|
105
|
+
:alias => global_lookup, # same as 'lookup' but expression must be entire string and result is not subject to string substitution
|
106
|
+
:scope => scope_lookup,
|
107
|
+
:literal => lambda { |key, _, _| key }
|
96
108
|
}.freeze
|
97
109
|
end
|
98
110
|
interpolate_method = @@interpolate_methods[method_key]
|
@@ -100,13 +112,22 @@ module Interpolation
|
|
100
112
|
interpolate_method
|
101
113
|
end
|
102
114
|
|
115
|
+
# Because the semanitcs of Puppet::Parser::Scope#include? differs from Hash#include?
|
116
|
+
def nil_in_scope?(scope, key)
|
117
|
+
if scope.is_a?(Hash)
|
118
|
+
scope.include?(key)
|
119
|
+
else
|
120
|
+
scope.exist?(key)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
103
124
|
def get_method_and_data(data, allow_methods)
|
104
125
|
if match = data.match(/^(\w+)\((?:["]([^"]+)["]|[']([^']+)['])\)$/)
|
105
126
|
raise Puppet::DataBinding::LookupError, 'Interpolation using method syntax is not allowed in this context' unless allow_methods
|
106
|
-
key = match[1]
|
127
|
+
key = match[1].to_sym
|
107
128
|
data = match[2] || match[3] # double or single qouted
|
108
129
|
else
|
109
|
-
key =
|
130
|
+
key = :scope
|
110
131
|
end
|
111
132
|
[key, data]
|
112
133
|
end
|
@@ -1,134 +1,212 @@
|
|
1
|
-
|
2
|
-
class Invocation
|
3
|
-
attr_reader :scope, :override_values, :default_values, :explainer
|
4
|
-
attr_accessor :module_name, :top_key
|
1
|
+
require_relative 'explainer'
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module Puppet::Pops
|
4
|
+
module Lookup
|
5
|
+
# @api private
|
6
|
+
class Invocation
|
7
|
+
attr_reader :scope, :override_values, :default_values, :explainer, :module_name, :top_key, :adapter_class
|
8
|
+
|
9
|
+
def self.current
|
10
|
+
@current
|
11
|
+
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
13
|
+
# Creates a context object for a lookup invocation. The object contains the current scope, overrides, and default
|
14
|
+
# values and may optionally contain an {ExplanationAcceptor} instance that will receive book-keeping information
|
15
|
+
# about the progress of the lookup.
|
16
|
+
#
|
17
|
+
# If the _explain_ argument is a boolean, then _false_ means that no explanation is needed and _true_ means that
|
18
|
+
# the default explanation acceptor should be used. The _explain_ argument may also be an instance of the
|
19
|
+
# `ExplanationAcceptor` class.
|
20
|
+
#
|
21
|
+
# @param scope [Puppet::Parser::Scope] The scope to use for the lookup
|
22
|
+
# @param override_values [Hash<String,Object>|nil] A map to use as override. Values found here are returned immediately (no merge)
|
23
|
+
# @param default_values [Hash<String,Object>] A map to use as the last resort (but before default)
|
24
|
+
# @param explainer [boolean,Explanainer] An boolean true to use the default explanation acceptor or an explainer instance that will receive information about the lookup
|
25
|
+
def initialize(scope, override_values = EMPTY_HASH, default_values = EMPTY_HASH, explainer = nil, adapter_class = LookupAdapter)
|
26
|
+
@scope = scope
|
27
|
+
@override_values = override_values
|
28
|
+
@default_values = default_values
|
29
|
+
|
30
|
+
parent_invocation = self.class.current
|
31
|
+
if parent_invocation.nil?
|
23
32
|
@name_stack = []
|
24
|
-
@
|
25
|
-
@override_values = override_values
|
26
|
-
@default_values = default_values
|
33
|
+
@adapter_class = adapter_class
|
27
34
|
unless explainer.is_a?(Explainer)
|
28
35
|
explainer = explainer == true ? Explainer.new : nil
|
29
36
|
end
|
30
37
|
explainer = DebugExplainer.new(explainer) if Puppet[:debug] && !explainer.is_a?(DebugExplainer)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
38
|
+
else
|
39
|
+
@name_stack = parent_invocation.name_stack
|
40
|
+
@adapter_class = parent_invocation.adapter_class
|
41
|
+
set_global_only if parent_invocation.global_only?
|
42
|
+
povr = parent_invocation.hiera_v3_location_overrides
|
43
|
+
set_hiera_v3_location_overrides(povr) unless povr.empty?
|
44
|
+
explainer = explainer == false ? nil : parent_invocation.explainer
|
45
|
+
end
|
46
|
+
@explainer = explainer
|
47
|
+
end
|
39
48
|
|
40
|
-
|
49
|
+
def lookup(key, module_name)
|
50
|
+
@top_key = key
|
51
|
+
@module_name = module_name
|
52
|
+
save_current = self.class.current
|
53
|
+
if save_current.equal?(self)
|
54
|
+
yield
|
55
|
+
else
|
41
56
|
begin
|
57
|
+
self.class.instance_variable_set(:@current, self)
|
42
58
|
yield
|
43
|
-
rescue Puppet::DataBinding::LookupError
|
44
|
-
raise
|
45
|
-
rescue Puppet::Error => detail
|
46
|
-
raise Puppet::DataBinding::LookupError.new(detail.message, detail)
|
47
59
|
ensure
|
48
|
-
|
60
|
+
self.class.instance_variable_set(:@current, save_current)
|
49
61
|
end
|
50
62
|
end
|
63
|
+
end
|
51
64
|
|
52
|
-
|
53
|
-
|
65
|
+
def check(name)
|
66
|
+
if @name_stack.include?(name)
|
67
|
+
raise Puppet::DataBinding::RecursiveLookupError, "Recursive lookup detected in [#{@name_stack.join(', ')}]"
|
54
68
|
end
|
69
|
+
return unless block_given?
|
70
|
+
|
71
|
+
@name_stack.push(name)
|
72
|
+
begin
|
73
|
+
yield
|
74
|
+
rescue Puppet::DataBinding::LookupError
|
75
|
+
raise
|
76
|
+
rescue Puppet::Error => detail
|
77
|
+
raise Puppet::DataBinding::LookupError.new(detail.message, detail)
|
78
|
+
ensure
|
79
|
+
@name_stack.pop
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def emit_debug_info(preamble)
|
84
|
+
@explainer.emit_debug_info(preamble) if @explainer.is_a?(DebugExplainer)
|
85
|
+
end
|
86
|
+
|
87
|
+
def lookup_adapter
|
88
|
+
@adapter ||= @adapter_class.adapt(scope.compiler)
|
89
|
+
end
|
55
90
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
#
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
91
|
+
# This method is overridden by the special Invocation used while resolving interpolations in a
|
92
|
+
# Hiera configuration file (hiera.yaml) where it's used for collecting and remembering the current
|
93
|
+
# values that the configuration was based on
|
94
|
+
#
|
95
|
+
# @api private
|
96
|
+
def remember_scope_lookup(key, value)
|
97
|
+
# Does nothing by default
|
98
|
+
end
|
99
|
+
|
100
|
+
# The qualifier_type can be one of:
|
101
|
+
# :global - qualifier is the data binding terminus name
|
102
|
+
# :data_provider - qualifier a DataProvider instance
|
103
|
+
# :path - qualifier is a ResolvedPath instance
|
104
|
+
# :merge - qualifier is a MergeStrategy instance
|
105
|
+
# :interpolation - qualifier is the unresolved interpolation expression
|
106
|
+
# :meta - qualifier is the module name
|
107
|
+
# :data - qualifier is the key
|
108
|
+
#
|
109
|
+
# @param qualifier [Object] A branch, a provider, or a path
|
110
|
+
def with(qualifier_type, qualifier)
|
111
|
+
if explainer.nil?
|
112
|
+
yield
|
113
|
+
else
|
114
|
+
@explainer.push(qualifier_type, qualifier)
|
115
|
+
begin
|
69
116
|
yield
|
70
|
-
|
71
|
-
@explainer.
|
72
|
-
begin
|
73
|
-
yield
|
74
|
-
ensure
|
75
|
-
@explainer.pop
|
76
|
-
end
|
117
|
+
ensure
|
118
|
+
@explainer.pop
|
77
119
|
end
|
78
120
|
end
|
121
|
+
end
|
79
122
|
|
80
|
-
|
81
|
-
|
82
|
-
|
123
|
+
def only_explain_options?
|
124
|
+
@explainer.nil? ? false : @explainer.only_explain_options?
|
125
|
+
end
|
83
126
|
|
84
|
-
|
85
|
-
|
86
|
-
|
127
|
+
def explain_options?
|
128
|
+
@explainer.nil? ? false : @explainer.explain_options?
|
129
|
+
end
|
87
130
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
131
|
+
def report_found_in_overrides(key, value)
|
132
|
+
@explainer.accept_found_in_overrides(key, value) unless @explainer.nil?
|
133
|
+
value
|
134
|
+
end
|
92
135
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
136
|
+
def report_found_in_defaults(key, value)
|
137
|
+
@explainer.accept_found_in_defaults(key, value) unless @explainer.nil?
|
138
|
+
value
|
139
|
+
end
|
97
140
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
141
|
+
def report_found(key, value)
|
142
|
+
@explainer.accept_found(key, value) unless @explainer.nil?
|
143
|
+
value
|
144
|
+
end
|
102
145
|
|
103
|
-
|
104
|
-
|
105
|
-
|
146
|
+
def report_merge_source(merge_source)
|
147
|
+
@explainer.accept_merge_source(merge_source) unless @explainer.nil?
|
148
|
+
end
|
106
149
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
150
|
+
# Report the result of a merge or fully resolved interpolated string
|
151
|
+
# @param value [Object] The result to report
|
152
|
+
# @return [Object] the given value
|
153
|
+
def report_result(value)
|
154
|
+
@explainer.accept_result(value) unless @explainer.nil?
|
155
|
+
value
|
156
|
+
end
|
114
157
|
|
115
|
-
|
116
|
-
|
117
|
-
|
158
|
+
def report_not_found(key)
|
159
|
+
@explainer.accept_not_found(key) unless @explainer.nil?
|
160
|
+
end
|
118
161
|
|
119
|
-
|
120
|
-
|
121
|
-
|
162
|
+
def report_location_not_found
|
163
|
+
@explainer.accept_location_not_found unless @explainer.nil?
|
164
|
+
end
|
122
165
|
|
123
|
-
|
124
|
-
|
125
|
-
|
166
|
+
def report_module_not_found(module_name)
|
167
|
+
@explainer.accept_module_not_found(module_name) unless @explainer.nil?
|
168
|
+
end
|
126
169
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
170
|
+
def report_module_provider_not_found(module_name)
|
171
|
+
@explainer.accept_module_provider_not_found(module_name) unless @explainer.nil?
|
172
|
+
end
|
173
|
+
|
174
|
+
def report_text(&block)
|
175
|
+
unless @explainer.nil?
|
176
|
+
@explainer.accept_text(block.call)
|
131
177
|
end
|
132
178
|
end
|
133
|
-
end
|
134
179
|
|
180
|
+
def global_only?
|
181
|
+
lookup_adapter.global_only? || (instance_variable_defined?(:@global_only) ? @global_only : false)
|
182
|
+
end
|
183
|
+
|
184
|
+
# Instructs the lookup framework to only perform lookups in the global layer
|
185
|
+
# @return [Invocation] self
|
186
|
+
def set_global_only
|
187
|
+
@global_only = true
|
188
|
+
self
|
189
|
+
end
|
190
|
+
|
191
|
+
# @return [Pathname] the full path of the hiera.yaml config file
|
192
|
+
def global_hiera_config_path
|
193
|
+
lookup_adapter.global_hiera_config_path
|
194
|
+
end
|
195
|
+
|
196
|
+
# Overrides passed from hiera_xxx functions down to V3DataHashFunctionProvider
|
197
|
+
def set_hiera_v3_location_overrides(overrides)
|
198
|
+
@hiera_v3_location_overrides = [overrides].flatten unless overrides.nil?
|
199
|
+
end
|
200
|
+
|
201
|
+
def hiera_v3_location_overrides
|
202
|
+
instance_variable_defined?(:@hiera_v3_location_overrides) ? @hiera_v3_location_overrides : EMPTY_ARRAY
|
203
|
+
end
|
204
|
+
|
205
|
+
protected
|
206
|
+
|
207
|
+
def name_stack
|
208
|
+
@name_stack.clone
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
@@ -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
|