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
| @@ -273,7 +273,7 @@ module Validation | |
| 273 273 | 
             
              #
         | 
| 274 274 | 
             
              class DiagnosticFormatter
         | 
| 275 275 | 
             
                def format diagnostic
         | 
| 276 | 
            -
                  "#{ | 
| 276 | 
            +
                  "#{format_location(diagnostic)} #{format_severity(diagnostic)}#{format_message(diagnostic)}"
         | 
| 277 277 | 
             
                end
         | 
| 278 278 |  | 
| 279 279 | 
             
                def format_message diagnostic
         | 
| @@ -295,8 +295,12 @@ class Checker4_0 < Evaluator::LiteralEvaluator | |
| 295 295 |  | 
| 296 296 | 
             
              def check_CaseExpression(o)
         | 
| 297 297 | 
             
                rvalue(o.test)
         | 
| 298 | 
            -
                # There  | 
| 299 | 
            -
                 | 
| 298 | 
            +
                # There can only be one LiteralDefault case option value
         | 
| 299 | 
            +
                defaults = o.options.values.select {|v| v.is_a?(Model::LiteralDefault) }
         | 
| 300 | 
            +
                unless defaults.size <= 1
         | 
| 301 | 
            +
                  # Flag the second default as 'unreachable'
         | 
| 302 | 
            +
                  acceptor.accept(Issues::DUPLICATE_DEFAULT, defaults[1], :container => o)
         | 
| 303 | 
            +
                end
         | 
| 300 304 | 
             
              end
         | 
| 301 305 |  | 
| 302 306 | 
             
              def check_CaseOption(o)
         | 
| @@ -659,6 +663,12 @@ class Checker4_0 < Evaluator::LiteralEvaluator | |
| 659 663 |  | 
| 660 664 | 
             
              def check_SelectorExpression(o)
         | 
| 661 665 | 
             
                rvalue(o.left_expr)
         | 
| 666 | 
            +
                # There can only be one LiteralDefault case option value
         | 
| 667 | 
            +
                defaults = o.selectors.select {|v| v.matching_expr.is_a?(Model::LiteralDefault) }
         | 
| 668 | 
            +
                unless defaults.size <= 1
         | 
| 669 | 
            +
                  # Flag the second default as 'unreachable'
         | 
| 670 | 
            +
                  acceptor.accept(Issues::DUPLICATE_DEFAULT, defaults[1].matching_expr, :container => o)
         | 
| 671 | 
            +
                end
         | 
| 662 672 | 
             
              end
         | 
| 663 673 |  | 
| 664 674 | 
             
              def check_SelectorEntry(o)
         | 
| @@ -28,6 +28,7 @@ class ValidatorFactory_4_0 < Factory | |
| 28 28 | 
             
                p[Issues::FUTURE_RESERVED_WORD]          = :deprecation
         | 
| 29 29 |  | 
| 30 30 | 
             
                p[Issues::DUPLICATE_KEY]                 = Puppet[:strict] == :off ? :ignore : Puppet[:strict]
         | 
| 31 | 
            +
                p[Issues::DUPLICATE_DEFAULT]             = Puppet[:strict] == :off ? :ignore : Puppet[:strict]
         | 
| 31 32 | 
             
                p[Issues::NAME_WITH_HYPHEN]              = :error
         | 
| 32 33 | 
             
                p[Issues::EMPTY_RESOURCE_SPECIALIZATION] = :ignore
         | 
| 33 34 | 
             
                p
         | 
    
        data/lib/puppet/pops/visitor.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            module Puppet::Pops
         | 
| 1 2 | 
             
            # A Visitor performs delegation to a given receiver based on the configuration of the Visitor.
         | 
| 2 3 | 
             
            # A new visitor is created with a given receiver, a method prefix, min, and max argument counts.
         | 
| 3 4 | 
             
            # e.g.
         | 
| @@ -9,7 +10,7 @@ | |
| 9 10 | 
             
            # Raises RuntimeError if there are too few or too many arguments, or if the receiver is not
         | 
