puppet 6.15.0-x64-mingw32 → 6.19.1-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 +4 -4
- data/CODEOWNERS +2 -7
- data/Gemfile +4 -2
- data/Gemfile.lock +29 -27
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/lib/puppet.rb +32 -8
- data/lib/puppet/agent.rb +18 -4
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application/agent.rb +23 -8
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/configurer.rb +61 -21
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +119 -39
- data/lib/puppet/environments.rb +51 -10
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +46 -16
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/plugin.rb +1 -1
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +28 -12
- data/lib/puppet/http/external_client.rb +0 -6
- data/lib/puppet/http/redirector.rb +9 -7
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/response.rb +19 -0
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/yaml.rb +1 -1
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/rest.rb +7 -1
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +1 -0
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +31 -4
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +29 -26
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +29 -15
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +38 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +24 -4
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip.rb +60 -37
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +9 -1
- data/lib/puppet/provider/package/zypper.rb +62 -1
- data/lib/puppet/provider/service/systemd.rb +21 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +16 -5
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reports/http.rb +7 -3
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/runtime.rb +25 -2
- data/lib/puppet/settings.rb +43 -6
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +33 -8
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +19 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +12 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +15 -7
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +33 -13
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +16 -1
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -10
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +10 -25
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/package/version/range.rb +4 -1
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +60 -33
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +541 -427
- data/man/man5/puppet.conf.5 +84 -19
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +4 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/integration/application/agent_spec.rb +202 -52
- data/spec/integration/application/apply_spec.rb +149 -149
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +70 -21
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +75 -2
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +27 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +6 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +73 -0
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +7 -2
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/https.rb +6 -0
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/agent_spec.rb +47 -1
- data/spec/unit/application/agent_spec.rb +7 -8
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +41 -10
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/application_spec.rb +9 -4
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer_spec.rb +86 -37
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/environments_spec.rb +99 -32
- data/spec/unit/face/config_spec.rb +59 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +29 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/http/client_spec.rb +74 -19
- data/spec/unit/http/external_client_spec.rb +9 -9
- data/spec/unit/http/resolver_spec.rb +24 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +2 -3
- data/spec/unit/http/service/file_server_spec.rb +2 -3
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +14 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +42 -16
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +47 -8
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +46 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +2 -1
- data/spec/unit/provider/service/redhat_spec.rb +10 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +87 -19
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -14
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +30 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
- data/spec/unit/puppet_spec.rb +33 -0
- data/spec/unit/reports/http_spec.rb +1 -1
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +182 -22
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +52 -8
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -1
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +218 -8
- data/spec/unit/type/user_spec.rb +32 -3
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/range_spec.rb +22 -1
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/manpages.rake +5 -35
- metadata +43 -49
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
| @@ -9,7 +9,7 @@ Puppet::Type.type(:file).newparam(:checksum) do | |
| 9 9 |  | 
| 10 10 | 
             
                The default checksum type is md5."
         | 
| 11 11 |  | 
| 12 | 
            -
              newvalues | 
| 12 | 
            +
              newvalues(*Puppet::Util::Checksums.known_checksum_types)
         | 
| 13 13 |  | 
| 14 14 | 
             
              defaultto do
         | 
| 15 15 | 
             
                Puppet[:digest_algorithm].to_sym
         | 
| @@ -23,18 +23,18 @@ Puppet::Type.type(:file).newparam(:checksum) do | |
| 23 23 |  | 
| 24 24 | 
             
              def sum(content)
         | 
| 25 25 | 
             
                content = content.is_a?(Puppet::Pops::Types::PBinaryType::Binary) ? content.binary_buffer : content
         | 
| 26 | 
            -
                type = digest_algorithm | 
| 26 | 
            +
                type = digest_algorithm
         | 
| 27 27 | 
             
                "{#{type}}" + send(type, content)
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              def sum_file(path)
         | 
| 31 | 
            -
                type = digest_algorithm | 
| 31 | 
            +
                type = digest_algorithm
         | 
| 32 32 | 
             
                method = type.to_s + "_file"
         | 
| 33 33 | 
             
                "{#{type}}" + send(method, path).to_s
         | 
| 34 34 | 
             
              end
         | 
| 35 35 |  | 
| 36 36 | 
             
              def sum_stream(&block)
         | 
| 37 | 
            -
                type = digest_algorithm | 
