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
| @@ -12,16 +12,16 @@ describe Puppet::Application::Agent do | |
| 12 12 | 
             
              before :each do
         | 
| 13 13 | 
             
                @puppetd = Puppet::Application[:agent]
         | 
| 14 14 |  | 
| 15 | 
            -
                @ | 
| 15 | 
            +
                @agent = double('agent')
         | 
| 16 | 
            +
                allow(Puppet::Agent).to receive(:new).and_return(@agent)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                @daemon = Puppet::Daemon.new(@agent, nil)
         | 
| 16 19 | 
             
                allow(@daemon).to receive(:daemonize)
         | 
| 17 20 | 
             
                allow(@daemon).to receive(:start)
         | 
| 18 21 | 
             
                allow(@daemon).to receive(:stop)
         | 
| 19 22 | 
             
                allow(Puppet::Daemon).to receive(:new).and_return(@daemon)
         | 
| 20 23 | 
             
                Puppet[:daemonize] = false
         | 
| 21 24 |  | 
| 22 | 
            -
                @agent = double('agent')
         | 
| 23 | 
            -
                allow(Puppet::Agent).to receive(:new).and_return(@agent)
         | 
| 24 | 
            -
             | 
| 25 25 | 
             
                @puppetd.preinit
         | 
| 26 26 | 
             
                allow(Puppet::Util::Log).to receive(:newdestination)
         | 
| 27 27 |  | 
| @@ -571,10 +571,9 @@ describe Puppet::Application::Agent do | |
| 571 571 | 
             
                    allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(nil)
         | 
| 572 572 |  | 
| 573 573 | 
             
                    expect {
         | 
| 574 | 
            -
                       | 
| 575 | 
            -
             | 
| 576 | 
            -
             | 
| 577 | 
            -
                    }.to output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
         | 
| 574 | 
            +
                      @puppetd.fingerprint
         | 
| 575 | 
            +
                    }.to exit_with(1)
         | 
| 576 | 
            +
                     .and output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
         | 
| 578 577 | 
             
                  end
         | 
| 579 578 |  | 
| 580 579 | 
             
                  it "should log an error if an exception occurs" do
         | 
| @@ -234,8 +234,8 @@ describe Puppet::Application::Doc do | |
| 234 234 | 
             
                    end
         | 
| 235 235 | 
             
                  end
         | 
| 236 236 |  | 
| 237 | 
            -
                  it "should operate in  | 
| 238 | 
            -
                    expect(@doc.class.run_mode.name).to eq(: | 
| 237 | 
            +
                  it "should operate in server run_mode" do
         | 
| 238 | 
            +
                    expect(@doc.class.run_mode.name).to eq(:server)
         | 
| 239 239 |  | 
| 240 240 | 
             
                    @doc.setup_rdoc
         | 
| 241 241 | 
             
                  end
         | 
| @@ -423,16 +423,18 @@ EOT | |
| 423 423 | 
             
                it "should work if asked to render json" do
         | 
| 424 424 | 
             
                  allow(app.command_line).to receive(:args).and_return(%w{count_args a b c --render-as json})
         | 
| 425 425 | 
             
                  expect {
         | 
| 426 | 
            -
                     | 
| 427 | 
            -
                  }.to  | 
| 426 | 
            +
                    app.run
         | 
| 427 | 
            +
                  }.to exit_with(0)
         | 
| 428 | 
            +
                   .and output(/3/).to_stdout
         | 
| 428 429 | 
             
                end
         | 
| 429 430 |  | 
| 430 431 | 
             
                it "should invoke when_rendering hook 's' when asked to render-as 's'" do
         | 
| 431 432 | 
             
                  allow(app.command_line).to receive(:args).and_return(%w{with_s_rendering_hook --render-as s})
         | 
| 432 433 | 
             
                  app.action = app.face.get_action(:with_s_rendering_hook)
         | 
| 433 434 | 
             
                  expect {
         | 
| 434 | 
            -
                     | 
| 435 | 
            -
                  }.to  | 
| 435 | 
            +
                    app.run
         | 
| 436 | 
            +
                  }.to exit_with(0)
         | 
| 437 | 
            +
                   .and output(/you invoked the 's' rendering hook/).to_stdout
         | 
| 436 438 | 
             
                end
         | 
| 437 439 | 
             
              end
         | 