| 10 11 | 
             
            # configured to handle a given visiting object.
         | 
| 11 12 | 
             
            #
         | 
| 12 | 
            -
            class  | 
| 13 | 
            +
            class Visitor
         | 
| 13 14 | 
             
              attr_reader :receiver, :message, :min_args, :max_args, :cache
         | 
| 14 15 | 
             
              def initialize(receiver, message, min_args=0, max_args=nil)
         | 
| 15 16 | 
             
                raise ArgumentError.new("min_args must be >= 0") if min_args < 0
         | 
| @@ -27,8 +28,7 @@ class Puppet::Pops::Visitor | |
| 27 28 | 
             
                visit_this(@receiver, thing, args)
         | 
| 28 29 | 
             
              end
         | 
| 29 30 |  | 
| 30 | 
            -
               | 
| 31 | 
            -
              NO_ARGS = [].freeze
         | 
| 31 | 
            +
              NO_ARGS = EMPTY_ARRAY
         | 
| 32 32 |  | 
| 33 33 | 
             
              # Visit an explicit receiver
         | 
| 34 34 | 
             
              def visit_this(receiver, thing, args)
         | 
| @@ -92,3 +92,4 @@ class Puppet::Pops::Visitor | |
| 92 92 | 
             
              end
         | 
| 93 93 |  | 
| 94 94 | 
             
            end
         | 
| 95 | 
            +
            end
         | 
| @@ -116,7 +116,8 @@ Puppet::Type.type(:mcx).provide :mcxcontent, :parent => Puppet::Provider do | |
| 116 116 | 
             
                  dscl 'localhost', '-mcxdelete', ds_path
         | 
| 117 117 | 
             
                end
         | 
| 118 118 |  | 
| 119 | 
            -
                 | 
| 119 | 
            +
                # val being passed in is resource[:content] which should be UTF-8
         | 
| 120 | 
            +
                tmp = Tempfile.new('puppet_mcx', :encoding => Encoding::UTF_8)
         | 
| 120 121 | 
             
                begin
         | 
| 121 122 | 
             
                  tmp << val
         | 
| 122 123 | 
             
                  tmp.flush
         | 
| @@ -288,5 +288,20 @@ class Puppet::Provider::NameService < Puppet::Provider | |
| 288 288 | 
             
                  raise Puppet::Error, "Could not set #{param} on #{@resource.class.name}[#{@resource.name}]: #{detail}", detail.backtrace
         | 
| 289 289 | 
             
                end
         | 
| 290 290 | 
             
              end
         | 
| 291 | 
            +
             | 
| 292 | 
            +
              # From overriding Puppet::Property#insync? Ruby Etc::getpwnam < 2.1.0 always
         | 
| 293 | 
            +
              # returns a struct with binary encoded string values, and >= 2.1.0 will return
         | 
| 294 | 
            +
              # binary encoded strings for values incompatible with current locale charset,
         | 
| 295 | 
            +
              # or Encoding.default_external if compatible. Compare a "should" value with
         | 
| 296 | 
            +
              # encoding of "current" value, to avoid unnecessary property syncs and
         | 
| 297 | 
            +
              # comparison of strings with different encodings. (PUP-6777)
         | 
| 298 | 
            +
              #
         | 
| 299 | 
            +
              # return basic string comparison after re-encoding (same as
         | 
| 300 | 
            +
              # Puppet::Property#property_matches)
         | 
| 301 | 
            +
              def comments_insync?(current, should)
         | 
| 302 | 
            +
                # we're only doing comparison here so don't mutate the string
         | 
| 303 | 
            +
                desired = should[0].to_s.dup
         | 
| 304 | 
            +
                current == desired.force_encoding(current.encoding)
         | 
| 305 | 
            +
              end
         | 
| 291 306 | 
             
            end
         | 
| 292 307 |  | 
| @@ -44,7 +44,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag | |
| 44 44 | 
             
              def self.installapp(source, name, orig_source)
         | 
| 45 45 | 
             
                appname = File.basename(source);
         | 
