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
    
        data/locales/puppet.pot
    ADDED
    
    | @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            # SOME DESCRIPTIVE TITLE.
         | 
| 2 | 
            +
            # Copyright (C) 2017 Puppet, Inc.
         | 
| 3 | 
            +
            # This file is distributed under the same license as the Puppet automation framework package.
         | 
| 4 | 
            +
            # FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            #, fuzzy
         | 
| 7 | 
            +
            msgid ""
         | 
| 8 | 
            +
            msgstr ""
         | 
| 9 | 
            +
            "Project-Id-Version: Puppet automation framework 4.8.2-338-g562b302\n"
         | 
| 10 | 
            +
            "\n"
         | 
| 11 | 
            +
            "Report-Msgid-Bugs-To: https://tickets.puppetlabs.com\n"
         | 
| 12 | 
            +
            "POT-Creation-Date: 2017-01-25 09:32-0800\n"
         | 
| 13 | 
            +
            "PO-Revision-Date: 2017-01-25 09:32-0800\n"
         | 
| 14 | 
            +
            "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
         | 
| 15 | 
            +
            "Language-Team: LANGUAGE <LL@li.org>\n"
         | 
| 16 | 
            +
            "Language: \n"
         | 
| 17 | 
            +
            "MIME-Version: 1.0\n"
         | 
| 18 | 
            +
            "Content-Type: text/plain; charset=UTF-8\n"
         | 
| 19 | 
            +
            "Content-Transfer-Encoding: 8bit\n"
         | 
| 20 | 
            +
            "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            msgid "Apache 2 license; see COPYING"
         | 
| 23 | 
            +
            msgstr ""
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            msgid "Display Puppet help."
         | 
| 26 | 
            +
            msgstr ""
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            msgid "Display help about Puppet subcommands and their actions."
         | 
| 29 | 
            +
            msgstr ""
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            msgid "[<subcommand>] [<action>]"
         | 
| 32 | 
            +
            msgstr ""
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            msgid "Short help text for the specified subcommand or action."
         | 
| 35 | 
            +
            msgstr ""
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            msgid ""
         | 
| 38 | 
            +
            "      Get help for an action:\n"
         | 
| 39 | 
            +
            "\n"
         | 
| 40 | 
            +
            "      $ puppet help\n"
         | 
| 41 | 
            +
            msgstr ""
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            msgid "--version VERSION"
         | 
| 44 | 
            +
            msgstr ""
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            msgid "The version of the subcommand for which to show help."
         | 
| 47 | 
            +
            msgstr ""
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            msgid "Puppet help only takes two (optional) arguments: a subcommand and an action"
         | 
| 50 | 
            +
            msgstr ""
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            msgid "Version only makes sense when a Faces subcommand is given"
         | 
| 53 | 
            +
            msgstr ""
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            msgid "Legacy subcommands don't take actions"
         | 
| 56 | 
            +
            msgstr ""
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            msgid ""
         | 
| 59 | 
            +
            "Could not load help for the application #{applicationname}.\n"
         | 
| 60 | 
            +
            "Please check the error logs for more information.\n"
         | 
| 61 | 
            +
            "\n"
         | 
| 62 | 
            +
            "Detail: \"#{detail.message}\"\n"
         | 
| 63 | 
            +
            msgstr ""
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            msgid ""
         | 
| 66 | 
            +
            "Could not load help for the face #{facename}.\n"
         | 
| 67 | 
            +
            "Please check the error logs for more information.\n"
         | 
| 68 | 
            +
            "\n"
         | 
| 69 | 
            +
            "Detail: \"#{detail.message}\"\n"
         | 
| 70 | 
            +
            msgstr ""
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            msgid "\"Unable to load action #{actionname} from #{face}\""
         | 
| 73 | 
            +
            msgstr ""
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            msgid " (Deprecated)"
         | 
| 76 | 
            +
            msgstr ""
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            msgid "! Subcommand unavailable due to error. Check error logs."
         | 
| 79 | 
            +
            msgstr ""
         | 
    
        data/man/man5/puppet.conf.5
    CHANGED
    
    
| 
            File without changes
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            Puppet::Bindings.newbindings('backend::default') do
         | 
| 2 | 
            +
              # In the default bindings for this module
         | 