| 438 440 |  | 
| @@ -2,21 +2,52 @@ require 'spec_helper' | |
| 2 2 | 
             
            require 'puppet/application/facts'
         | 
| 3 3 |  | 
| 4 4 | 
             
            describe Puppet::Application::Facts do
         | 
| 5 | 
            +
              let(:app) { Puppet::Application[:facts] }
         | 
| 6 | 
            +
              let(:values) { {"filesystems" => "apfs,autofs,devfs", "macaddress" => "64:52:11:22:03:25"} }
         | 
| 7 | 
            +
             | 
| 5 8 | 
             
              before :each do
         | 
| 6 | 
            -
                 | 
| 9 | 
            +
                Puppet::Node::Facts.indirection.terminus_class = :memory
         | 
| 7 10 | 
             
              end
         | 
| 8 11 |  | 
| 9 | 
            -
              it " | 
| 10 | 
            -
                Puppet::Node::Facts. | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 12 | 
            +
              it "returns facts for a given node" do
         | 
| 13 | 
            +
                facts = Puppet::Node::Facts.new('whatever', values)
         | 
| 14 | 
            +
                Puppet::Node::Facts.indirection.save(facts)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                app.command_line.args = %w{find whatever --render-as yaml}
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # due to PUP-10105 we emit the class tag when we shouldn't
         | 
| 19 | 
            +
                expected = Regexp.new(<<~END)
         | 
| 20 | 
            +
                  --- !ruby/object:Puppet::Node::Facts
         | 
| 21 | 
            +
                  name: whatever
         | 
| 22 | 
            +
                  values:
         | 
| 23 | 
            +
                    filesystems: apfs,autofs,devfs
         | 
| 24 | 
            +
                    macaddress: "64:52:11:22:03:25"
         | 
| 25 | 
            +
                END
         | 
| 13 26 |  | 
| 14 27 | 
             
                expect {
         | 
| 15 | 
            -
                   | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 28 | 
            +
                  app.run
         | 
| 29 | 
            +
                }.to exit_with(0)
         | 
| 30 | 
            +
                 .and output(expected).to_stdout
         | 
| 31 | 
            +
              end
         | 
| 19 32 |  | 
| 20 | 
            -
             | 
| 33 | 
            +
              it "returns facts for the current node when the name is omitted" do
         | 
| 34 | 
            +
                facts = Puppet::Node::Facts.new(Puppet[:certname], values)
         | 
| 35 | 
            +
                Puppet::Node::Facts.indirection.save(facts)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                app.command_line.args = %w{find --render-as yaml}
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                # due to PUP-10105 we emit the class tag when we shouldn't
         | 
| 40 | 
            +
                expected = Regexp.new(<<~END)
         | 
| 41 | 
            +
                  --- !ruby/object:Puppet::Node::Facts
         | 
| 42 | 
            +
                  name: #{Puppet[:certname]}
         | 
| 43 | 
            +
                  values:
         | 
| 44 | 
            +
                    filesystems: apfs,autofs,devfs
         | 
| 45 | 
            +
                    macaddress: "64:52:11:22:03:25"
         | 
| 46 | 
            +
                END
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                expect {
         | 
| 49 | 
            +
                  app.run
         | 
| 50 | 
            +
                }.to exit_with(0)
         | 
| 51 | 
            +
                 .and output(expected).to_stdout
         | 
| 21 52 | 
             
              end
         | 
| 22 53 | 
             
            end
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'puppet/face'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Puppet::Face[:man, :current] do
         | 
| 5 | 
            +
              let(:pager) { '/path/to/our/pager' }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              around do |example|
         | 
| 8 | 
            +
                Puppet::Util.withenv('MANPAGER' => pager) do
         | 
| 9 | 
            +
                  example.run
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              it 'is deprecated' do
         | 
| 14 | 
            +
                expect(subject).to be_deprecated
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              it 'has a man action' do
         | 
| 18 | 
            +
                expect(subject).to be_action(:man)
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it 'accepts a call with no arguments' do
         | 
| 22 | 
            +
                expect { subject.man }.to output(/USAGE: puppet man <action>/).to_stdout
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it 'raises an ArgumentError when given too many arguments' do
         | 
| 26 | 
            +
                expect {
         | 
| 27 | 
            +
                  subject.man(:man, 'agent', 'extra')
         | 
| 28 | 
            +
                }.to raise_error(ArgumentError)
         | 