| 46 46 | 
             
                ditto "--rsrc", source, "/Applications/#{appname}"
         | 
| 47 | 
            -
                 | 
| 47 | 
            +
                Puppet::FileSystem.open("/var/db/.puppet_appdmg_installed_#{name}", nil, "w:UTF-8") do |t|
         | 
| 48 48 | 
             
                  t.print "name: '#{name}'\n"
         | 
| 49 49 | 
             
                  t.print "source: '#{orig_source}'\n"
         | 
| 50 50 | 
             
                end
         | 
| @@ -28,7 +28,7 @@ Puppet::Type.type(:package).provide :dnf, :parent => :yum do | |
| 28 28 | 
             
                  end
         | 
| 29 29 | 
             
              end
         | 
| 30 30 |  | 
| 31 | 
            -
              defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => ['22', '23', '24']
         | 
| 31 | 
            +
              defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => ['22', '23', '24', '25']
         | 
| 32 32 |  | 
| 33 33 | 
             
              def self.update_command
         | 
| 34 34 | 
             
                # In DNF, update is deprecated for upgrade
         | 
| @@ -23,7 +23,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d | |
| 23 23 |  | 
| 24 24 | 
             
              confine :osfamily => :solaris
         | 
| 25 25 |  | 
| 26 | 
            -
              defaultfor :osfamily => :solaris, :kernelrelease => '5.11'
         | 
| 26 | 
            +
              defaultfor :osfamily => :solaris, :kernelrelease => ['5.11', '5.12']
         | 
| 27 27 |  | 
| 28 28 | 
             
              def self.instances
         | 
| 29 29 | 
             
                pkg(:list, '-Hv').split("\n").map{|l| new(parse_line(l))}
         | 
| @@ -62,7 +62,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag | |
| 62 62 | 
             
              def self.installpkg(source, name, orig_source)
         | 
| 63 63 | 
             
                installer "-pkg", source, "-target", "/"
         | 
| 64 64 | 
             
                # Non-zero exit status will throw an exception.
         | 
| 65 | 
            -
                 | 
| 65 | 
            +
                Puppet::FileSystem.open("/var/db/.puppet_pkgdmg_installed_#{name}", nil, "w:UTF-8") do |t|
         | 
| 66 66 | 
             
                  t.print "name: '#{name}'\n"
         | 
| 67 67 | 
             
                  t.print "source: '#{orig_source}'\n"
         | 
| 68 68 | 
             
                end
         | 
| @@ -101,7 +101,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr | |
| 101 101 | 
             
                #NOTE: Prior to a fix for issue 1243, this method potentially returned a cached value
         | 
| 102 102 | 
             
                #IF YOU CALL THIS METHOD, IT WILL CALL RPM
         | 
| 103 103 | 
             
                #Use get(:property) to check if cached values are available
         | 