| 3 | 
            +
              bind {
         | 
| 4 | 
            +
                # bind its name to the 'puppet' environment data provider
         | 
| 5 | 
            +
                name         'special'
         | 
| 6 | 
            +
                in_multibind "puppet::path_based_data_provider_factories"
         | 
| 7 | 
            +
                to_instance "PuppetX::Backend::SpecialDataProviderFactory"
         | 
| 8 | 
            +
             }
         | 
| 9 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module PuppetX::Backend
         | 
| 2 | 
            +
              class SpecialDataProviderFactory < Puppet::Plugins::DataProviders::PathBasedDataProviderFactory
         | 
| 3 | 
            +
                def create(name, paths, parent_data_provider)
         | 
| 4 | 
            +
                  SpecialDataProvider.new(name, paths)
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def resolve_paths(datadir, declared_paths, paths, lookup_invocation)
         | 
| 8 | 
            +
                  paths
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              class SpecialDataProvider < Puppet::Plugins::DataProviders::PathBasedDataProvider
         | 
| 13 | 
            +
                def unchecked_lookup(key, lookup_invocation, merge)
         | 
| 14 | 
            +
                  value = {
         | 
| 15 | 
            +
                    'backend::test::param_a' => 'module data param_a is 1000',
         | 
| 16 | 
            +
                    'backend::test::param_b' => 'module data param_b is 2000',
         | 
| 17 | 
            +
                  }[key]
         | 
| 18 | 
            +
                  throw :no_such_key if value.nil?
         | 
| 19 | 
            +
                  value
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| @@ -19,6 +19,7 @@ module PuppetX::Helindbe | |
| 19 19 | 
             
                    'test::param_a' => 'env data param_a is 10',
         | 
| 20 20 | 
             
                    'test::param_b' => 'env data param_b is 20',
         | 
| 21 21 | 
             
                    # demo: this overrides a parameter for a class in the dataprovider module
         | 
| 22 | 
            +
                    'backend::test::param_c' => 'env data param_c is 3000',
         | 
| 22 23 | 
             
                    'dataprovider::test::param_c' => 'env data param_c is 300',
         | 
| 23 24 | 
             
                  }
         | 
| 24 25 | 
             
                end
         | 
    
        data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf
    RENAMED
    
    | 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| @@ -134,6 +134,92 @@ end | |
| 134 134 | 
             
                end
         | 
| 135 135 | 
             
              end
         | 
| 136 136 |  | 
| 137 | 
            +
              context 'from environment with pcore object types' do
         | 
| 138 | 
            +
                include PuppetSpec::Compiler
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                let!(:envdir) { Puppet[:environmentpath] }
         | 
| 141 | 
            +
                let(:env_name) { 'spec' }
         | 