| 29 | 
            +
                 .and output(/USAGE: puppet man <action>/).to_stdout
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              it "exits with 0 when generating man documentation for each available application" do
         | 
| 33 | 
            +
                # turn off deprecation warning
         | 
| 34 | 
            +
                Puppet[:disable_warnings] = ['deprecations']
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                allow(Puppet::Util).to receive(:which).with('ronn').and_return(nil)
         | 
| 37 | 
            +
                allow(Puppet::Util).to receive(:which).with(pager).and_return(pager)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                Puppet::Application.available_application_names.each do |name|
         | 
| 40 | 
            +
                  next if %w{man face_base indirection_base}.include? name
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  app = Puppet::Application[:man]
         | 
| 43 | 
            +
                  app.command_line.args << 'man' << name
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  expect {
         | 
| 46 | 
            +
                    allow(IO).to receive(:popen).with(pager, 'w:UTF-8').and_yield($stdout)
         | 
| 47 | 
            +
                    app.run
         | 
| 48 | 
            +
                  }.to exit_with(0)
         | 
| 49 | 
            +
                   .and output(/puppet-#{name}/m).to_stdout
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| @@ -51,7 +51,9 @@ describe Puppet::Application::Resource do | |
| 51 51 | 
             
                  # provider is a parameter that should always be available
         | 
| 52 52 | 
             
                  @resource_app.extra_params = [ :provider ]
         | 
| 53 53 |  | 
| 54 | 
            -
                  expect { | 
| 54 | 
            +
                  expect {
         | 
| 55 | 
            +
                    @resource_app.main
         | 
| 56 | 
            +
                  }.to output(/provider\s+=>/).to_stdout
         | 
| 55 57 | 
             
                end
         | 
| 56 58 | 
             
              end
         | 
| 57 59 |  | 
| @@ -38,7 +38,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do | |
| 38 38 | 
             
              def expects_command_to_pass(expected_output = nil)
         | 
| 39 39 | 
             
                expect {
         | 
| 40 40 | 
             
                  ssl.run_command
         | 
| 41 | 
            -
                }.to  | 
| 41 | 
            +
                }.to output(expected_output).to_stdout
         | 
| 42 42 | 
             
              end
         | 
| 43 43 |  | 
| 44 44 | 
             
              def expects_command_to_fail(message)
         | 
| @@ -46,7 +46,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do | |
| 46 46 | 
             
                  expect {
         | 
| 47 47 | 
             
                    ssl.run_command
         | 
| 48 48 | 
             
                  }.to raise_error(Puppet::Error, message)
         | 
| 49 | 
            -
                }.to  | 
| 49 | 
            +
                }.to output(/.*/).to_stdout
         | 
| 50 50 | 
             
              end
         | 
| 51 51 |  | 
| 52 52 | 
             
              shared_examples_for 'an ssl action' do
         | 
| @@ -266,6 +266,19 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do | |
| 266 266 | 
             
                  FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), Puppet[:hostprivkey])
         | 
| 267 267 | 
             
                  FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'signed.pem'), Puppet[:hostcert])
         | 
| 268 268 |  | 
| 269 | 
            +
                  # To verify the client cert we need the root and intermediate certs and crls.
         | 
| 270 | 
            +
                  # We don't need to do this with `ssl-client` cert above, because it is issued
         | 
| 271 | 
            +
                  # directly from the generated TestCa above.
         | 
| 272 | 
            +
                  File.open(Puppet[:localcacert], 'w') do |f|
         | 
| 273 | 
            +
                    f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'ca.pem')))
         | 
| 274 | 
            +
                    f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate.pem')))
         | 
| 275 | 
            +
                  end
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                  File.open(Puppet[:hostcrl], 'w') do |f|
         | 
| 278 | 
            +
                    f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'crl.pem')))
         | 
| 279 | 
            +
                    f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate-crl.pem')))
         | 
| 280 | 
            +
                  end
         | 
| 281 | 
            +
             | 
| 269 282 | 
             
                  Puppet[:passfile] = file_containing('passfile', '74695716c8b6')
         | 
| 270 283 |  | 
| 271 284 | 
             
                  expects_command_to_pass(%r{Verified client certificate 'CN=signed' fingerprint})
         | 
