puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +52 -0
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2595
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -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
|
@@ -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
|
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
|
data/lib/puppet/pops.rb
CHANGED
@@ -10,11 +10,14 @@ module Puppet
|
|
10
10
|
#
|
11
11
|
# @api public
|
12
12
|
module Pops
|
13
|
-
|
13
|
+
EMPTY_HASH = {}.freeze
|
14
14
|
EMPTY_ARRAY = [].freeze
|
15
15
|
EMPTY_STRING = ''.freeze
|
16
16
|
|
17
|
-
|
17
|
+
DOUBLE_COLON = '::'.freeze
|
18
|
+
USCORE = '_'.freeze
|
19
|
+
|
20
|
+
require 'semantic_puppet'
|
18
21
|
|
19
22
|
require 'puppet/pops/patterns'
|
20
23
|
require 'puppet/pops/utils'
|
@@ -33,12 +36,6 @@ module Puppet
|
|
33
36
|
require 'puppet/pops/label_provider'
|
34
37
|
require 'puppet/pops/validation'
|
35
38
|
require 'puppet/pops/issue_reporter'
|
36
|
-
require 'puppet/pops/lookup'
|
37
|
-
require 'puppet/pops/lookup/interpolation'
|
38
|
-
require 'puppet/pops/lookup/invocation'
|
39
|
-
require 'puppet/pops/lookup/sub_lookup'
|
40
|
-
require 'puppet/pops/lookup/explainer'
|
41
|
-
|
42
39
|
require 'puppet/pops/model/model'
|
43
40
|
|
44
41
|
require 'puppet/pops/time/timespan'
|
@@ -47,7 +44,7 @@ module Puppet
|
|
47
44
|
# (the Types module initializes itself)
|
48
45
|
require 'puppet/pops/types/types'
|
49
46
|
require 'puppet/pops/types/string_converter'
|
50
|
-
require 'puppet/pops/lookup
|
47
|
+
require 'puppet/pops/lookup'
|
51
48
|
|
52
49
|
require 'puppet/pops/merge_strategy'
|
53
50
|
|
@@ -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:
|
@@ -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/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
|
@@ -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
|
@@ -22,6 +22,12 @@ class Puppet::Settings::FileOrDirectorySetting < Puppet::Settings::FileSetting
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# @api private
|
25
|
+
#
|
26
|
+
# @param option [String] Extra file operation mode information to use
|
27
|
+
# (defaults to read-only mode 'r')
|
28
|
+
# This is the standard mechanism Ruby uses in the IO class, and therefore
|
29
|
+
# encoding may be explicitly like fmode : encoding or fmode : "BOM|UTF-*"
|
30
|
+
# for example, a:ASCII or w+:UTF-8
|
25
31
|
def open_file(filename, option = 'r', &block)
|
26
32
|
if type == :file
|
27
33
|
super
|
@@ -185,6 +185,11 @@ class Puppet::Settings::FileSetting < Puppet::Settings::StringSetting
|
|
185
185
|
end
|
186
186
|
|
187
187
|
# @api private
|
188
|
+
# @param option [String] Extra file operation mode information to use
|
189
|
+
# (defaults to read-only mode 'r')
|
190
|
+
# This is the standard mechanism Ruby uses in the IO class, and therefore
|
191
|
+
# encoding may be explicitly like fmode : encoding or fmode : "BOM|UTF-*"
|
192
|
+
# for example, a:ASCII or w+:UTF-8
|
188
193
|
def exclusive_open(option = 'r', &block)
|
189
194
|
controlled_access do |mode|
|
190
195
|
Puppet::FileSystem.exclusive_open(file(), mode, option, &block)
|
@@ -192,6 +197,11 @@ class Puppet::Settings::FileSetting < Puppet::Settings::StringSetting
|
|
192
197
|
end
|
193
198
|
|
194
199
|
# @api private
|
200
|
+
# @param option [String] Extra file operation mode information to use
|
201
|
+
# (defaults to read-only mode 'r')
|
202
|
+
# This is the standard mechanism Ruby uses in the IO class, and therefore
|
203
|
+
# encoding may be explicitly like fmode : encoding or fmode : "BOM|UTF-*"
|
204
|
+
# for example, a:ASCII or w+:UTF-8
|
195
205
|
def open(option = 'r', &block)
|
196
206
|
controlled_access do |mode|
|
197
207
|
Puppet::FileSystem.open(file, mode, option, &block)
|
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
|
@@ -189,7 +189,7 @@ class Puppet::SSL::CertificateAuthority
|
|
189
189
|
#
|
190
190
|
# @return [Array<String>]
|
191
191
|
def list(name='*')
|
192
|
-
|
192
|
+
Puppet::SSL::Certificate.indirection.search(name).collect { |c| c.name }
|
193
193
|
end
|
194
194
|
|
195
195
|
# Return all the certificate objects as found by the indirector
|
@@ -205,7 +205,10 @@ class Puppet::SSL::CertificateAuthority
|
|
205
205
|
# @param name [Array<string>] filter to cerificate names
|
206
206
|
#
|
207
207
|
# @return [Array<Puppet::SSL::Certificate>]
|
208
|
+
#
|
209
|
+
# @deprecated Use Puppet::SSL::CertificateAuthority#list or Puppet Server Certificate status API
|
208
210
|
def list_certificates(name='*')
|
211
|
+
Puppet.deprecation_warning("Puppet::SSL::CertificateAuthority#list_certificates is deprecated. Please use Puppet::SSL::CertificateAuthority#list or the certificate status API to query certificate information. See https://docs.puppet.com/puppet/latest/http_api/http_certificate_status.html")
|
209
212
|
Puppet::SSL::Certificate.indirection.search(name)
|
210
213
|
end
|
211
214
|
|
@@ -417,6 +420,11 @@ class Puppet::SSL::CertificateAuthority
|
|
417
420
|
# of the X509 Store
|
418
421
|
#
|
419
422
|
# @return [OpenSSL::X509::Store]
|
423
|
+
#
|
424
|
+
# @deprecated Strictly speaking, #x509_store is marked API private, so we
|
425
|
+
# don't need to publicly deprecate it. But it marked as deprecated here to
|
426
|
+
# avoid the exceedingly small chance that someone comes in and uses it from
|
427
|
+
# within this class before it is removed.
|
420
428
|
def x509_store(options = {})
|
421
429
|
if (options[:cache])
|
422
430
|
return @x509store unless @x509store.nil?
|
@@ -464,7 +472,10 @@ class Puppet::SSL::CertificateAuthority
|
|
464
472
|
# @param cert [Puppet::SSL::Certificate] the certificate to check validity of
|
465
473
|
#
|
466
474
|
# @return [Boolean] true if signed, false if unsigned or revoked
|
475
|
+
#
|
476
|
+
# @deprecated use Puppet::SSL::CertificateAuthority#verify or Puppet Server certificate status API
|
467
477
|
def certificate_is_alive?(cert)
|
478
|
+
Puppet.deprecation_warning("Puppet::SSL::CertificateAuthority#certificate_is_alive? is deprecated. Please use Puppet::SSL::CertificateAuthority#verify or the certificate status API to query certificate information. See https://docs.puppet.com/puppet/latest/http_api/http_certificate_status.html")
|
468
479
|
x509_store(:cache => true).verify(cert.content)
|
469
480
|
end
|
470
481
|
|
@@ -483,7 +494,7 @@ class Puppet::SSL::CertificateAuthority
|
|
483
494
|
unless cert = Puppet::SSL::Certificate.indirection.find(name)
|
484
495
|
raise ArgumentError, "Could not find a certificate for #{name}"
|
485
496
|
end
|
486
|
-
store =
|
497
|
+
store = create_x509_store
|
487
498
|
|
488
499
|
raise CertificateVerificationError.new(store.error), store.error_string unless store.verify(cert.content)
|
489
500
|
end
|
data/lib/puppet/ssl/host.rb
CHANGED
@@ -227,7 +227,29 @@ ERROR_STRING
|
|
227
227
|
# Generate all necessary parts of our ssl host.
|
228
228
|
def generate
|
229
229
|
generate_key unless key
|
230
|
-
|
230
|
+
# ask indirector to find any existing requests and download them
|
231
|
+
existing_request = certificate_request
|
232
|
+
|
233
|
+
# if CSR downloaded from master, but the local keypair was just generated and
|
234
|
+
# does not match the public key in the CSR, fail hard
|
235
|
+
if !existing_request.nil? &&
|
236
|
+
(key.content.public_key.to_s != existing_request.content.public_key.to_s)
|
237
|
+
|
238
|
+
raise Puppet::Error, <<ERROR_STRING
|
239
|
+
The CSR retrieved from the master does not match the agent's public key.
|
240
|
+
CSR fingerprint: #{existing_request.fingerprint}
|
241
|
+
CSR public key: #{existing_request.content.public_key.to_text}
|
242
|
+
Agent public key: #{key.content.public_key.to_text}
|
243
|
+
To fix this, remove the CSR from both the master and the agent and then start a puppet run, which will automatically regenerate a CSR.
|
244
|
+
On the master:
|
245
|
+
puppet cert clean #{Puppet[:certname]}
|
246
|
+
On the agent:
|
247
|
+
1a. On most platforms: find #{Puppet[:ssldir]} -name #{Puppet[:certname]}.pem -delete
|
248
|
+
1b. On Windows: del "#{Puppet[:certdir].gsub('/', '\\')}\\#{Puppet[:certname]}.pem" /f
|
249
|
+
2. puppet agent -t
|
250
|
+
ERROR_STRING
|
251
|
+
end
|
252
|
+
generate_certificate_request unless existing_request
|
231
253
|
|
232
254
|
# If we can get a CA instance, then we're a valid CA, and we
|
233
255
|
# should use it to sign our request; else, just try to read
|
@@ -79,6 +79,13 @@ class Puppet::Transaction::AdditionalResourceGenerator
|
|
79
79
|
|
80
80
|
def contain_generated_resources_in(resource, made)
|
81
81
|
sentinel = Puppet::Type.type(:whit).new(:name => "completed_#{resource.title}", :catalog => resource.catalog)
|
82
|
+
# Tag the completed whit with all of the tags of the generating resource
|
83
|
+
# except the type name to allow event propogation to succeed beyond the whit
|
84
|
+
# "boundary" when filtering resources with tags. We include auto-generated
|
85
|
+
# tags such as the type name to support implicit filtering as well as
|
86
|
+
# explicit. Note that resource#tags returns a duplicate of the resource's
|
87
|
+
# tags.
|
88
|
+
sentinel.tag(*resource.tags)
|
82
89
|
priority = @prioritizer.generate_priority_contained_in(resource, sentinel)
|
83
90
|
@relationship_graph.add_vertex(sentinel, priority)
|
84
91
|
|