| 142 | 
            +
                let(:dir_structure) {
         | 
| 143 | 
            +
                  {
         | 
| 144 | 
            +
                    'environment.conf' => <<-CONF,
         | 
| 145 | 
            +
                      rich_data = true
         | 
| 146 | 
            +
                    CONF
         | 
| 147 | 
            +
                    'modules' => {
         | 
| 148 | 
            +
                      'mod' => {
         | 
| 149 | 
            +
                        'types' => {
         | 
| 150 | 
            +
                          'streetaddress.pp' => <<-PUPPET,
         | 
| 151 | 
            +
                            type Mod::StreetAddress = Object[{
         | 
| 152 | 
            +
                              attributes => {
         | 
| 153 | 
            +
                                'street' => String,
         | 
| 154 | 
            +
                                'zipcode' => String,
         | 
| 155 | 
            +
                                'city' => String,
         | 
| 156 | 
            +
                              } 
         | 
| 157 | 
            +
                            }]
         | 
| 158 | 
            +
                          PUPPET
         | 
| 159 | 
            +
                          'address.pp' => <<-PUPPET,
         | 
| 160 | 
            +
                            type Mod::Address = Object[{
         | 
| 161 | 
            +
                              parent => Mod::StreetAddress,
         | 
| 162 | 
            +
                              attributes => {
         | 
| 163 | 
            +
                                'state' => String
         | 
| 164 | 
            +
                              } 
         | 
| 165 | 
            +
                            }]
         | 
| 166 | 
            +
                          PUPPET
         | 
| 167 | 
            +
                          'contact.pp' => <<-PUPPET,
         | 
| 168 | 
            +
                            type Mod::Contact = Object[{
         | 
| 169 | 
            +
                              attributes => {
         | 
| 170 | 
            +
                                'address' => Mod::Address,
         | 
| 171 | 
            +
                                'email' => String
         | 
| 172 | 
            +
                              }
         | 
| 173 | 
            +
                            }]
         | 
| 174 | 
            +
                          PUPPET
         | 
| 175 | 
            +
                        },
         | 
| 176 | 
            +
                        'manifests' => {
         | 
| 177 | 
            +
                          'init.pp' => <<-PUPPET,
         | 
| 178 | 
            +
                            define mod::person(Mod::Contact $contact) {
         | 
| 179 | 
            +
                              notify { $title: }
         | 
| 180 | 
            +
                              notify { $contact.address.street: }
         | 
| 181 | 
            +
                              notify { $contact.address.zipcode: }
         | 
| 182 | 
            +
                              notify { $contact.address.city: }
         | 
| 183 | 
            +
                              notify { $contact.address.state: }
         | 
| 184 | 
            +
                            }
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                            class mod {
         | 
| 187 | 
            +
                              mod::person { 'Test Person':
         | 
| 188 | 
            +
                                contact => Mod::Contact(
         | 
| 189 | 
            +
                                  Mod::Address('The Street 23', '12345', 'Some City', 'A State'),
         | 
| 190 | 
            +
                                  'test@example.com')
         | 
| 191 | 
            +
                              }
         | 
| 192 | 
            +
                            }
         | 
| 193 | 
            +
                          PUPPET
         | 
| 194 | 
            +
                        }
         | 
| 195 | 
            +
                      }
         | 
| 196 | 
            +
                    }
         | 
| 197 | 
            +
                  }
         | 
| 198 | 
            +
                }
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(envdir, env_name, 'modules')]) }
         | 
| 201 | 
            +
                let(:node) { Puppet::Node.new('test', :environment => env) }
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                before(:each) do
         | 
| 204 | 
            +
                  dir_contained_in(envdir, env_name => dir_structure)
         | 
| 205 | 
            +
                  PuppetSpec::Files.record_tmp(File.join(envdir, env_name))
         | 
| 206 | 
            +
                end
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                it 'can compile the catalog' do
         | 
| 209 | 
            +
                  compile_to_catalog('include mod', node)
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                it 'can apply the catalog' do
         | 
| 213 | 
            +
                  catalog = compile_to_catalog('include mod', node)
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                  Puppet[:environment] = env_name
         | 
| 216 | 
            +
                  apply = Puppet::Application[:apply]
         | 
| 217 | 
            +
                  apply.options[:catalog] = file_containing('manifest', catalog.to_pson)
         | 
| 218 | 
            +
                  expect { apply.run_command; exit(0) }.to exit_with(0)
         | 
| 219 | 
            +
                  expect(@logs.map(&:to_s)).to include('The Street 23')
         | 
| 220 | 
            +
                end
         | 
| 221 | 
            +
              end
         | 
| 222 | 
            +
             | 
| 137 223 | 
             
              it "applies a given file even when a directory environment is specified" do
         | 
| 138 224 | 
             
                manifest = file_containing("manifest.pp", "notice('it was applied')")
         | 