| @@ -118,6 +118,11 @@ describe Puppet::Application do | |
| 118 118 | 
             
                  @appclass.run_mode :agent
         | 
| 119 119 | 
             
                  expect(@appclass.run_mode.name).to eq(:agent)
         | 
| 120 120 | 
             
                end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                it "considers :server to be master" do
         | 
| 123 | 
            +
                  @appclass.run_mode :server
         | 
| 124 | 
            +
                  expect(@appclass.run_mode).to be_master
         | 
| 125 | 
            +
                end
         | 
| 121 126 | 
             
              end
         | 
| 122 127 |  | 
| 123 128 | 
             
              describe ".environment_mode" do
         | 
| @@ -147,7 +152,7 @@ describe Puppet::Application do | |
| 147 152 | 
             
              describe "when dealing with run_mode" do
         | 
| 148 153 |  | 
| 149 154 | 
             
                class TestApp < Puppet::Application
         | 
| 150 | 
            -
                  run_mode : | 
| 155 | 
            +
                  run_mode :server
         | 
| 151 156 | 
             
                  def run_command
         | 
| 152 157 | 
             
                    # no-op
         | 
| 153 158 | 
             
                  end
         | 
| @@ -159,16 +164,16 @@ describe Puppet::Application do | |
| 159 164 | 
             
                  app = TestApp.new
         | 
| 160 165 | 
             
                  app.initialize_app_defaults
         | 
| 161 166 |  | 
| 162 | 
            -
                  expect(Puppet.run_mode).to  | 
| 167 | 
            +
                  expect(Puppet.run_mode).to be_server
         | 
| 163 168 | 
             
                end
         | 
| 164 169 |  | 
| 165 170 | 
             
                it "should sadly and frighteningly allow run_mode to change at runtime via #run" do
         | 
| 166 171 | 
             
                  app = TestApp.new
         | 
| 167 172 | 
             
                  app.run
         | 
