puppet 4.8.2-x86-mingw32 → 4.9.0-x86-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.
- 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 -2607
- 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
@@ -37,6 +37,14 @@ describe 'Puppet::Pops::Lookup::Context' do
|
|
37
37
|
expect(eval_and_collect_notices(code)[0]).to eql('ze_value')
|
38
38
|
end
|
39
39
|
|
40
|
+
it 'the cache method returns the value that is cached' do
|
41
|
+
code = <<-PUPPET.unindent
|
42
|
+
$ctx = Puppet::LookupContext.new('e', 'm')
|
43
|
+
notice($ctx.cache('ze_key', 'ze_value'))
|
44
|
+
PUPPET
|
45
|
+
expect(eval_and_collect_notices(code)[0]).to eql('ze_value')
|
46
|
+
end
|
47
|
+
|
40
48
|
it 'can store and retrieve a hash using the cache' do
|
41
49
|
code = <<-PUPPET.unindent
|
42
50
|
$ctx = Puppet::LookupContext.new('e', 'm')
|
@@ -115,35 +123,56 @@ describe 'Puppet::Pops::Lookup::Context' do
|
|
115
123
|
end
|
116
124
|
|
117
125
|
context 'when used in an Invocation' do
|
118
|
-
let(:
|
119
|
-
let(:
|
126
|
+
let(:node) { Puppet::Node.new('test') }
|
127
|
+
let(:compiler) { Puppet::Parser::Compiler.new(node) }
|
128
|
+
let(:invocation) { Invocation.new(compiler.topscope) }
|
129
|
+
let(:invocation_with_explain) { Invocation.new(compiler.topscope, {}, {}, true) }
|
130
|
+
|
131
|
+
def compile_and_get_notices(code, scope_vars = {})
|
132
|
+
Puppet[:code] = code
|
133
|
+
scope = compiler.topscope
|
134
|
+
scope_vars.each_pair { |k,v| scope.setvar(k, v) }
|
135
|
+
node.environment.check_for_reparse
|
136
|
+
logs = []
|
137
|
+
Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
|
138
|
+
compiler.compile
|
139
|
+
end
|
140
|
+
logs = logs.select { |log| log.level == :notice }.map { |log| log.message }
|
141
|
+
logs
|
142
|
+
end
|
120
143
|
|
121
144
|
it 'will not call explain unless explanations are active' do
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
145
|
+
invocation.lookup('dummy', nil) do
|
146
|
+
code = <<-PUPPET.unindent
|
147
|
+
$ctx = Puppet::LookupContext.new('e', 'm')
|
148
|
+
$ctx.explain || { notice('stop calling'); 'bad' }
|
149
|
+
PUPPET
|
150
|
+
expect(compile_and_get_notices(code)).to be_empty
|
151
|
+
end
|
128
152
|
end
|
129
153
|
|
130
154
|
it 'will call explain when explanations are active' do
|
131
|
-
|
132
|
-
invocation_with_explain.with(:global, 'test') do
|
155
|
+
invocation_with_explain.lookup('dummy', nil) do
|
133
156
|
code = <<-PUPPET.unindent
|
134
157
|
$ctx = Puppet::LookupContext.new('e', 'm')
|
135
158
|
$ctx.explain || { notice('called'); 'good' }
|
136
159
|
PUPPET
|
137
|
-
expect(
|
160
|
+
expect(compile_and_get_notices(code)).to eql(['called'])
|
161
|
+
end
|
162
|
+
expect(invocation_with_explain.explainer.explain).to eql("good\n")
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'will call interpolate to resolve interpolation' do
|
166
|
+
invocation.lookup('dummy', nil) do
|
167
|
+
code = <<-PUPPET.unindent
|
168
|
+
$ctx = Puppet::LookupContext.new('e', 'm')
|
169
|
+
notice($ctx.interpolate('-- %{testing} --'))
|
170
|
+
PUPPET
|
171
|
+
expect(compile_and_get_notices(code, { 'testing' => 'called' })).to eql(['-- called --'])
|
138
172
|
end
|
139
|
-
expect(invocation_with_explain.explainer.to_s).to eql(<<-TEXT.unindent)
|
140
|
-
Data Binding "test"
|
141
|
-
good
|
142
|
-
TEXT
|
143
173
|
end
|
144
174
|
end
|
145
175
|
end
|
146
176
|
end
|
147
177
|
end
|
148
178
|
end
|
149
|
-
|
@@ -1,18 +1,23 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'spec_helper'
|
3
3
|
require 'puppet'
|
4
|
-
require 'puppet/data_providers/hiera_config'
|
5
|
-
require 'puppet/data_providers/hiera_interpolate'
|
6
4
|
|
7
5
|
module Puppet::Pops
|
8
6
|
describe 'Puppet::Pops::Lookup::Interpolation' do
|
7
|
+
include Lookup::SubLookup
|
9
8
|
|
10
9
|
let(:interpolator) { Class.new { include Lookup::Interpolation }.new }
|
11
10
|
let(:scope) { {} }
|
12
11
|
let(:lookup_invocation) { Lookup::Invocation.new(scope, {}, {}, nil) }
|
13
12
|
|
14
13
|
def expect_lookup(*keys)
|
15
|
-
keys.each
|
14
|
+
keys.each do |key|
|
15
|
+
segments = split_key(key)
|
16
|
+
root_key = segments.shift
|
17
|
+
found = data[root_key]
|
18
|
+
found = sub_lookup(key, lookup_invocation, segments, found) unless segments.empty?
|
19
|
+
Lookup.expects(:lookup).with(key, nil, '', true, nil, lookup_invocation).returns(found)
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
context 'when interpolating nested data' do
|
@@ -160,12 +165,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
160
165
|
end
|
161
166
|
|
162
167
|
it 'should find an entry using a quoted interpolation with method lookup' do
|
163
|
-
expect_lookup('a.b')
|
168
|
+
expect_lookup("'a.b'")
|
164
169
|
expect(interpolator.interpolate("a dot c: %{lookup(\"'a.b'\")}", lookup_invocation, true)).to eq('a dot c: (lookup) a dot b')
|
165
170
|
end
|
166
171
|
|
167
172
|
it 'should find an entry using a quoted interpolation with method alias' do
|
168
|
-
expect_lookup('a.b')
|
173
|
+
expect_lookup("'a.b'")
|
169
174
|
expect(interpolator.interpolate("%{alias(\"'a.b'\")}", lookup_invocation, true)).to eq('(lookup) a dot b')
|
170
175
|
end
|
171
176
|
|
@@ -173,8 +178,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
173
178
|
expect(interpolator.interpolate('a dot e: %{a.d}', lookup_invocation, true)).to eq('a dot e: (scope) a dot d is a hash entry')
|
174
179
|
end
|
175
180
|
|
176
|
-
it 'should
|
177
|
-
|
181
|
+
it 'should report a key missing and replace with empty string when a dotted key is used to navigate into a structure and then not found' do
|
182
|
+
expect(interpolator.interpolate('a dot n: %{a.n}', lookup_invocation, true)).to eq('a dot n: ')
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'should use a dotted key to navigate into a structure when it is not quoted with method lookup' do
|
186
|
+
expect_lookup('a.d')
|
178
187
|
expect(interpolator.interpolate("a dot e: %{lookup('a.d')}", lookup_invocation, true)).to eq('a dot e: (lookup) a dot d is a hash entry')
|
179
188
|
end
|
180
189
|
|
@@ -183,7 +192,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
183
192
|
end
|
184
193
|
|
185
194
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is last and method is lookup' do
|
186
|
-
expect_lookup(
|
195
|
+
expect_lookup("a.'d.x'")
|
187
196
|
expect(interpolator.interpolate("a dot ex: %{lookup(\"a.'d.x'\")}", lookup_invocation, true)).to eq('a dot ex: (lookup) a dot d.x is a hash entry')
|
188
197
|
end
|
189
198
|
|
@@ -192,7 +201,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
192
201
|
end
|
193
202
|
|
194
203
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is first and method is lookup' do
|
195
|
-
expect_lookup('a.x')
|
204
|
+
expect_lookup("'a.x'.d")
|
196
205
|
expect(interpolator.interpolate("a dot xe: %{lookup(\"'a.x'.d\")}", lookup_invocation, true)).to eq('a dot xe: (lookup) a.x dot d is a hash entry')
|
197
206
|
end
|
198
207
|
|
@@ -201,7 +210,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
201
210
|
end
|
202
211
|
|
203
212
|
it 'should use a mix of quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is in the middle and method is lookup' do
|
204
|
-
expect_lookup(
|
213
|
+
expect_lookup("a.'d.z'.g")
|
205
214
|
expect(interpolator.interpolate("a dot xm: %{lookup(\"a.'d.z'.g\")}", lookup_invocation, true)).to eq('a dot xm: (lookup) a dot d.z dot g is a hash entry')
|
206
215
|
end
|
207
216
|
|
@@ -210,7 +219,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
210
219
|
end
|
211
220
|
|
212
221
|
it 'should use a mix of several quoted and dotted keys to navigate into a structure containing dotted keys and quoted key is in the middle and method is lookup' do
|
213
|
-
expect_lookup('a.x')
|
222
|
+
expect_lookup("'a.x'.'d.z'.g")
|
214
223
|
expect(interpolator.interpolate("a dot xx: %{lookup(\"'a.x'.'d.z'.g\")}", lookup_invocation, true)).to eq('a dot xx: (lookup) a.x dot d.z dot g is a hash entry')
|
215
224
|
end
|
216
225
|
|
@@ -219,7 +228,7 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
219
228
|
end
|
220
229
|
|
221
230
|
it 'should find an entry using using a quoted interpolation on dotted key containing numbers using method lookup' do
|
222
|
-
expect_lookup('x.1')
|
231
|
+
expect_lookup("'x.1'")
|
223
232
|
expect(interpolator.interpolate("x dot 2: %{lookup(\"'x.1'\")}", lookup_invocation, true)).to eq('x dot 2: (lookup) x dot 1')
|
224
233
|
end
|
225
234
|
|
@@ -228,13 +237,12 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
228
237
|
end
|
229
238
|
|
230
239
|
it 'should not find a subkey when the dotted key is quoted with method lookup' do
|
231
|
-
expect_lookup('a.d')
|
240
|
+
expect_lookup("'a.d'")
|
232
241
|
expect(interpolator.interpolate("a dot f: %{lookup(\"'a.d'\")}", lookup_invocation, true)).to eq('a dot f: ')
|
233
242
|
end
|
234
243
|
|
235
244
|
it 'should not find a subkey that is matched within a string' do
|
236
|
-
expect_lookup('key')
|
237
|
-
expect{ interpolator.interpolate('%{hiera("key.subkey")}', lookup_invocation, true) }.to raise_error(/Got String when a hash-like object was expected to access value using 'subkey' from key 'key.subkey'/)
|
245
|
+
expect{ expect_lookup('key.subkey') }.to raise_error(/Got String when a hash-like object was expected to access value using 'subkey' from key 'key.subkey'/)
|
238
246
|
end
|
239
247
|
end
|
240
248
|
|
@@ -267,27 +275,27 @@ describe 'Puppet::Pops::Lookup::Interpolation' do
|
|
267
275
|
end
|
268
276
|
|
269
277
|
it 'allows dotted keys with non alphanumeric characters' do
|
270
|
-
expect_lookup('very_angry', '
|
278
|
+
expect_lookup('very_angry', '!$\%!.\#@!&%|')
|
271
279
|
expect(interpolator.interpolate("%{lookup('very_angry')}", lookup_invocation, true)).to eq('not happy at all')
|
272
280
|
end
|
273
281
|
|
274
282
|
it 'allows dotted keys with nested white space' do
|
275
|
-
expect_lookup('a key with')
|
283
|
+
expect_lookup('a key with.nested whitespace')
|
276
284
|
expect(interpolator.interpolate("%{lookup('a key with.nested whitespace')}", lookup_invocation, true)).to eq('value for nested ws key')
|
277
285
|
end
|
278
286
|
|
279
287
|
it 'will trim each key element' do
|
280
|
-
expect_lookup('a key with')
|
288
|
+
expect_lookup(' a key with . nested whitespace ')
|
281
289
|
expect(interpolator.interpolate("%{lookup(' a key with . nested whitespace ')}", lookup_invocation, true)).to eq('value for nested ws key')
|
282
290
|
end
|
283
291
|
|
284
292
|
it 'will not trim quoted key element' do
|
285
|
-
expect_lookup('a key with')
|
293
|
+
expect_lookup(' a key with ." untrimmed whitespace "')
|
286
294
|
expect(interpolator.interpolate("%{lookup(' a key with .\" untrimmed whitespace \"')}", lookup_invocation, true)).to eq('value for untrimmed ws key')
|
287
295
|
end
|
288
296
|
|
289
297
|
it 'will not trim spaces outside of quoted key element' do
|
290
|
-
expect_lookup('a key with')
|
298
|
+
expect_lookup(' a key with . " untrimmed whitespace " ')
|
291
299
|
expect(interpolator.interpolate("%{lookup(' a key with . \" untrimmed whitespace \" ')}", lookup_invocation, true)).to eq('value for untrimmed ws key')
|
292
300
|
end
|
293
301
|
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet_spec/files'
|
3
|
+
require 'puppet/pops'
|
4
|
+
require 'deep_merge/core'
|
5
|
+
|
6
|
+
module Puppet::Pops
|
7
|
+
module Lookup
|
8
|
+
describe 'The lookup API' do
|
9
|
+
include PuppetSpec::Files
|
10
|
+
|
11
|
+
let(:env_name) { 'spec' }
|
12
|
+
let(:code_dir) { Puppet[:environmentpath] }
|
13
|
+
let(:env_dir) { File.join(code_dir, env_name) }
|
14
|
+
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, 'modules')]) }
|
15
|
+
let(:node) { Puppet::Node.new('test', :environment => env) }
|
16
|
+
let(:compiler) { Puppet::Parser::Compiler.new(node) }
|
17
|
+
let(:scope) { compiler.topscope }
|
18
|
+
let(:invocation) { Invocation.new(scope) }
|
19
|
+
|
20
|
+
let(:code_dir_content) do
|
21
|
+
{
|
22
|
+
'hiera.yaml' => <<-YAML.unindent,
|
23
|
+
version: 5
|
24
|
+
YAML
|
25
|
+
'data' => {
|
26
|
+
'common.yaml' => <<-YAML.unindent
|
27
|
+
a: a (from global)
|
28
|
+
d: d (from global)
|
29
|
+
mod::e: mod::e (from global)
|
30
|
+
YAML
|
31
|
+
}
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:env_content) do
|
36
|
+
{
|
37
|
+
'hiera.yaml' => <<-YAML.unindent,
|
38
|
+
version: 5
|
39
|
+
YAML
|
40
|
+
'data' => {
|
41
|
+
'common.yaml' => <<-YAML.unindent
|
42
|
+
b: b (from environment)
|
43
|
+
d: d (from environment)
|
44
|
+
mod::f: mod::f (from environment)
|
45
|
+
YAML
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:mod_content) do
|
51
|
+
{
|
52
|
+
'hiera.yaml' => <<-YAML.unindent,
|
53
|
+
version: 5
|
54
|
+
YAML
|
55
|
+
'data' => {
|
56
|
+
'common.yaml' => <<-YAML.unindent
|
57
|
+
mod::c: mod::c (from module)
|
58
|
+
mod::e: mod::e (from module)
|
59
|
+
mod::f: mod::f (from module)
|
60
|
+
YAML
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:populated_env_dir) do
|
66
|
+
all_content = code_dir_content.merge(env_name => env_content.merge('modules' => { 'mod' => mod_content }))
|
67
|
+
dir_contained_in(code_dir, all_content)
|
68
|
+
all_content.keys.each { |key| PuppetSpec::Files.record_tmp(File.join(code_dir, key)) }
|
69
|
+
env_dir
|
70
|
+
end
|
71
|
+
|
72
|
+
before(:each) do
|
73
|
+
Puppet[:hiera_config] = File.join(code_dir, 'hiera.yaml')
|
74
|
+
Puppet.push_context(:loaders => Puppet::Pops::Loaders.new(env))
|
75
|
+
end
|
76
|
+
|
77
|
+
after(:each) do
|
78
|
+
Puppet.pop_context
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'when doing lookup' do
|
82
|
+
it 'finds data in global layer' do
|
83
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'finds data in environment layer' do
|
87
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('b (from environment)')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'global layer wins over environment layer' do
|
91
|
+
expect(Lookup.lookup('d', nil, 'not found', true, nil, invocation)).to eql('d (from global)')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'finds data in module layer' do
|
95
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('mod::c (from module)')
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'global layer wins over module layer' do
|
99
|
+
expect(Lookup.lookup('mod::e', nil, 'not found', true, nil, invocation)).to eql('mod::e (from global)')
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'environment layer wins over module layer' do
|
103
|
+
expect(Lookup.lookup('mod::f', nil, 'not found', true, nil, invocation)).to eql('mod::f (from environment)')
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with 'global_only' set to true in the invocation" do
|
107
|
+
let(:invocation) { Invocation.new(scope).set_global_only }
|
108
|
+
|
109
|
+
it 'finds data in global layer' do
|
110
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'does not find data in environment layer' do
|
114
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('not found')
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'does not find data in module layer' do
|
118
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('not found')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "with 'global_only' set to true in the lookup adapter" do
|
123
|
+
it 'finds data in global layer' do
|
124
|
+
invocation.lookup_adapter.set_global_only
|
125
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'does not find data in environment layer' do
|
129
|
+
invocation.lookup_adapter.set_global_only
|
130
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('not found')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'does not find data in module layer' do
|
134
|
+
invocation.lookup_adapter.set_global_only
|
135
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('not found')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'with subclassed lookup adpater' do
|
140
|
+
let(:other_dir) { tmpdir('other') }
|
141
|
+
let(:other_dir_content) do
|
142
|
+
{
|
143
|
+
'hiera.yaml' => <<-YAML.unindent,
|
144
|
+
version: 5
|
145
|
+
YAML
|
146
|
+
'data' => {
|
147
|
+
'common.yaml' => <<-YAML.unindent
|
148
|
+
a: a (from other global)
|
149
|
+
d: d (from other global)
|
150
|
+
mod::e: mod::e (from other global)
|
151
|
+
YAML
|
152
|
+
}
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
156
|
+
let(:populated_other_dir) do
|
157
|
+
dir_contained_in(other_dir, other_dir_content)
|
158
|
+
other_dir
|
159
|
+
end
|
160
|
+
|
161
|
+
before(:each) do
|
162
|
+
eval(<<-RUBY.unindent)
|
163
|
+
class SpecialLookupAdapter < LookupAdapter
|
164
|
+
def initialize(compiler)
|
165
|
+
super
|
166
|
+
set_global_only
|
167
|
+
set_global_hiera_config_path(File.join('#{populated_other_dir}', 'hiera.yaml'))
|
168
|
+
end
|
169
|
+
end
|
170
|
+
RUBY
|
171
|
+
end
|
172
|
+
|
173
|
+
after(:each) do
|
174
|
+
Puppet::Pops::Lookup.send(:remove_const, :SpecialLookupAdapter)
|
175
|
+
end
|
176
|
+
|
177
|
+
let(:other_invocation) { Invocation.new(scope, EMPTY_HASH, EMPTY_HASH, nil, SpecialLookupAdapter) }
|
178
|
+
|
179
|
+
it 'finds different data in global layer' do
|
180
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, other_invocation)).to eql('a (from other global)')
|
181
|
+
expect(Lookup.lookup('a', nil, nil, false, nil, invocation)).to eql('a (from global)')
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'does not find data in environment layer' do
|
185
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, other_invocation)).to eql('not found')
|
186
|
+
expect(Lookup.lookup('b', nil, 'not found', true, nil, invocation)).to eql('b (from environment)')
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'does not find data in module layer' do
|
190
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, other_invocation)).to eql('not found')
|
191
|
+
expect(Lookup.lookup('mod::c', nil, 'not found', true, nil, invocation)).to eql('mod::c (from module)')
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/pops'
|
4
|
+
|
5
|
+
module Puppet::Pops
|
6
|
+
describe 'MergeStrategy' do
|
7
|
+
context 'deep merge' do
|
8
|
+
it 'does not mutate the source of a merge' do
|
9
|
+
a = { 'a' => { 'b' => 'va' }, 'c' => 2 }
|
10
|
+
b = { 'a' => { 'b' => 'vb' }, 'b' => 3}
|
11
|
+
c = MergeStrategy.strategy(:deep).merge(a, b);
|
12
|
+
expect(a).to eql({ 'a' => { 'b' => 'va' }, 'c' => 2 })
|
13
|
+
expect(b).to eql({ 'a' => { 'b' => 'vb' }, 'b' => 3 })
|
14
|
+
expect(c).to eql({ 'a' => { 'b' => 'va' }, 'b' => 3, 'c' => 2 })
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|