| 139 225 |  | 
| @@ -414,8 +500,8 @@ class amod::bad_type { | |
| 414 500 | 
             
                    apply.expects(:apply_catalog).with do |catalog|
         | 
| 415 501 | 
             
                      catalog.resource(:notify, 'rx')['message'].is_a?(Regexp)
         | 
| 416 502 | 
             
                      catalog.resource(:notify, 'bin')['message'].is_a?(Puppet::Pops::Types::PBinaryType::Binary)
         | 
| 417 | 
            -
                      catalog.resource(:notify, 'ver')['message'].is_a?( | 
| 418 | 
            -
                      catalog.resource(:notify, 'vrange')['message'].is_a?( | 
| 503 | 
            +
                      catalog.resource(:notify, 'ver')['message'].is_a?(SemanticPuppet::Version)
         | 
| 504 | 
            +
                      catalog.resource(:notify, 'vrange')['message'].is_a?(SemanticPuppet::VersionRange)
         | 
| 419 505 | 
             
                      catalog.resource(:notify, 'tspan')['message'].is_a?(Puppet::Pops::Time::Timespan)
         | 
| 420 506 | 
             
                      catalog.resource(:notify, 'tstamp')['message'].is_a?(Puppet::Pops::Time::Timestamp)
         | 
| 421 507 | 
             
                    end
         | 
| @@ -0,0 +1,155 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'puppet_spec/files'
         | 
| 3 | 
            +
            require 'puppet_spec/compiler'
         | 
| 4 | 
            +
            require 'deep_merge/core'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            describe 'lookup' do
         | 
| 7 | 
            +
              include PuppetSpec::Files
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              context 'with an environment' do
         | 
| 10 | 
            +
                let(:env_name) { 'spec' }
         | 
| 11 | 
            +
                let(:env_dir) { tmpdir('environments') }
         | 
| 12 | 
            +
                let(:environment_files) do
         | 
| 13 | 
            +
                  {
         | 
| 14 | 
            +
                    env_name => {
         | 
| 15 | 
            +
                      'modules' => {},
         | 
| 16 | 
            +
                      'hiera.yaml' => <<-YAML.unindent,
         | 
| 17 | 
            +
                        ---
         | 
| 18 | 
            +
                        version: 5
         | 
| 19 | 
            +
                        hierarchy:
         | 
| 20 | 
            +
                          - name: "Common"
         | 
| 21 | 
            +
                            data_hash: yaml_data
         | 
| 22 | 
            +
                            path: "common.yaml"
         | 
| 23 | 
            +
                        YAML
         | 
| 24 | 
            +
                      'data' => {
         | 
| 25 | 
            +
                        'common.yaml' => <<-YAML.unindent
         | 
| 26 | 
            +
                          ---
         | 
| 27 | 
            +
                          a: value a
         | 
| 28 | 
            +
                          mod_a::a: value mod_a::a (from environment)
         | 
| 29 | 
            +
                          mod_a::hash_a:
         | 
| 30 | 
            +
                            a: value mod_a::hash_a.a (from environment)
         | 
| 31 | 
            +
                          mod_a::hash_b:
         | 
| 32 | 
            +
                            a: value mod_a::hash_b.a (from environment)
         | 
| 33 | 
            +
                          lookup_options:
         | 
| 34 | 
            +
                            mod_a::hash_b:
         | 
| 35 | 
            +
                              merge: hash
         | 
| 36 | 
            +
                          YAML
         | 
| 37 | 
            +
                      }
         | 
| 38 | 
            +
                    },
         | 
| 39 | 
            +
                    'someother' => {
         | 
| 40 | 
            +
                    }
         | 
| 41 | 
            +
                  }
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                let(:app) { Puppet::Application[:lookup] }
         | 
| 45 | 
            +
                let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
         | 
| 46 | 
            +
                let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                let(:populated_env_dir) do
         | 
| 49 | 
            +
                  dir_contained_in(env_dir, environment_files)
         | 
| 50 | 
            +
                  env_dir
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                def lookup(key, options = {}, explain = false)
         | 
| 54 | 
            +
                  key = [key] unless key.is_a?(Array)
         | 
| 55 | 
            +
                  app.command_line.stubs(:args).returns(key)
         | 
| 56 | 
            +
                  if explain
         | 
| 57 | 
            +
                    app.options[:explain] = true
         | 
| 58 | 
            +
                    app.options[:render_as] = :s
         | 
| 59 | 
            +
                  else
         | 
| 60 | 
            +
                    app.options[:render_as] = :json
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                  options.each_pair { |k, v| app.options[k] = v }
         | 
| 63 | 
            +
                  capture = StringIO.new
         | 
| 64 | 
            +
                  saved_stdout = $stdout
         | 
| 65 | 
            +
                  begin
         | 
| 66 | 
            +
                    $stdout = capture
         | 
| 67 | 
            +
                    expect { app.run_command }.to exit_with(0)
         | 
| 68 | 
            +
                  ensure
         | 
| 69 | 
            +
                    $stdout = saved_stdout
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                  out = capture.string.strip
         | 
| 72 | 
            +
                  if explain
         | 
| 73 | 
            +
                    out
         | 
| 74 | 
            +
                  else
         | 
| 75 | 
            +
                    out.empty? ? nil : JSON.parse("[#{out}]")[0]
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def explain(key, options = {})
         | 
| 80 | 
            +
                  lookup(key, options, true)
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                around(:each) do |example|
         | 
| 84 | 
            +
                  Puppet.override(:environments => environments, :current_environment => env) do
         | 
| 85 | 
            +
                    example.run
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                it 'finds data in the environment' do
         | 
| 90 | 
            +
                  expect(lookup('a')).to eql('value a')
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                context 'configured with the wrong environment' do
         | 
| 94 | 
            +
                  let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
         | 
| 95 | 
            +
                  it 'does not find data in non-existing environment' do
         | 
| 96 | 
            +
                    Puppet.override(:environments => environments, :current_environment => 'someother') do
         | 
| 97 | 
            +
                      expect(lookup('a', {}, true)).to match(/did not find a value for the name 'a'/)
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
                  end
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                context 'and a module' do
         | 
| 103 | 
            +
                  let(:mod_a_files) do
         | 
| 104 | 
            +
                    {
         | 
| 105 | 
            +
                      'mod_a' => {
         | 
| 106 | 
            +
                        'data' => {
         | 
| 107 | 
            +
                          'common.yaml' => <<-YAML.unindent
         | 
| 108 | 
            +
                            ---
         | 
| 109 | 
            +
                            mod_a::a: value mod_a::a (from mod_a)
         | 
| 110 | 
            +
                            mod_a::b: value mod_a::b (from mod_a)
         | 
| 111 | 
            +
                            mod_a::hash_a:
         | 
| 112 | 
            +
                              a: value mod_a::hash_a.a (from mod_a)
         | 
| 113 | 
            +
                              b: value mod_a::hash_a.b (from mod_a)
         | 
| 114 | 
            +
                            mod_a::hash_b:
         | 
| 115 | 
            +
                              a: value mod_a::hash_b.a (from mod_a)
         | 
| 116 | 
            +
                              b: value mod_a::hash_b.b (from mod_a)
         | 
| 117 | 
            +
                            mod_a::interpolated: "-- %{lookup('mod_a::a')} --"
         | 
| 118 | 
            +
                            mod_a::a_a: "-- %{lookup('mod_a::hash_a.a')} --"
         | 
| 119 | 
            +
                            mod_a::a_b: "-- %{lookup('mod_a::hash_a.b')} --"
         | 
| 120 | 
            +
                            mod_a::b_a: "-- %{lookup('mod_a::hash_b.a')} --"
         | 
| 121 | 
            +
                            mod_a::b_b: "-- %{lookup('mod_a::hash_b.b')} --"
         | 
| 122 | 
            +
                            'mod_a::a.quoted.key': 'value mod_a::a.quoted.key (from mod_a)'
         | 
| 123 | 
            +
                            YAML
         | 
| 124 | 
            +
                        },
         | 
| 125 | 
            +
                        'hiera.yaml' => <<-YAML.unindent,
         | 
| 126 | 
            +
                          ---
         | 
| 127 | 
            +
                          version: 5
         | 
| 128 | 
            +
                          hierarchy:
         | 
| 129 | 
            +
                            - name: "Common"
         | 
| 130 | 
            +
                              data_hash: yaml_data
         | 
| 131 | 
            +
                              path: "common.yaml"
         | 
| 132 | 
            +
                          YAML
         | 
| 133 | 
            +
                      }
         | 
| 134 | 
            +
                    }
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                  let(:populated_env_dir) do
         | 
| 138 | 
            +
                    dir_contained_in(env_dir, DeepMerge.deep_merge!(environment_files, env_name => { 'modules' => mod_a_files }))
         | 
| 139 | 
            +
                    env_dir
         | 
| 140 | 
            +
                  end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                  it 'finds data in the module' do
         | 
| 143 | 
            +
                    expect(lookup('mod_a::b')).to eql('value mod_a::b (from mod_a)')
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  it 'finds quoted keys in the module' do
         | 
| 147 | 
            +
                    expect(lookup('"mod_a::a.quoted.key"')).to eql('value mod_a::a.quoted.key (from mod_a)')
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                  it 'merges hashes from environment and module when merge strategy hash is used' do
         | 
| 151 | 
            +
                    expect(lookup('mod_a::hash_a', :merge => 'hash')).to eql({'a' => 'value mod_a::hash_a.a (from environment)', 'b' => 'value mod_a::hash_a.b (from mod_a)'})
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
              end
         | 
| 155 | 
            +
            end
         |