| 168 173 |  | 
| 169 | 
            -
                  expect(app.class.run_mode.name).to eq(: | 
| 174 | 
            +
                  expect(app.class.run_mode.name).to eq(:server)
         | 
| 170 175 |  | 
| 171 | 
            -
                  expect(Puppet.run_mode).to  | 
| 176 | 
            +
                  expect(Puppet.run_mode).to be_server
         | 
| 172 177 | 
             
                end
         | 
| 173 178 | 
             
              end
         | 
| 174 179 |  | 
| @@ -228,5 +228,15 @@ describe Puppet::Configurer::Downloader do | |
| 228 228 |  | 
| 229 229 | 
             
                  expect { @dler.evaluate }.not_to raise_error
         | 
| 230 230 | 
             
                end
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                it "raises an exception if catalog application fails" do
         | 
| 233 | 
            +
                  Puppet[:ignore_plugin_errors] = false
         | 
| 234 | 
            +
             | 
| 235 | 
            +
                  expect(@dler.file).to receive(:retrieve).and_raise(Puppet::Error, "testing")
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                  expect {
         | 
| 238 | 
            +
                    @dler.evaluate
         | 
| 239 | 
            +
                  }.to raise_error(Puppet::Error, /testing/)
         | 
| 240 | 
            +
                end
         | 
| 231 241 | 
             
              end
         | 
| 232 242 | 
             
            end
         | 
| @@ -104,7 +104,7 @@ describe Puppet::Configurer::FactHandler do | |
| 104 104 | 
             
                      expect(text).to include(test_fact[:encoded])
         | 
| 105 105 |  | 
| 106 106 | 
             
                      # this is not sufficient to test whether these values are sent via HTTP GET or HTTP POST in actual catalog request
         | 
| 107 | 
            -
                      expect(JSON.parse( | 
| 107 | 
            +
                      expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
         | 
| 108 108 | 
             
                    end
         | 
| 109 109 | 
             
                  end
         | 
| 110 110 | 
             
                end
         | 
| @@ -129,7 +129,7 @@ describe Puppet::Configurer::FactHandler do | |
| 129 129 | 
             
                      expect(to_upload).to eq({:facts_format => 'application/json', :facts => text})
         | 
| 130 130 | 
             
                      expect(text).to include(test_fact[:encoded])
         | 
| 131 131 |  | 
| 132 | 
            -
                      expect(JSON.parse( | 
| 132 | 
            +
                      expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
         | 
| 133 133 | 
             
                    end
         | 
| 134 134 | 
             
                  end
         | 
| 135 135 | 
             
                end
         | 
| @@ -138,9 +138,9 @@ describe Puppet::Configurer::FactHandler do | |
| 138 138 | 
             
                  facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
         | 
| 139 139 | 
             
                  Puppet::Node::Facts.indirection.save(facts)
         | 
| 140 140 |  | 
| 141 | 
            -
                  # prefer  | 
| 141 | 
            +
                  # prefer Puppet::Util.uri_unescape but validate CGI also works
         | 
| 142 142 | 
             
                  encoded_facts = facthandler.facts_for_uploading[:facts]
         | 
| 143 | 
            -
                  expect( | 
| 143 | 
            +
                  expect(Puppet::Util.uri_unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
         | 
| 144 144 | 
             
                  expect(CGI.unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
         | 
| 145 145 | 
             
                end
         | 
| 146 146 | 
             
              end
         | 
| @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 | 
             
            require 'puppet/configurer'
         | 
| 3 | 
            -
            require 'webmock/rspec'
         | 
| 4 3 |  | 
| 5 4 | 
             
            describe Puppet::Configurer do
         | 
| 6 5 | 
             
              before do
         | 
| @@ -85,6 +84,44 @@ describe Puppet::Configurer do | |
| 85 84 | 
             
                  expect(configurer.run).to eq(0)
         | 
| 86 85 | 
             
                end
         | 
| 87 86 |  | 
| 87 | 
            +
                it "fails the run if pluginsync fails when usecacheonfailure is false" do
         | 
| 88 | 
            +
                  Puppet[:ignore_plugin_errors] = false
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  # --test implies these, set them so we don't fall back to a cached catalog
         | 
| 91 | 
            +
                  Puppet[:use_cached_catalog] = false
         | 
| 92 | 
            +
                  Puppet[:usecacheonfailure] = false
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
         | 
| 95 | 
            +
                  stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
         | 
| 96 | 
            +
                    status: 404, body: body, headers: {'Content-Type' => 'application/json'}
         | 
| 97 | 
            +
                  )
         | 
| 98 | 
            +
                  stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
         | 
| 99 | 
            +
                    status: 404, body: body, headers: {'Content-Type' => 'application/json'}
         | 
| 100 | 
            +
                  )
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  configurer.run(pluginsync: true)
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
         | 
| 108 | 
            +
                  Puppet[:ignore_plugin_errors] = false
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  Puppet[:use_cached_catalog] = false
         | 
| 111 | 
            +
                  Puppet[:usecacheonfailure] = true
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                  body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
         | 
| 114 | 
            +
                  stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
         | 
| 115 | 
            +
                    status: 404, body: body, headers: {'Content-Type' => 'application/json'}
         | 
| 116 | 
            +
                  )
         | 
| 117 | 
            +
                  stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
         | 
| 118 | 
            +
                    status: 404, body: body, headers: {'Content-Type' => 'application/json'}
         | 
| 119 | 
            +
                  )
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  expect(configurer.run(pluginsync: true, :report => report)).to eq(0)
         | 
| 122 | 
            +
                  expect(report.cached_catalog_status).to eq('on_failure')
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
             | 
| 88 125 | 
             
                it "applies a cached catalog when it can't connect to the master" do
         | 
| 89 126 | 
             
                  error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
         | 
| 90 127 |  | 
| @@ -96,7 +133,8 @@ describe Puppet::Configurer do | |
| 96 133 | 
             
                end
         | 
| 97 134 |  | 
| 98 135 | 
             
                it "should initialize a transaction report if one is not provided" do
         | 
| 99 | 
            -
                   | 
| 136 | 
            +
                  # host and settings catalogs each create a report...
         | 
| 137 | 
            +
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report).twice
         | 
| 100 138 |  | 
| 101 139 | 
             
                  configurer.run
         | 
| 102 140 | 
             
                end
         | 
| @@ -192,22 +230,21 @@ describe Puppet::Configurer do | |
| 192 230 | 
             
                end
         | 
| 193 231 |  | 
| 194 232 | 
             
                it "should remove the report as a log destination when the run is finished" do
         | 
| 195 | 
            -
                   | 
| 196 | 
            -
             | 
| 197 | 
            -
                  configurer.run
         | 
| 233 | 
            +
                  configurer.run(report: report)
         | 
| 198 234 |  | 
| 199 235 | 
             
                  expect(Puppet::Util::Log.destinations).not_to include(report)
         | 
| 200 236 | 
             
                end
         | 
| 201 237 |  | 
| 202 | 
            -
                it "should return  | 
| 203 | 
            -
                   | 
| 204 | 
            -
                   | 
| 238 | 
            +
                it "should return an exit status of 2 due to the notify resource 'changing'" do
         | 
| 239 | 
            +
                  cat = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
         | 
| 240 | 
            +
                  cat.add_resource(Puppet::Type.type(:notify).new(:name => 'something changed'))
         | 
| 205 241 |  | 
| 206 | 
            -
                  expect(configurer.run).to eq( | 
| 242 | 
            +
                  expect(configurer.run(catalog: cat, report: report)).to eq(2)
         | 
| 207 243 | 
             
                end
         | 
| 208 244 |  | 
| 209 245 | 
             
                it "should return nil if catalog application fails" do
         | 
| 210 | 
            -
                   | 
| 246 | 
            +
                  expect(catalog).to receive(:apply).and_raise(Puppet::Error, 'One or more resource dependency cycles detected in graph')
         | 
| 247 | 
            +
             | 
| 211 248 | 
             
                  expect(configurer.run(catalog: catalog, report: report)).to be_nil
         | 
| 212 249 | 
             
                end
         | 
| 213 250 |  | 
| @@ -222,34 +259,28 @@ describe Puppet::Configurer do | |
| 222 259 | 
             
                end
         | 
| 223 260 |  | 
| 224 261 | 
             
                it "should include the pre-run command failure in the report" do
         | 
| 225 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 226 | 
            -
             | 
| 227 262 | 
             
                  Puppet.settings[:prerun_command] = "/my/command"
         | 
| 228 263 | 
             
                  expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
         | 
| 229 264 |  | 
| 230 | 
            -
                  expect(configurer.run).to be_nil
         | 
| 265 | 
            +
                  expect(configurer.run(report: report)).to be_nil
         | 
| 231 266 | 
             
                  expect(report.logs.find { |x| x.message =~ /Could not run command from prerun_command/ }).to be
         | 
| 232 267 | 
             
                end
         | 
| 233 268 |  | 
| 234 269 | 
             
                it "should send the transaction report even if the post-run command fails" do
         | 
| 235 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 236 | 
            -
             | 
| 237 270 | 
             
                  Puppet.settings[:postrun_command] = "/my/command"
         | 
| 238 271 | 
             
                  expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
         | 
| 239 272 | 
             
                  expect(configurer).to receive(:send_report).with(report)
         | 
| 240 273 |  | 
| 241 | 
            -
                  expect(configurer.run).to be_nil
         | 
| 274 | 
            +
                  expect(configurer.run(report: report)).to be_nil
         | 
| 242 275 | 
             
                end
         | 
| 243 276 |  | 
| 244 277 | 
             
                it "should include the post-run command failure in the report" do
         | 
| 245 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 246 | 
            -
             | 
| 247 278 | 
             
                  Puppet.settings[:postrun_command] = "/my/command"
         | 
| 248 279 | 
             
                  expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
         | 
| 249 280 |  | 
| 250 281 | 
             
                  expect(report).to receive(:<<) { |log, _| expect(log.message).to match(/Could not run command from postrun_command/) }.at_least(:once)
         | 
| 251 282 |  | 
| 252 | 
            -
                  expect(configurer.run).to be_nil
         | 
| 283 | 
            +
                  expect(configurer.run(report: report)).to be_nil
         | 
| 253 284 | 
             
                end
         | 
| 254 285 |  | 
| 255 286 | 
             
                it "should execute post-run command even if the pre-run command fails" do
         | 
| @@ -262,34 +293,28 @@ describe Puppet::Configurer do | |
| 262 293 | 
             
                end
         | 
| 263 294 |  | 
| 264 295 | 
             
                it "should finalize the report" do
         | 
| 265 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 266 | 
            -
             | 
| 267 296 | 
             
                  expect(report).to receive(:finalize_report)
         | 
| 268 | 
            -
                  configurer.run
         | 
| 297 | 
            +
                  configurer.run(report: report)
         | 
| 269 298 | 
             
                end
         | 
| 270 299 |  | 
| 271 300 | 
             
                it "should not apply the catalog if the pre-run command fails" do
         | 
| 272 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 273 | 
            -
             | 
| 274 301 | 
             
                  Puppet.settings[:prerun_command] = "/my/command"
         | 
| 275 302 | 
             
                  expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
         | 
| 276 303 |  | 
| 277 304 | 
             
                  expect_any_instance_of(Puppet::Resource::Catalog).not_to receive(:apply)
         | 
| 278 305 | 
             
                  expect(configurer).to receive(:send_report)
         | 
| 279 306 |  | 
| 280 | 
            -
                  expect(configurer.run).to be_nil
         | 
| 307 | 
            +
                  expect(configurer.run(report: report)).to be_nil
         | 
| 281 308 | 
             
                end
         | 
| 282 309 |  | 
| 283 310 | 
             
                it "should apply the catalog, send the report, and return nil if the post-run command fails" do
         | 
| 284 | 
            -
                  expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
         | 
| 285 | 
            -
             | 
| 286 311 | 
             
                  Puppet.settings[:postrun_command] = "/my/command"
         | 
| 287 312 | 
             
                  expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
         | 
| 288 313 |  | 
| 289 314 | 
             
                  expect_any_instance_of(Puppet::Resource::Catalog).to receive(:apply)
         | 
| 290 315 | 
             
                  expect(configurer).to receive(:send_report)
         | 
| 291 316 |  | 
| 292 | 
            -
                  expect(configurer.run).to be_nil
         | 
| 317 | 
            +
                  expect(configurer.run(report: report)).to be_nil
         | 
| 293 318 | 
             
                end
         | 
| 294 319 |  | 
| 295 320 | 
             
                it 'includes total time metrics in the report after successfully applying the catalog' do
         | 
| @@ -546,6 +571,15 @@ describe Puppet::Configurer do | |
| 546 571 | 
             
                end
         | 
| 547 572 | 
             
              end
         | 
| 548 573 |  | 
| 574 | 
            +
              def expects_pluginsync
         | 
| 575 | 
            +
                metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
         | 
| 576 | 
            +
                stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
         | 
| 577 | 
            +
             | 
| 578 | 
            +
                # response retains owner/group/mode due to source_permissions => use
         | 
| 579 | 
            +
                facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
         | 
| 580 | 
            +
                stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
         | 
| 581 | 
            +
              end
         | 
| 582 | 
            +
             | 
| 549 583 | 
             
              def expects_new_catalog_only(catalog)
         | 
| 550 584 | 
             
                expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
         | 
| 551 585 | 
             
                expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
         | 
| @@ -562,6 +596,7 @@ describe Puppet::Configurer do | |
| 562 596 | 
             
              end
         | 
| 563 597 |  | 
| 564 598 | 
             
              def expects_fallback_to_new_catalog(catalog)
         | 
| 599 | 
            +
                expects_pluginsync
         | 
| 565 600 | 
             
                expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
         | 
| 566 601 | 
             
                expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
         | 
| 567 602 | 
             
              end
         | 
| @@ -598,7 +633,6 @@ describe Puppet::Configurer do | |
| 598 633 | 
             
                  it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
         | 
| 599 634 | 
             
                    expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
         | 
| 600 635 | 
             
                    expects_fallback_to_new_catalog(catalog)
         | 
| 601 | 
            -
                    expect(configurer).to receive(:download_plugins)
         | 
| 602 636 |  | 
| 603 637 | 
             
                    configurer.run
         | 
| 604 638 | 
             
                  end
         | 
| @@ -636,6 +670,7 @@ describe Puppet::Configurer do | |
| 636 670 | 
             
                  it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
         | 
| 637 671 | 
             
                    expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
         | 
| 638 672 | 
             
                    expects_neither_new_or_cached_catalog
         | 
| 673 | 
            +
                    expects_pluginsync
         | 
| 639 674 |  | 
| 640 675 | 
             
                    # after failing to use a cached catalog, we'll need to pluginsync before getting
         | 
| 641 676 | 
             
                    # a new catalog, which also fails.
         | 
| @@ -656,8 +691,7 @@ describe Puppet::Configurer do | |
| 656 691 | 
             
                  end
         | 
| 657 692 |  | 
| 658 693 | 
             
                  it "applies the catalog passed as options when the catalog cache terminus is not set" do
         | 
| 659 | 
            -
                     | 
| 660 | 
            -
                    stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
         | 
| 694 | 
            +
                    expects_pluginsync
         | 
| 661 695 |  | 
| 662 696 | 
             
                    catalog.add_resource(Puppet::Resource.new('notify', 'from apply'))
         | 
| 663 697 | 
             
                    configurer.run(catalog: catalog.to_ral)
         | 
| @@ -1010,30 +1044,45 @@ describe Puppet::Configurer do | |
| 1010 1044 | 
             
                  options = {}
         | 
| 1011 1045 | 
             
                  configurer.run(options)
         | 
| 1012 1046 | 
             
                  expect(options[:report].master_used).to eq('myserver:123')
         | 
| 1047 | 
            +
                  expect(options[:report].server_used).to eq('myserver:123')
         | 
| 1013 1048 | 
             
                end
         | 
| 1014 1049 |  | 
| 1015 | 
            -
                it "should report when  | 
| 1050 | 
            +
                it "should report when usecacheonfailure is false and server is unavailable" do
         | 
| 1016 1051 | 
             
                  Puppet.settings[:server_list] = ["myserver:123"]
         | 
| 1052 | 
            +
                  Puppet[:usecacheonfailure] = false
         | 
| 1017 1053 |  | 
| 1018 1054 | 
             
                  stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: [500, "Internal Server Error"])
         | 
| 1019 1055 |  | 
| 1020 | 
            -
                  allow(Puppet).to receive(:debug)
         | 
| 1021 | 
            -
                  expect(Puppet).to receive(:debug).with("Puppet server myserver:123 is unavailable: 500 Internal Server Error")
         | 
| 1022 | 
            -
             | 
| 1023 1056 | 
             
                  expect {
         | 
| 1024 1057 | 
             
                    configurer.run
         | 
| 1025 | 
            -
                  }.to raise_error(Puppet::Error, /Could not select a functional puppet  | 
| 1058 | 
            +
                  }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list:/)
         | 
| 1059 | 
            +
             | 
| 1060 | 
            +
                  expect(@logs).to include(an_object_having_attributes(level: :err, message: /Puppet server myserver:123 is unavailable: 500 Internal Server Error/))
         | 
| 1026 1061 | 
             
                end
         | 
| 1027 1062 |  | 
| 1028 1063 | 
             
                it "should error when no servers in 'server_list' are reachable" do
         | 
| 1029 1064 | 
             
                  Puppet.settings[:server_list] = "myserver:123,someotherservername"
         | 
| 1065 | 
            +
                  Puppet[:usecacheonfailure] = false
         | 
| 1030 1066 |  | 
| 1031 1067 | 
             
                  stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
         | 
| 1032 1068 | 
             
                  stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
         | 
| 1033 1069 |  | 
| 1034 1070 | 
             
                  expect{
         | 
| 1035 1071 | 
             
                    configurer.run
         | 
| 1036 | 
            -
                  }.to raise_error(Puppet::Error, /Could not select a functional puppet  | 
| 1072 | 
            +
                  }.to raise_error(Puppet::Error, /Could not select a functional puppet server from server_list: 'myserver:123,someotherservername'/)
         | 
| 1073 | 
            +
                end
         | 
| 1074 | 
            +
             | 
| 1075 | 
            +
                it "should not error when usecacheonfailure is true and no servers in 'server_list' are reachable" do
         | 
| 1076 | 
            +
                  Puppet.settings[:server_list] = "myserver:123,someotherservername"
         | 
| 1077 | 
            +
                  Puppet[:usecacheonfailure] = true
         | 
| 1078 | 
            +
             | 
| 1079 | 
            +
                  stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 400)
         | 
| 1080 | 
            +
                  stub_request(:get, 'https://someotherservername:8140/status/v1/simple/master').to_return(status: 400)
         | 
| 1081 | 
            +
             | 
| 1082 | 
            +
                  options = {}
         | 
| 1083 | 
            +
             | 
| 1084 | 
            +
                  expect(configurer.run(options)).to eq(0)
         | 
| 1085 | 
            +
                  expect(options[:report].server_used).to be_nil
         | 
| 1037 1086 | 
             
                end
         | 
| 1038 1087 |  | 
| 1039 1088 | 
             
                it "should not make multiple node requests when the server is found" do
         |