puppet 4.8.2-x64-mingw32 → 4.9.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
         |