| 104 | 
            -
                cmd = ["-q",  @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", self.class::NEVRA_FORMAT]
         | 
| 104 | 
            +
                cmd = ["-q",  @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "'#{self.class::NEVRA_FORMAT}'"]
         | 
| 105 105 |  | 
| 106 106 | 
             
                begin
         | 
| 107 107 | 
             
                  output = rpm(*cmd)
         | 
| @@ -131,7 +131,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr | |
| 131 131 | 
             
                  @resource.fail "RPMs must specify a package source"
         | 
| 132 132 | 
             
                end
         | 
| 133 133 |  | 
| 134 | 
            -
                cmd = [command(:rpm), "-q", "--qf", self.class::NEVRA_FORMAT, "-p", source]
         | 
| 134 | 
            +
                cmd = [command(:rpm), "-q", "--qf", "'#{self.class::NEVRA_FORMAT}'", "-p", source]
         | 
| 135 135 | 
             
                h = self.class.nevra_to_hash(execfail(cmd, Puppet::Error))
         | 
| 136 136 | 
             
                h[:ensure]
         | 
| 137 137 | 
             
              end
         | 
| @@ -80,7 +80,7 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do | |
| 80 80 | 
             
                when :maintenance, :degraded
         | 
| 81 81 | 
             
                  [command(:adm), :clear, @resource[:name]]
         | 
| 82 82 | 
             
                else
         | 
| 83 | 
            -
                  [command(:adm), :enable, "- | 
| 83 | 
            +
                  [command(:adm), :enable, "-rs", @resource[:name]]
         | 
| 84 84 | 
             
                end
         | 
| 85 85 | 
             
              end
         | 
| 86 86 |  | 
| @@ -135,8 +135,8 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do | |
| 135 135 | 
             
                  states = service_states
         | 
| 136 136 | 
             
                  state = states[1] == "-" ? states[0] : states[1]
         | 
| 137 137 | 
             
                rescue Puppet::ExecutionFailure
         | 
| 138 | 
            -
                   | 
| 139 | 
            -
                  return : | 
| 138 | 
            +
                  debug "Could not get status on service #{self.name} #{$!}"
         | 
| 139 | 
            +
                  return :absent
         | 
| 140 140 | 
             
                end
         | 
| 141 141 |  | 
| 142 142 | 
             
                case state
         | 
| @@ -22,6 +22,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do | |
| 22 22 | 
             
              defaultfor :osfamily => :redhat, :operatingsystemmajrelease => "7"
         | 
| 23 23 | 
             
              defaultfor :osfamily => :redhat, :operatingsystem => :fedora
         | 
| 24 24 | 
             
              defaultfor :osfamily => :suse
         | 
| 25 | 
            +
              defaultfor :osfamily => :coreos
         | 
| 25 26 | 
             
              defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => "8"
         | 
| 26 27 | 
             
              defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10","16.04","16.10"]
         | 
| 27 28 | 
             
              defaultfor :operatingsystem => :cumuluslinux, :operatingsystemmajrelease => ["3"]
         | 
| @@ -29,7 +30,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do | |
| 29 30 | 
             
              def self.instances
         | 
| 30 31 | 
             
                i = []
         | 
| 31 32 | 
             
                output = systemctl('list-unit-files', '--type', 'service', '--full', '--all',  '--no-pager')
         | 
| 32 | 
            -
                output.scan(/^(\S+)\s+(disabled|enabled|masked)\s*$/i).each do |m|
         | 
| 33 | 
            +
                output.scan(/^(\S+)\s+(disabled|enabled|masked|indirect)\s*$/i).each do |m|
         | 
| 33 34 | 
             
                  i << new(:name => m[0])
         | 
| 34 35 | 
             
                end
         | 
| 35 36 | 
             
                return i
         | 
| @@ -82,6 +83,9 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do | |
| 82 83 | 
             
                # We only return :mask if we're trying to mask the service. This prevents
         | 
| 83 84 | 
             
                # flapping when simply trying to disable a masked service.
         | 
| 84 85 | 
             
                return :mask if (@resource[:enable] == :mask) && (output == 'masked')
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                # The indirect state indicates that the unit is not enabled.
         | 
| 88 | 
            +
                return :false if output == 'indirect'
         | 
| 85 89 | 
             
                return :true if (code == 0)
         | 
| 86 90 | 
             
                if (output.empty?) && (code > 0) && (Facter.value(:osfamily).downcase == 'debian')
         | 
| 87 91 | 
             
                  ret = debian_enabled?
         | 
| @@ -622,6 +622,7 @@ Puppet::Type.type(:user).provide :directoryservice do | |
| 622 622 |  | 
| 623 623 | 
             
              # This is a simple wrapper method for writing values to a file.
         | 
| 624 624 | 
             
              def write_to_file(filename, value)
         | 
| 625 | 
            +
                Puppet.deprecation_warning("Puppet::Type.type(:user).provider(:directoryservice).write_to_file is deprecated and will be removed in Puppet 5.")
         | 
| 625 626 | 
             
                begin
         | 
| 626 627 | 
             
                  File.open(filename, 'w') { |f| f.write(value)}
         | 
| 627 628 | 
             
                rescue Errno::EACCES => detail
         | 
| @@ -12,6 +12,7 @@ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd, :source => | |
| 12 12 | 
             
              options :home, :flag => "-d", :method => :dir
         | 
| 13 13 | 
             
              options :comment, :method => :gecos
         | 
| 14 14 | 
             
              options :groups, :flag => "-G"
         | 
| 15 | 
            +
              options :shell, :flag => "-s"
         | 
| 15 16 | 
             
              options :roles, :flag => "-R"
         | 
| 16 17 | 
             
              options :auths, :flag => "-A"
         | 
| 17 18 | 
             
              options :profiles, :flag => "-P"
         | 
| @@ -26,8 +27,22 @@ Puppet::Type.type(:user).provide :user_role_add, :parent => :useradd, :source => | |
| 26 27 | 
             
                value !~ /\s/
         | 
| 27 28 | 
             
              end
         | 
| 28 29 |  | 
| 30 | 
            +
              def shell=(value)
         | 
| 31 | 
            +
                check_valid_shell
         | 
| 32 | 
            +
                set("shell", value)
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 29 35 | 
             
              has_features :manages_homedir, :allows_duplicates, :manages_solaris_rbac, :manages_passwords, :manages_password_age, :manages_shell
         | 
| 30 36 |  | 
| 37 | 
            +
              def check_valid_shell
         | 
| 38 | 
            +
                unless File.exists?(@resource.should(:shell))
         | 
| 39 | 
            +
                  raise(Puppet::Error, "Shell #{@resource.should(:shell)} must exist")
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
                unless File.executable?(@resource.should(:shell).to_s)
         | 
| 42 | 
            +
                  raise(Puppet::Error, "Shell #{@resource.should(:shell)} must be executable")
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 31 46 | 
             
              #must override this to hand the keyvalue pairs
         | 
| 32 47 | 
             
              def add_properties
         | 
| 33 48 | 
             
                cmd = []
         | 
| @@ -4,7 +4,7 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do | |
| 4 4 | 
             
              desc <<-EOD
         | 
| 5 5 | 
             
                Manage yum repo configurations by parsing yum INI configuration files.
         | 
| 6 6 |  | 
| 7 | 
            -
                 | 
| 7 | 
            +
                ### Fetching instances
         | 
| 8 8 |  | 
| 9 9 | 
             
                When fetching repo instances, directory entries in '/etc/yum/repos.d',
         | 
| 10 10 | 
             
                '/etc/yum.repos.d', and the directory optionally specified by the reposdir
         | 
| @@ -12,7 +12,7 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do | |
| 12 12 | 
             
                will be ignored. In addition, all sections in '/etc/yum.conf' aside from
         | 
| 13 13 | 
             
                'main' will be created as sections.
         | 
| 14 14 |  | 
| 15 | 
            -
                 | 
| 15 | 
            +
                ### Storing instances
         | 
| 16 16 |  | 
| 17 17 | 
             
                When creating a new repository, a new section will be added in the first
         | 
| 18 18 | 
             
                yum repo directory that exists. The custom directory specified by the
         | 
| @@ -263,7 +263,10 @@ Puppet::Type.type(:zone).provide(:solaris) do | |
| 263 263 |  | 
| 264 264 | 
             
                  unless Puppet::FileSystem.exist?(sysidcfg)
         | 
| 265 265 | 
             
                    begin
         | 
| 266 | 
            -
                       | 
| 266 | 
            +
                      # For compatibility reasons use System encoding for this OS file
         | 
| 267 | 
            +
                      # the manifest string is UTF-8 so this could result in conversion errors
         | 
| 268 | 
            +
                      # which should propagate to users
         | 
| 269 | 
            +
                      Puppet::FileSystem.open(sysidcfg, 0600, "w:#{Encoding.default_external.name}") do |f|
         | 
| 267 270 | 
             
                        f.puts cfg
         | 
| 268 271 | 
             
                      end
         | 
| 269 272 | 
             
                    rescue => detail
         | 
| @@ -41,7 +41,7 @@ An indirector has five methods, which are mapped into HTTP verbs for the REST in | |
| 41 41 | 
             
            * `find(key)` - get a single value (mapped to GET or POST with a singular endpoint)
         | 
| 42 42 | 
             
            * `search(key)` - get a list of matching values (mapped to GET with a plural endpoint)
         | 
| 43 43 | 
             
            * `head(key)` - return true if the key exists (mapped to HEAD)
         | 
| 44 | 
            -
            * `destroy(key)` - remove the key  | 
| 44 | 
            +
            * `destroy(key)` - remove the key and value (mapped to DELETE)
         | 
| 45 45 | 
             
            * `save(instance)` - write the instance to the store, using the instance's name as the key (mapped to PUT)
         | 
| 46 46 |  | 
| 47 47 | 
             
            These methods are available via the `indirection` class method on the indirected classes.  For example:
         | 
    
        data/lib/puppet/resource.rb
    CHANGED
    
    | @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            require 'puppet'
         | 
| 2 2 | 
             
            require 'puppet/util/tagging'
         | 
| 3 3 | 
             
            require 'puppet/parameter'
         | 
| 4 | 
            -
            require 'puppet/data_providers'
         | 
| 5 4 |  | 
| 6 5 | 
             
            # The simplest resource class.  Eventually it will function as the
         | 
| 7 6 | 
             
            # base class for all resource-like behaviour.
         | 
| @@ -45,7 +44,7 @@ class Puppet::Resource | |
| 45 44 | 
             
                  raise Puppet::Error, 'Unable to deserialize non-Data type parameters unless a deserializer is provided' unless json_deserializer
         | 
| 46 45 | 
             
                  reader = json_deserializer.reader
         | 
| 47 46 | 
             
                  ext_params.each do |param, value|
         | 
| 48 | 
            -
                    reader.re_initialize( | 
| 47 | 
            +
                    reader.re_initialize(value)
         | 
| 49 48 | 
             
                    resource[param] = json_deserializer.read
         | 
| 50 49 | 
             
                  end
         | 
| 51 50 | 
             
                end
         | 
| @@ -104,7 +103,7 @@ class Puppet::Resource | |
| 104 103 | 
             
                    writer.clear_io
         | 
| 105 104 | 
             
                    json_serializer.write(ext_params[key])
         | 
| 106 105 | 
             
                    writer.finish
         | 
| 107 | 
            -
                    ext_params[key] = writer.to_a | 
| 106 | 
            +
                    ext_params[key] = writer.to_a
         | 
| 108 107 | 
             
                  end
         | 
| 109 108 | 
             
                  data['ext_parameters'] = ext_params
         | 
| 110 109 | 
             
                end
         | 
| @@ -426,8 +426,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph | |
| 426 426 | 
             
                if resources = data['resources']
         | 
| 427 427 | 
             
                  # TODO: The deserializer needs a loader in order to deserialize types defined using the puppet language.
         | 
| 428 428 | 
             
                  json_deserializer = nil
         | 
| 429 | 
            -
                  if  | 
| 430 | 
            -
                    json_deserializer = Puppet::Pops::Serialization::Deserializer.new( | 
| 429 | 
            +
                  if resources.any? { |res| res.has_key?('ext_parameters') }
         | 
| 430 | 
            +
                    json_deserializer = Puppet::Pops::Serialization::Deserializer.new(
         | 
| 431 | 
            +
                        Puppet::Pops::Serialization::JSON::Reader.new([]),
         | 
| 432 | 
            +
                        Puppet::Pops::Loaders.catalog_loader)
         | 
| 431 433 | 
             
                  end
         | 
| 432 434 | 
             
                  result.add_resource(*resources.collect do |res|
         | 
| 433 435 | 
             
                    Puppet::Resource.from_data_hash(res, json_deserializer)
         | 
| @@ -536,7 +538,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph | |
| 536 538 |  | 
| 537 539 | 
             
              # Store the classes in the classfile.
         | 
| 538 540 | 
             
              def write_class_file
         | 
| 539 | 
            -
                 | 
| 541 | 
            +
                # classfile paths may contain UTF-8
         | 
| 542 | 
            +
                # https://docs.puppet.com/puppet/latest/reference/configuration.html#classfile
         | 
| 543 | 
            +
                classfile = Puppet.settings.setting(:classfile)
         | 
| 544 | 
            +
                Puppet::FileSystem.open(classfile.value, classfile.mode.to_i(8), "w:UTF-8") do |f|
         | 
| 540 545 | 
             
                  f.puts classes.join("\n")
         | 
| 541 546 | 
             
                end
         | 
| 542 547 | 
             
              rescue => detail
         | 
| @@ -545,7 +550,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph | |
| 545 550 |  | 
| 546 551 | 
             
              # Store the list of resources we manage
         | 
| 547 552 | 
             
              def write_resource_file
         | 
| 548 | 
            -
                 | 
| 553 | 
            +
                # resourcefile contains resources that may be UTF-8 names
         | 
| 554 | 
            +
                # https://docs.puppet.com/puppet/latest/reference/configuration.html#resourcefile
         | 
| 555 | 
            +
                resourcefile = Puppet.settings.setting(:resourcefile)
         | 
| 556 | 
            +
                Puppet::FileSystem.open(resourcefile.value, resourcefile.mode.to_i(8), "w:UTF-8") do |f|
         | 
| 549 557 | 
             
                  to_print = resources.map do |resource|
         | 
| 550 558 | 
             
                    next unless resource.managed?
         | 
| 551 559 | 
             
                    if resource.name_var
         | 
    
        data/lib/puppet/resource/type.rb
    CHANGED
    
    | @@ -545,11 +545,11 @@ class Puppet::Resource::Type | |
| 545 545 | 
             
              def create_params_struct
         | 
| 546 546 | 
             
                arg_types = argument_types
         | 
| 547 547 | 
             
                type_factory = Puppet::Pops::Types::TypeFactory
         | 
| 548 | 
            -
                members = { type_factory.optional(type_factory.string( | 
| 548 | 
            +
                members = { type_factory.optional(type_factory.string(NAME)) =>  type_factory.any }
         | 
| 549 549 |  | 
| 550 550 | 
             
                if application?
         | 
| 551 551 | 
             
                  resource_type = type_factory.type_type(type_factory.resource)
         | 
| 552 | 
            -
                  members[type_factory.optional(type_factory.string( | 
| 552 | 
            +
                  members[type_factory.optional(type_factory.string(NODES))] = type_factory.hash_of(type_factory.variant(
         | 
| 553 553 | 
             
                      resource_type, type_factory.array_of(resource_type)), type_factory.type_type(type_factory.resource('node')))
         | 
| 554 554 | 
             
                end
         | 
| 555 555 |  | 
| @@ -559,7 +559,7 @@ class Puppet::Resource::Type | |
| 559 559 | 
             
                end
         | 
| 560 560 |  | 
| 561 561 | 
             
                arguments.each_pair do |name, default|
         | 
| 562 | 
            -
                  key_type = type_factory.string( | 
| 562 | 
            +
                  key_type = type_factory.string(name.to_s)
         | 
| 563 563 | 
             
                  key_type = type_factory.optional(key_type) unless default.nil?
         | 
| 564 564 |  | 
| 565 565 | 
             
                  arg_type = arg_types[name]
         | 
    
        data/lib/puppet/settings.rb
    CHANGED
    
    | @@ -636,7 +636,7 @@ class Puppet::Settings | |
| 636 636 | 
             
                # because multiple sections could set the same value
         | 
| 637 637 | 
             
                # and I'm too lazy to only set the metadata once.
         | 
| 638 638 | 
             
                if @configuration_file
         | 
| 639 | 
            -
                  searchpath(nil, preferred_run_mode). | 
| 639 | 
            +
                  searchpath(nil, preferred_run_mode).reverse_each do |source|
         | 
| 640 640 | 
             
                    if source.type == :section && section = @configuration_file.sections[source.name]
         | 
| 641 641 | 
             
                      apply_metadata_from_section(section)
         | 
| 642 642 | 
             
                    end
         | 
| @@ -25,7 +25,8 @@ class Puppet::Settings::ConfigFile | |
| 25 25 | 
             
                  allowed_section_names << 'main' unless allowed_section_names.include?('main')
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 | 
            -
                 | 
| 28 | 
            +
                # in Ruby 1.9.3 strings are not UTF-8 by default, so ensure text is treated properly
         | 
| 29 | 
            +
                ini = Puppet::Settings::IniFile.parse(StringIO.new(text).set_encoding(Encoding::UTF_8))
         | 
| 29 30 | 
             
                unique_sections_in(ini, file, allowed_section_names).each do |section_name|
         | 
| 30 31 | 
             
                  section = Section.new(section_name.to_sym)
         | 
| 31 32 | 
             
                  result.with_section(section)
         | 
| @@ -4,6 +4,12 @@ class Puppet::Settings::DirectorySetting < Puppet::Settings::FileSetting | |
| 4 4 | 
             
              end
         | 
| 5 5 |  | 
| 6 6 | 
             
              # @api private
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # @param option [String] Extra file operation mode information to use
         | 
| 9 | 
            +
              #   (defaults to read-only mode 'r')
         | 
| 10 | 
            +
              #   This is the standard mechanism Ruby uses in the IO class, and therefore
         | 
| 11 | 
            +
              #   encoding may be explicitly like fmode : encoding or fmode : "BOM|UTF-*"
         | 
| 12 | 
            +
              #   for example, a:ASCII or w+:UTF-8
         | 
| 7 13 | 
             
              def open_file(filename, option = 'r', &block)
         | 
| 8 14 | 
             
                controlled_access do |mode|
         | 
| 9 15 | 
             
                  Puppet::FileSystem.open(filename, mode, option, &block)
         | 
| @@ -40,7 +40,7 @@ class Puppet::Settings::EnvironmentConf | |
| 40 40 | 
             
              # without interpolation.  This is a special case for the default configured
         | 
| 41 41 | 
             
              # environment returned by the Puppet::Environments::StaticPrivate loader.
         | 
| 42 42 | 
             
              def self.static_for(environment, environment_timeout = 0, static_catalogs = false, rich_data = false)
         | 
| 43 | 
            -
                Static.new(environment, environment_timeout, static_catalogs,  | 
| 43 | 
            +
                Static.new(environment, environment_timeout, static_catalogs, nil, rich_data)
         | 
| 44 44 | 
             
              end
         | 
| 45 45 |  | 
| 46 46 | 
             
              attr_reader :section, :path_to_env, :global_modulepath
         | 
| @@ -176,7 +176,7 @@ class Puppet::Settings::EnvironmentConf | |
| 176 176 | 
             
                attr_reader :rich_data
         | 
| 177 177 | 
             
                attr_reader :static_catalogs
         | 
| 178 178 |  | 
| 179 | 
            -
                def initialize(environment, environment_timeout, static_catalogs, environment_data_provider =  | 
| 179 | 
            +
                def initialize(environment, environment_timeout, static_catalogs, environment_data_provider = nil, rich_data = false)
         | 
| 180 180 | 
             
                  @environment = environment
         | 
| 181 181 | 
             
                  @environment_timeout = environment_timeout
         | 
| 182 182 | 
             
                  @static_catalogs = static_catalogs
         | 
| @@ -184,6 +184,10 @@ class Puppet::Settings::EnvironmentConf | |
| 184 184 | 
             
                  @rich_data = rich_data
         | 
| 185 185 | 
             
                end
         | 
| 186 186 |  | 
| 187 | 
            +
                def path_to_env
         | 
| 188 | 
            +
                  nil
         | 
| 189 | 
            +
                end
         | 
| 190 | 
            +
             | 
| 187 191 | 
             
                def manifest
         | 
| 188 192 | 
             
                  @environment.manifest
         | 
| 189 193 | 
             
                end
         |