| 37 | 
            +
                type = digest_algorithm
         | 
| 38 38 | 
             
                method = type.to_s + "_stream"
         | 
| 39 39 | 
             
                checksum = send(method, &block)
         | 
| 40 40 | 
             
                "{#{type}}#{checksum}"
         | 
| @@ -23,7 +23,7 @@ module Puppet | |
| 23 23 | 
             
                  * Fully qualified paths to locally available files (including files on NFS
         | 
| 24 24 | 
             
                  shares or Windows mapped drives).
         | 
| 25 25 | 
             
                  * `file:` URIs, which behave the same as local file paths.
         | 
| 26 | 
            -
                  * `http:` URIs, which point to files served by common web servers.
         | 
| 26 | 
            +
                  * `http(s):` URIs, which point to files served by common web servers.
         | 
| 27 27 |  | 
| 28 28 | 
             
                  The normal form of a `puppet:` URI is:
         | 
| 29 29 |  | 
| @@ -44,11 +44,26 @@ module Puppet | |
| 44 44 | 
             
                  because HTTP servers do not transfer any metadata that translates to
         | 
| 45 45 | 
             
                  ownership or permission details.
         | 
| 46 46 |  | 
| 47 | 
            -
                   | 
| 48 | 
            -
                   | 
| 49 | 
            -
                   | 
| 50 | 
            -
                   | 
| 51 | 
            -
                   | 
| 47 | 
            +
                  Puppet determines if file content is synchronized by computing a checksum
         | 
| 48 | 
            +
                  for the local file and comparing it against the `checksum_value`
         | 
| 49 | 
            +
                  parameter. If the `checksum_value` parameter is not specified for
         | 
| 50 | 
            +
                  `puppet` and `file` sources, Puppet computes a checksum based on its
         | 
| 51 | 
            +
                  `Puppet[:digest_algorithm]`. For `http(s)` sources, Puppet uses the
         | 
| 52 | 
            +
                  first HTTP header it recognizes out of the following list:
         | 
| 53 | 
            +
                  `X-Checksum-Sha256`, `X-Checksum-Sha1`, `X-Checksum-Md5` or `Content-MD5`.
         | 
| 54 | 
            +
                  If the server response does not include one of these headers, Puppet
         | 
| 55 | 
            +
                  defaults to using the `Last-Modified` header. Puppet updates the local
         | 
| 56 | 
            +
                  file if the header is newer than the modified time (mtime) of the local
         | 
| 57 | 
            +
                  file.
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  _HTTP_ URIs can include a user information component so that Puppet can
         | 
| 60 | 
            +
                  retrieve file metadata and content from HTTP servers that require HTTP Basic
         | 
| 61 | 
            +
                  authentication. For example `https://<user>:<pass>@<server>:<port>/path/to/file.`
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  When connecting to _HTTPS_ servers, Puppet trusts CA certificates in the
         | 
| 64 | 
            +
                  puppet-agent certificate bundle and the Puppet CA. You can configure Puppet
         | 
| 65 | 
            +
                  to trust additional CA certificates using the `Puppet[:ssl_trust_store]`
         | 
| 66 | 
            +
                  setting.
         | 
| 52 67 |  | 
| 53 68 | 
             
                  Multiple `source` values can be specified as an array, and Puppet will
         | 
| 54 69 | 
             
                  use the first source that exists. This can be used to serve different
         | 
| @@ -98,8 +113,8 @@ module Puppet | |
| 98 113 | 
             
                      # Ruby 1.9.3 and earlier have a URI bug in URI
         | 
| 99 114 | 
             
                      # to_s returns an ASCII string despite UTF-8 fragments
         | 
| 100 115 | 
             
                      # since its escaped its safe to universally call encode
         | 
| 101 | 
            -
                      #  | 
| 102 | 
            -
                       | 
| 116 | 
            +
                      # Puppet::Util.uri_unescape always returns strings in the original encoding
         | 
| 117 | 
            +
                      Puppet::Util.uri_unescape(uri_string.encode(Encoding::UTF_8))
         | 
| 103 118 | 
             
                    else
         | 
| 104 119 | 
             
                      source
         | 
| 105 120 | 
             
                    end
         | 
| @@ -210,7 +225,7 @@ module Puppet | |
| 210 225 | 
             
                end
         | 
| 211 226 |  | 
| 212 227 | 
             
                def port
         | 
