puppet 6.16.0-universal-darwin → 6.20.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +6 -2
- data/Gemfile.lock +40 -36
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/lib/puppet/agent.rb +2 -2
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +23 -6
- data/lib/puppet/application/apply.rb +20 -21
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +70 -20
- 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/defaults.rb +113 -46
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +13 -1
- 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 +8 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +3 -7
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.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 +6 -1
- 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/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +25 -5
- 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 +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/formats.rb +2 -1
- 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/connection_adapter.rb +6 -4
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +90 -13
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +7 -6
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +1 -1
- 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/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- 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/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
- 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/model/ast_transformer.rb +1 -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/apt.rb +38 -0
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip2.rb +17 -0
- 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 +2 -1
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +3 -3
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -4
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/reports/http.rb +2 -0
- 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/settings.rb +63 -21
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +18 -13
- 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 +32 -12
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +53 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +10 -15
- 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/fact_dif.rb +62 -0
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -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 +501 -443
- data/man/man5/puppet.conf.5 +70 -24
- data/man/man8/puppet-agent.8 +8 -5
- data/man/man8/puppet-apply.8 +2 -2
- 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 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- 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/agent/cached_deferred_catalog.json +91 -0
- 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/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +263 -54
- data/spec/integration/application/apply_spec.rb +168 -149
- 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 +53 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +20 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +26 -9
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- 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 +5 -3
- 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 -17
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +3 -5
- data/spec/unit/application/config_spec.rb +224 -4
- 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/filebucket_spec.rb +0 -2
- 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 +60 -13
- 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/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- data/spec/unit/context/trusted_information_spec.rb +10 -4
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- 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_helper_spec.rb +11 -4
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/client_spec.rb +64 -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 +51 -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 +1 -2
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +42 -32
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- 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/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +76 -3
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/base_spec.rb +6 -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/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- 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 +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -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 +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -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 +3 -6
- 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/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +23 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +14 -13
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -1
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -102
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +210 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +52 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- 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/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- 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 +16 -9
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- metadata +52 -53
- 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/catalog_spec.rb +0 -6
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/face/module_spec.rb +0 -3
- data/spec/unit/man_spec.rb +0 -31
@@ -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
|
@@ -42,7 +42,6 @@ describe Puppet::Application::Filebucket do
|
|
42
42
|
describe "during setup" do
|
43
43
|
before :each do
|
44
44
|
allow(Puppet::Log).to receive(:newdestination)
|
45
|
-
allow(Puppet).to receive(:settraps)
|
46
45
|
allow(Puppet::FileBucket::Dipper).to receive(:new)
|
47
46
|
allow(@filebucket.options).to receive(:[])
|
48
47
|
end
|
@@ -157,7 +156,6 @@ describe Puppet::Application::Filebucket do
|
|
157
156
|
describe "when running" do
|
158
157
|
before :each do
|
159
158
|
allow(Puppet::Log).to receive(:newdestination)
|
160
|
-
allow(Puppet).to receive(:settraps)
|
161
159
|
allow(Puppet::FileBucket::Dipper).to receive(:new)
|
162
160
|
allow(@filebucket.options).to receive(:[])
|
163
161
|
|
@@ -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})
|
@@ -7,8 +7,10 @@ require 'timeout'
|
|
7
7
|
|
8
8
|
describe Puppet::Application do
|
9
9
|
before(:each) do
|
10
|
-
@
|
11
|
-
|
10
|
+
@appclass = Class.new(Puppet::Application) do
|
11
|
+
def handle_unknown(opt, arg); end
|
12
|
+
end
|
13
|
+
@app = @appclass.new
|
12
14
|
|
13
15
|
allow(@app).to receive(:name).and_return("test_app")
|
14
16
|
end
|
@@ -118,6 +120,11 @@ describe Puppet::Application do
|
|
118
120
|
@appclass.run_mode :agent
|
119
121
|
expect(@appclass.run_mode.name).to eq(:agent)
|
120
122
|
end
|
123
|
+
|
124
|
+
it "considers :server to be master" do
|
125
|
+
@appclass.run_mode :server
|
126
|
+
expect(@appclass.run_mode).to be_master
|
127
|
+
end
|
121
128
|
end
|
122
129
|
|
123
130
|
describe ".environment_mode" do
|
@@ -147,7 +154,7 @@ describe Puppet::Application do
|
|
147
154
|
describe "when dealing with run_mode" do
|
148
155
|
|
149
156
|
class TestApp < Puppet::Application
|
150
|
-
run_mode :
|
157
|
+
run_mode :server
|
151
158
|
def run_command
|
152
159
|
# no-op
|
153
160
|
end
|
@@ -159,16 +166,16 @@ describe Puppet::Application do
|
|
159
166
|
app = TestApp.new
|
160
167
|
app.initialize_app_defaults
|
161
168
|
|
162
|
-
expect(Puppet.run_mode).to
|
169
|
+
expect(Puppet.run_mode).to be_server
|
163
170
|
end
|
164
171
|
|
165
172
|
it "should sadly and frighteningly allow run_mode to change at runtime via #run" do
|
166
173
|
app = TestApp.new
|
167
174
|
app.run
|
168
175
|
|
169
|
-
expect(app.class.run_mode.name).to eq(:
|
176
|
+
expect(app.class.run_mode.name).to eq(:server)
|
170
177
|
|
171
|
-
expect(Puppet.run_mode).to
|
178
|
+
expect(Puppet.run_mode).to be_server
|
172
179
|
end
|
173
180
|
end
|
174
181
|
|
@@ -506,6 +513,40 @@ describe Puppet::Application do
|
|
506
513
|
|
507
514
|
expect { @app.configure_indirector_routes }.to raise_error(Puppet::Error, /mapping values are not allowed/)
|
508
515
|
end
|
516
|
+
|
517
|
+
it "should treat master routes on server application" do
|
518
|
+
allow(@app).to receive(:name).and_return("server")
|
519
|
+
|
520
|
+
Puppet[:route_file] = tmpfile('routes')
|
521
|
+
File.open(Puppet[:route_file], 'w') do |f|
|
522
|
+
f.print <<-ROUTES
|
523
|
+
master:
|
524
|
+
node:
|
525
|
+
terminus: exec
|
526
|
+
ROUTES
|
527
|
+
end
|
528
|
+
|
529
|
+
@app.configure_indirector_routes
|
530
|
+
|
531
|
+
expect(Puppet::Node.indirection.terminus_class).to eq('exec')
|
532
|
+
end
|
533
|
+
|
534
|
+
it "should treat server routes on master application" do
|
535
|
+
allow(@app).to receive(:name).and_return("master")
|
536
|
+
|
537
|
+
Puppet[:route_file] = tmpfile('routes')
|
538
|
+
File.open(Puppet[:route_file], 'w') do |f|
|
539
|
+
f.print <<-ROUTES
|
540
|
+
server:
|
541
|
+
node:
|
542
|
+
terminus: exec
|
543
|
+
ROUTES
|
544
|
+
end
|
545
|
+
|
546
|
+
@app.configure_indirector_routes
|
547
|
+
|
548
|
+
expect(Puppet::Node.indirection.terminus_class).to eq('exec')
|
549
|
+
end
|
509
550
|
end
|
510
551
|
|
511
552
|
describe "when running" do
|
@@ -555,13 +596,6 @@ describe Puppet::Application do
|
|
555
596
|
end
|
556
597
|
|
557
598
|
it "should raise an error if dispatch returns no command" do
|
558
|
-
allow(@app).to receive(:get_command).and_return(nil)
|
559
|
-
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
560
|
-
expect { @app.run }.to exit_with 1
|
561
|
-
end
|
562
|
-
|
563
|
-
it "should raise an error if dispatch returns an invalid command" do
|
564
|
-
allow(@app).to receive(:get_command).and_return(:this_function_doesnt_exist)
|
565
599
|
expect(Puppet).to receive(:send_log).with(:err, "Could not run: No valid command or main")
|
566
600
|
expect { @app.run }.to exit_with 1
|
567
601
|
end
|
@@ -679,5 +713,18 @@ describe Puppet::Application do
|
|
679
713
|
|
680
714
|
@app.handle_logdest_arg(nil)
|
681
715
|
end
|
716
|
+
|
717
|
+
it "accepts multiple destinations as a comma sepparated list" do
|
718
|
+
dest1 = '/tmp/path1'
|
719
|
+
dest2 = 'console'
|
720
|
+
dest3 = '/tmp/path2'
|
721
|
+
dest_args = [dest1, dest2, dest3].join(' , ')
|
722
|
+
|
723
|
+
[dest1, dest2, dest3].each do |dest|
|
724
|
+
expect(Puppet::Util::Log).to receive(:newdestination).with(dest)
|
725
|
+
end
|
726
|
+
|
727
|
+
@app.handle_logdest_arg(dest_args)
|
728
|
+
end
|
682
729
|
end
|
683
730
|
end
|
@@ -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
|