| 213 | 
            -
                  (uri and uri.port) or Puppet.settings[: | 
| 228 | 
            +
                  (uri and uri.port) or Puppet.settings[:serverport]
         | 
| 214 229 | 
             
                end
         | 
| 215 230 |  | 
| 216 231 | 
             
                def uri
         | 
| @@ -278,7 +293,7 @@ module Puppet | |
| 278 293 | 
             
                  api = session.route_to(:fileserver, url: url)
         | 
| 279 294 |  | 
| 280 295 | 
             
                  api.get_static_file_content(
         | 
| 281 | 
            -
                    path:  | 
| 296 | 
            +
                    path: Puppet::Util.uri_unescape(url.path),
         | 
| 282 297 | 
             
                    environment: resource.catalog.environment_instance.to_s,
         | 
| 283 298 | 
             
                    code_id: resource.catalog.code_id,
         | 
| 284 299 | 
             
                    &block
         | 
| @@ -290,14 +305,14 @@ module Puppet | |
| 290 305 | 
             
                  api = session.route_to(:fileserver, url: url)
         | 
| 291 306 |  | 
| 292 307 | 
             
                  api.get_file_content(
         | 
| 293 | 
            -
                    path:  | 
| 308 | 
            +
                    path: Puppet::Util.uri_unescape(url.path),
         | 
| 294 309 | 
             
                    environment: resource.catalog.environment_instance.to_s,
         | 
| 295 310 | 
             
                    &block
         | 
| 296 311 | 
             
                  )
         | 
| 297 312 | 
             
                end
         | 
| 298 313 |  | 
| 299 314 | 
             
                def get_from_http_source(url, &block)
         | 
| 300 | 
            -
                  client = Puppet.runtime[ | 
| 315 | 
            +
                  client = Puppet.runtime[:http]
         | 
| 301 316 | 
             
                  client.get(url, options: {include_system_store: true}) do |response|
         | 
| 302 317 | 
             
                    raise Puppet::HTTP::ResponseError.new(response) unless response.success?
         | 
| 303 318 |  | 
| @@ -307,7 +322,12 @@ module Puppet | |
| 307 322 |  | 
| 308 323 | 
             
                def chunk_file_from_source(&block)
         | 
| 309 324 | 
             
                  if uri.scheme =~ /^https?/
         | 
| 310 | 
            -
                     | 
| 325 | 
            +
                    # Historically puppet has not encoded the http(s) source URL before parsing
         | 
| 326 | 
            +
                    # it, for example, if the path contains spaces, then it must be URL encoded
         | 
| 327 | 
            +
                    # as %20 in the manifest. Puppet behaves the same when retrieving file
         | 
| 328 | 
            +
                    # metadata via http(s), see Puppet::Indirector::FileMetadata::Http#find.
         | 
| 329 | 
            +
                    url = URI.parse(metadata.source)
         | 
| 330 | 
            +
                    get_from_http_source(url, &block)
         | 
| 311 331 | 
             
                  elsif metadata.content_uri
         | 
| 312 332 | 
             
                    content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
         | 
| 313 333 | 
             
                    get_from_content_uri_source(content_url, &block)
         | 
| @@ -57,7 +57,7 @@ module Puppet | |
| 57 57 | 
             
                    This setting is _only_ consulted if the `path` attribute is set to `false`.
         | 
| 58 58 |  | 
| 59 59 | 
             
                    If this attribute is not specified, the first entry in the `server_list`
         | 
| 60 | 
            -
                    configuration setting is used, followed by the value of the ` | 
| 60 | 
            +
                    configuration setting is used, followed by the value of the `serverport`
         | 
| 61 61 | 
             
                    setting if `server_list` is not set."
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
    
        data/lib/puppet/type/notify.rb
    CHANGED
    
    | @@ -4,12 +4,12 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            module Puppet
         | 
| 6 6 | 
             
              Type.newtype(:notify) do
         | 
| 7 | 
            -
                @doc = "Sends an arbitrary message to the agent run-time log. It's important to note that the notify resource type is not idempotent. As a result, notifications are shown as a change on every Puppet run."
         | 
| 7 | 
            +
                @doc = "Sends an arbitrary message, specified as a string, to the agent run-time log. It's important to note that the notify resource type is not idempotent. As a result, notifications are shown as a change on every Puppet run."
         | 
| 8 8 |  | 
| 9 9 | 
             
                apply_to_all
         | 
| 10 10 |  | 
| 11 11 | 
             
                newproperty(:message, :idempotent => false) do
         | 
| 12 | 
            -
                  desc "The message to be sent to the log."
         | 
| 12 | 
            +
                  desc "The message to be sent to the log. Note that the value specified must be a string."
         | 
| 13 13 | 
             
                  def sync
         | 
| 14 14 | 
             
                    message = @sensitive ? 'Sensitive [value redacted]' : self.should
         | 
| 15 15 | 
             
                    case @resource["withpath"]
         | 
    
        data/lib/puppet/type/package.rb
    CHANGED
    
    | @@ -62,6 +62,9 @@ module Puppet | |
| 62 62 | 
             
                  passed to the installer command."
         | 
| 63 63 | 
             
                feature :uninstall_options, "The provider accepts options to be
         | 
| 64 64 | 
             
                  passed to the uninstaller command."
         | 
| 65 | 
            +
                feature :disableable, "The provider can disable packages. This feature is used by specifying `disabled` as the
         | 
| 66 | 
            +
                  desired value for the package.",
         | 
| 67 | 
            +
                  :methods => [:disable]
         | 
| 65 68 | 
             
                feature :supports_flavors, "The provider accepts flavors, which are specific variants of packages."
         | 
| 66 69 | 
             
                feature :package_settings, "The provider accepts package_settings to be
         | 
| 67 70 | 
             
                  ensured for the given package. The meaning and format of these settings is
         | 
| @@ -107,6 +110,10 @@ module Puppet | |
| 107 110 | 
             
                    provider.deprecated_hold
         | 
| 108 111 | 
             
                  end
         | 
| 109 112 |  | 
| 113 | 
            +
                  newvalue(:disabled, :required_features => :disableable) do
         | 
| 114 | 
            +
                    provider.disable
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
             | 
| 110 117 | 
             
                  # Alias the 'present' value.
         | 
| 111 118 | 
             
                  aliasvalue(:installed, :present)
         | 
| 112 119 |  | 
| @@ -154,7 +161,7 @@ module Puppet | |
| 154 161 | 
             
                    @should.each { |should|
         | 
| 155 162 | 
             
                      case should
         | 
| 156 163 | 
             
                      when :present
         | 
| 157 | 
            -
                        return true unless [:absent, :purged, :held].include?(is)
         | 
| 164 | 
            +
                        return true unless [:absent, :purged, :held, :disabled].include?(is)
         | 
| 158 165 | 
             
                      when :latest
         | 
| 159 166 | 
             
                        # Short-circuit packages that are not present
         | 
| 160 167 | 
             
                        return false if is == :absent || is == :purged
         | 
| @@ -411,6 +418,11 @@ module Puppet | |
| 411 418 | 
             
                newproperty(:flavor, :required_features => :supports_flavors) do
         | 
| 412 419 | 
             
                  desc "OpenBSD and DNF modules support 'flavors', which are
         | 
| 413 420 | 
             
                    further specifications for which type of package you want."
         | 
| 421 | 
            +
                  validate do |value|
         | 
| 422 | 
            +
                    if [:disabled, "disabled"].include?(@resource[:ensure]) && value
         | 
| 423 | 
            +
                      raise ArgumentError, _('Cannot have both `ensure => disabled` and `flavor`')
         | 
| 424 | 
            +
                    end
         | 
| 425 | 
            +
                  end
         | 
| 414 426 | 
             
                end
         | 
| 415 427 |  | 
| 416 428 | 
             
                newparam(:source) do
         | 
| @@ -509,6 +521,9 @@ module Puppet | |
| 509 521 | 
             
                    if [true, :true, "true"].include?(value) && @resource[:flavor]
         | 
| 510 522 | 
             
                      raise ArgumentError, _('Cannot have both `enable_only => true` and `flavor`')
         | 
| 511 523 | 
             
                    end
         | 
| 524 | 
            +
                    if [:disabled, "disabled"].include?(@resource[:ensure])
         | 
| 525 | 
            +
                      raise ArgumentError, _('Cannot have both `ensure => disabled` and `enable_only => true`')
         | 
| 526 | 
            +
                    end
         | 
| 512 527 | 
             
                  end
         | 
| 513 528 | 
             
                end
         | 
| 514 529 |  | 
    
        data/lib/puppet/type/service.rb
    CHANGED
    
    | @@ -47,11 +47,17 @@ module Puppet | |
| 47 47 |  | 
| 48 48 | 
             
                feature :configurable_timeout, "The provider can specify a minumum timeout for syncing service properties"
         | 
| 49 49 |  | 
| 50 | 
            +
                feature :manages_logon_credentials, "The provider can specify the logon credentials used for a service"
         | 
| 51 | 
            +
             | 
| 50 52 | 
             
                newproperty(:enable, :required_features => :enableable) do
         | 
| 51 53 | 
             
                  desc "Whether a service should be enabled to start at boot.
         | 
| 52 54 | 
             
                    This property behaves differently depending on the platform;
         | 
| 53 55 | 
             
                    wherever possible, it relies on local tools to enable or disable
         | 
| 54 | 
            -
                    a given service. Default values depend on the platform. | 
| 56 | 
            +
                    a given service. Default values depend on the platform.
         | 
| 57 | 
            +
                    
         | 
| 58 | 
            +
                    If you don't specify a value for the `enable` attribute, Puppet leaves
         | 
| 59 | 
            +
                    that aspect of the service alone and your operating system determines 
         | 
| 60 | 
            +
                    the behavior."
         | 
| 55 61 |  | 
| 56 62 | 
             
                  newvalue(:true, :event => :service_enabled) do
         | 
| 57 63 | 
             
                    provider.enable
         | 
| @@ -80,14 +86,8 @@ module Puppet | |
| 80 86 | 
             
                    provider.delayed_start
         | 
| 81 87 | 
             
                  end
         | 
| 82 88 |  | 
| 83 | 
            -
                  # This only makes sense on systemd systems. Static services cannot be enabled
         | 
| 84 | 
            -
                  # or disabled manually.
         | 
| 85 89 | 
             
                  def insync?(current)
         | 
| 86 | 
            -
                     | 
| 87 | 
            -
                      Puppet.debug("Unable to enable or disable static service #{@resource[:name]}")
         | 
| 88 | 
            -
                      return true
         | 
| 89 | 
            -
                    end
         | 
| 90 | 
            -
             | 
| 90 | 
            +
                    return provider.enabled_insync?(current) if provider.respond_to?(:enabled_insync?)
         | 
| 91 91 | 
             
                    super(current)
         | 
| 92 92 | 
             
                  end
         | 
| 93 93 |  | 
| @@ -118,6 +118,12 @@ module Puppet | |
| 118 118 | 
             
                  end
         | 
| 119 119 |  | 
| 120 120 | 
             
                  def sync
         | 
| 121 | 
            +
                    property = @resource.property(:logonaccount)
         | 
| 122 | 
            +
                    if property
         | 
| 123 | 
            +
                      val = property.retrieve
         | 
| 124 | 
            +
                      property.sync unless property.safe_insync?(val)
         | 
| 125 | 
            +
                    end
         | 
| 126 | 
            +
             | 
| 121 127 | 
             
                    event = super()
         | 
| 122 128 |  | 
| 123 129 | 
             
                    property = @resource.property(:enable)
         | 
| @@ -130,6 +136,51 @@ module Puppet | |
| 130 136 | 
             
                  end
         | 
| 131 137 | 
             
                end
         | 
| 132 138 |  | 
| 139 | 
            +
                newproperty(:logonaccount, :required_features => :manages_logon_credentials) do
         | 
| 140 | 
            +
                  desc "Specify an account for service logon"
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                  munge do |value|
         | 
| 143 | 
            +
                    return value unless Puppet::Util::Platform.windows?
         | 
| 144 | 
            +
                    return 'LocalSystem' if Puppet::Util::Windows::User::localsystem?(value)
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                    value.sub!(/^\.\\/, "#{Puppet::Util::Windows::ADSI.computer_name}\\")
         | 
| 147 | 
            +
                    user_information = Puppet::Util::Windows::SID.name_to_principal(value)
         | 
| 148 | 
            +
                    raise Puppet::Error.new("\"#{value}\" is not a valid account") unless user_information && [:SidTypeUser, :SidTypeWellKnownGroup].include?(user_information.account_type)
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                    user_rights = Puppet::Util::Windows::User::get_rights(user_information.domain_account) unless Puppet::Util::Windows::User::default_system_account?(value)
         | 
| 151 | 
            +
                    raise Puppet::Error.new("\"#{user_information.domain_account}\" has the 'Log On As A Service' right set to denied.") if user_rights =~ /SeDenyServiceLogonRight/
         | 
| 152 | 
            +
                    raise Puppet::Error.new("\"#{user_information.domain_account}\" is missing the 'Log On As A Service' right.") unless user_rights.nil? || user_rights =~ /SeServiceLogonRight/
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                    if user_information.domain == Puppet::Util::Windows::ADSI.computer_name
         | 
| 155 | 
            +
                      ".\\#{user_information.account}"
         | 
| 156 | 
            +
                    else
         | 
| 157 | 
            +
                      user_information.domain_account
         | 
| 158 | 
            +
                    end
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
                end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                newparam(:logonpassword, :required_features => :manages_logon_credentials) do
         | 
| 163 | 
            +
                  desc "Specify a password for service logon. Default value is an empty string (when logonaccount is specified)."
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                  validate do |value|
         | 
| 166 | 
            +
                    raise Puppet::Error.new(_"The 'logonaccount' parameter is mandatory when setting 'logonpassword'.") unless @resource[:logonaccount]
         | 
| 167 | 
            +
                    raise ArgumentError, _("Passwords cannot include ':'") if value.is_a?(String) and value.include?(":")
         | 
| 168 | 
            +
                    return unless Puppet::Util::Platform.windows?
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                    is_a_predefined_local_account = Puppet::Util::Windows::User::default_system_account?(@resource[:logonaccount]) || @resource[:logonaccount] == 'LocalSystem'
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    account_info = @resource[:logonaccount].split("\\")
         | 
| 173 | 
            +
                    able_to_logon = Puppet::Util::Windows::User.password_is?(account_info[1], value, account_info[0]) unless is_a_predefined_local_account
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    raise Puppet::Error.new("The given password is invalid for user '#{@resource[:logonaccount]}'.") unless is_a_predefined_local_account || able_to_logon
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                    provider.logonpassword=(value)
         | 
| 178 | 
            +
                  end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  sensitive true
         | 
| 181 | 
            +
                  defaultto { @resource[:logonaccount] ? "" : nil }
         | 
| 182 | 
            +
                end
         | 
| 183 | 
            +
             | 
| 133 184 | 
             
                newproperty(:flags, :required_features => :flaggable) do
         | 
| 134 185 | 
             
                  desc "Specify a string of flags to pass to the startup script."
         | 
| 135 186 | 
             
                end
         | 
    
        data/lib/puppet/type/user.rb
    CHANGED
    
    | @@ -40,7 +40,10 @@ module Puppet | |
| 40 40 | 
             
                   implement PBKDF2 passwords with salt properties."
         | 
| 41 41 |  | 
| 42 42 | 
             
                feature :manages_solaris_rbac,
         | 
| 43 | 
            -
                  "The provider can manage  | 
| 43 | 
            +
                  "The provider can manage normal users"
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                feature :manages_roles,
         | 
| 46 | 
            +
                  "The provider can manage roles"
         | 
| 44 47 |  | 
| 45 48 | 
             
                feature :manages_expiry,
         | 
| 46 49 | 
             
                  "The provider can manage the expiry date for a user."
         | 
| @@ -97,6 +100,18 @@ module Puppet | |
| 97 100 | 
             
                      return :absent
         | 
| 98 101 | 
             
                    end
         | 
| 99 102 | 
             
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  def sync
         | 
| 105 | 
            +
                    event = super
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    property = @resource.property(:roles)
         | 
| 108 | 
            +
                    if property
         | 
| 109 | 
            +
                      val = property.retrieve
         | 
| 110 | 
            +
                      property.sync unless property.safe_insync?(val)
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                    event
         | 
| 114 | 
            +
                  end
         | 
| 100 115 | 
             
                end
         | 
| 101 116 |  | 
| 102 117 | 
             
                newproperty(:home) do
         | 
| @@ -493,7 +508,7 @@ module Puppet | |
| 493 508 | 
             
                  provider.exists?
         | 
| 494 509 | 
             
                end
         | 
| 495 510 |  | 
| 496 | 
            -
                newproperty(:roles, :parent => Puppet::Property::List, :required_features => : | 
| 511 | 
            +
                newproperty(:roles, :parent => Puppet::Property::List, :required_features => :manages_roles) do
         | 
| 497 512 | 
             
                  desc "The roles the user has.  Multiple roles should be
         | 
| 498 513 | 
             
                    specified as an array."
         | 
| 499 514 |  | 
| @@ -520,7 +535,7 @@ module Puppet | |
| 520 535 | 
             
                  end
         | 
| 521 536 |  | 
| 522 537 | 
             
                  reqs
         | 
| 523 | 
            -
                end
         | 
| 538 | 
            +
                end unless Puppet::Util::Platform.windows?
         | 
| 524 539 |  | 
| 525 540 | 
             
                newparam(:role_membership) do
         | 
| 526 541 | 
             
                  desc "Whether specified roles should be considered the **complete list**
         | 
| @@ -736,17 +751,11 @@ module Puppet | |
| 736 751 | 
             
                    value = test_sym if [:true, :false].include? test_sym
         | 
| 737 752 |  | 
| 738 753 | 
             
                    return [] if value == :false
         | 
| 739 | 
            -
                    home = resource[:home]
         | 
| 740 | 
            -
                    if value == :true and not home
         | 
| 741 | 
            -
                      raise ArgumentError, _("purge_ssh_keys can only be true for users with a defined home directory")
         | 
| 742 | 
            -
                    end
         | 
| 754 | 
            +
                    home = resource[:home] || Dir.home(resource[:name])
         | 
| 743 755 |  | 
| 744 756 | 
             
                    return [ "#{home}/.ssh/authorized_keys" ] if value == :true
         | 
| 745 757 | 
             
                    # value is an array - munge each value
         | 
| 746 758 | 
             
                    [ value ].flatten.map do |entry|
         | 
| 747 | 
            -
                      if entry =~ /^~|^%h/ and not home
         | 
| 748 | 
            -
                        raise ArgumentError, _("purge_ssh_keys value '%{value}' meta character ~ or %{home_placeholder} only allowed for users with a defined home directory") % { value: value, home_placeholder: '%h' }
         | 
| 749 | 
            -
                      end
         | 
| 750 759 | 
             
                      # make sure frozen value is duplicated by using a gsub, second mutating gsub! is then ok
         | 
| 751 760 | 
             
                      entry = entry.gsub(/^~\//, "#{home}/")
         | 
| 752 761 | 
             
                      entry.gsub!(/^%h\//, "#{home}/")
         | 
    
        data/lib/puppet/util.rb
    CHANGED
    
    | @@ -27,7 +27,7 @@ module Util | |
| 27 27 | 
             
              extend Puppet::Util::SymbolicFileMode
         | 
| 28 28 |  | 
| 29 29 | 
             
              def default_env
         | 
| 30 | 
            -
                Puppet | 
| 30 | 
            +
                Puppet.features.microsoft_windows? ?
         | 
| 31 31 | 
             
                  :windows :
         | 
| 32 32 | 
             
                  :posix
         | 
| 33 33 | 
             
              end
         | 
| @@ -296,6 +296,11 @@ module Util | |
| 296 296 | 
             
              AbsolutePathWindows = %r!^(?:(?:[A-Z]:#{slash})|(?:#{slash}#{slash}#{label}#{slash}#{label})|(?:#{slash}#{slash}\?#{slash}#{label}))!io
         | 
| 297 297 | 
             
              AbsolutePathPosix   = %r!^/!
         | 
| 298 298 | 
             
              def absolute_path?(path, platform=nil)
         | 
| 299 | 
            +
                unless path.is_a?(String)
         | 
| 300 | 
            +
                  Puppet.warning("Cannot check if #{path} is an absolute path because it is a '#{path.class}' and not a String'")
         | 
| 301 | 
            +
                  return false
         | 
| 302 | 
            +
                end
         | 
| 303 | 
            +
             | 
| 299 304 | 
             
                # Ruby only sets File::ALT_SEPARATOR on Windows and the Ruby standard
         | 
| 300 305 | 
             
                # library uses that to test what platform it's on.  Normally in Puppet we
         | 
| 301 306 | 
             
                # would use Puppet.features.microsoft_windows?, but this method needs to
         | 
| @@ -356,7 +361,7 @@ module Util | |
| 356 361 |  | 
| 357 362 | 
             
                # CGI.unescape doesn't handle space rules properly in uri paths
         | 
| 358 363 | 
             
                # URI.unescape does, but returns strings in their original encoding
         | 
| 359 | 
            -
                path =  | 
| 364 | 
            +
                path = uri_unescape(uri.path.encode(Encoding::UTF_8))
         | 
| 360 365 |  | 
| 361 366 | 
             
                if Puppet::Util::Platform.windows? && uri.scheme == 'file'
         | 
| 362 367 | 
             
                  if uri.host && !uri.host.empty?
         | 
| @@ -460,7 +465,18 @@ module Util | |
| 460 465 | 
             
                # + should be left unencoded
         | 
| 461 466 | 
             
                # URI::parse and URI::Generic.build don't like paths encoded with CGI.escape
         | 
| 462 467 | 
             
                # URI.escape does not change / to %2F and : to %3A like CGI.escape
         | 
| 463 | 
            -
                 | 
| 468 | 
            +
                #
         | 
| 469 | 
            +
                # URI.escape is obsolete in Ruby 2.7. Ignore this error until we're able to
         | 
| 470 | 
            +
                # switch to a different escape mechanism. If this is JRuby, we can't mask
         | 
| 471 | 
            +
                # the error message, because this isn't thread safe. JRuby shouldn't be
         | 
| 472 | 
            +
                # using Ruby 2.7 or raising the warning anyway.
         | 
| 473 | 
            +
                orig_verbose = $VERBOSE
         | 
| 474 | 
            +
                $VERBOSE = nil unless Puppet::Util::Platform.jruby?
         | 
| 475 | 
            +
                begin
         | 
| 476 | 
            +
                  encoded += URI.escape(parts[:path]) unless parts[:path].nil?
         | 
| 477 | 
            +
                ensure
         | 
| 478 | 
            +
                  $VERBOSE = orig_verbose unless Puppet::Util::Platform.jruby?
         | 
| 479 | 
            +
                end
         | 
| 464 480 |  | 
| 465 481 | 
             
                # each query parameter
         | 
| 466 482 | 
             
                if !parts[:query].nil?
         | 
| @@ -479,6 +495,15 @@ module Util | |
| 479 495 | 
             
              end
         | 
| 480 496 | 
             
              module_function :uri_encode
         | 
| 481 497 |  | 
| 498 | 
            +
              def uri_unescape(path)
         | 
| 499 | 
            +
                orig_verbose = $VERBOSE
         | 
| 500 | 
            +
                $VERBOSE = nil unless Puppet::Util::Platform.jruby?
         | 
| 501 | 
            +
                return URI.unescape(path)
         | 
| 502 | 
            +
              ensure
         | 
| 503 | 
            +
                $VERBOSE = orig_verbose unless Puppet::Util::Platform.jruby?
         | 
| 504 | 
            +
              end
         | 
| 505 | 
            +
              module_function :uri_unescape
         | 
| 506 | 
            +
             | 
| 482 507 | 
             
              def safe_posix_fork(stdin=$stdin, stdout=$stdout, stderr=$stderr, &block)
         | 
| 483 508 | 
             
                child_pid = Kernel.fork do
         | 
| 484 509 | 
             
                  STDIN.reopen(stdin)
         | 
| @@ -734,6 +759,19 @@ module Util | |
| 734 759 | 
             
                Random.new(seed).rand(max)
         | 
| 735 760 | 
             
              end
         | 
| 736 761 | 
             
              module_function :deterministic_rand_int
         | 
| 762 | 
            +
             | 
| 763 | 
            +
              # Executes a block of code, wrapped around Facter.load_external(false) and
         | 
| 764 | 
            +
              # Facter.load_external(true) which will cause Facter to not evaluate external facts.
         | 
| 765 | 
            +
              def skip_external_facts
         | 
| 766 | 
            +
                return yield unless Facter.respond_to? :load_external
         | 
| 767 | 
            +
                begin
         | 
| 768 | 
            +
                  Facter.load_external(false)
         | 
| 769 | 
            +
                  yield
         | 
| 770 | 
            +
                ensure
         | 
| 771 | 
            +
                  Facter.load_external(true)
         | 
| 772 | 
            +
                end
         | 
| 773 | 
            +
              end
         | 
| 774 | 
            +
              module_function :skip_external_facts
         | 
| 737 775 | 
             
            end
         | 
| 738 776 | 
             
            end
         | 
| 739 777 |  |