puppet 6.14.0 → 6.19.0
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 -7
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -34
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application/agent.rb +25 -9
- 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/filebucket.rb +5 -14
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +3 -3
- data/lib/puppet/configurer.rb +68 -24
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +1 -1
- 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 +141 -41
- data/lib/puppet/environments.rb +55 -15
- 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 +2 -2
- 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 +17 -13
- 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/call.rb +1 -1
- 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/reduce.rb +2 -4
- 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 +3 -0
- data/lib/puppet/http/client.rb +215 -60
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +43 -3
- data/lib/puppet/http/resolver/server_list.rb +66 -24
- data/lib/puppet/http/resolver/settings.rb +21 -1
- data/lib/puppet/http/resolver/srv.rb +28 -2
- data/lib/puppet/http/response.rb +82 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +70 -2
- data/lib/puppet/http/service/ca.rb +71 -9
- data/lib/puppet/http/service/compiler.rb +214 -12
- data/lib/puppet/http/service/file_server.rb +106 -5
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/service/report.rb +36 -3
- data/lib/puppet/http/session.rb +60 -8
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +2 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +2 -1
- data/lib/puppet/indirector/facts/yaml.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- 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 +6 -4
- 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/node/rest.rb +2 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/rest.rb +7 -1
- data/lib/puppet/indirector/status/rest.rb +2 -1
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/metatype/manager.rb +80 -80
- 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/base_pool.rb +6 -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/pool.rb +2 -4
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +22 -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 +30 -31
- 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 +43 -33
- 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 +18 -9
- 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 +24 -15
- 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/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +98 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +61 -14
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +45 -9
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +11 -2
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +101 -20
- data/lib/puppet/provider/package/zypper.rb +62 -1
- data/lib/puppet/provider/service/systemd.rb +22 -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 +15 -9
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/runtime.rb +25 -2
- data/lib/puppet/settings.rb +20 -6
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- 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 +79 -37
- 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 +14 -10
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +35 -13
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +41 -3
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -29
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +13 -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/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +13 -7
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/adsi.rb +2 -2
- 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/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +5 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +627 -507
- data/man/man5/puppet.conf.5 +93 -20
- 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/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -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-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/application/agent_spec.rb +479 -0
- data/spec/integration/application/apply_spec.rb +279 -150
- 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 +239 -0
- 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 +123 -0
- 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 +39 -40
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/network/http_pool_spec.rb +84 -19
- data/spec/integration/node/environment_spec.rb +15 -0
- 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 +8 -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 -7
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +127 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/device_spec.rb +2 -2
- 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 +22 -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 +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 +87 -38
- 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/defaults_spec.rb +24 -1
- data/spec/unit/environments_spec.rb +107 -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 +11 -2
- data/spec/unit/http/client_spec.rb +173 -59
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +44 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +27 -5
- data/spec/unit/http/service/compiler_spec.rb +186 -9
- data/spec/unit/http/service/file_server_spec.rb +37 -6
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +5 -4
- data/spec/unit/http/service_spec.rb +3 -4
- data/spec/unit/http/session_spec.rb +48 -12
- 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_bucket_file/rest_spec.rb +82 -2
- 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 +3 -3
- 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 +33 -0
- 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/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +107 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +274 -1
- 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 +95 -18
- 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 +85 -3
- data/spec/unit/puppet_pal_2pec.rb +11 -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 +70 -52
- 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 +44 -22
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +90 -14
- 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 +7 -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/at_fork_spec.rb +2 -2
- 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/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +83 -47
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- 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/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +90 -51
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/faces/plugin_spec.rb +0 -63
- 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 -64
- 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
@@ -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
|
@@ -148,7 +186,7 @@ describe Puppet::Configurer do
|
|
148
186
|
configurer = Puppet::Configurer.new("test_tuuid", "test_jid")
|
149
187
|
|
150
188
|
report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
|
151
|
-
expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid').and_return(report)
|
189
|
+
expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid', anything).and_return(report)
|
152
190
|
expect(configurer).to receive(:send_report).with(report)
|
153
191
|
|
154
192
|
configurer.run
|
@@ -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
|
data/spec/unit/confine_spec.rb
CHANGED
@@ -54,10 +54,11 @@ describe Puppet::Confine do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should log failing confines with the label and message" do
|
57
|
+
Puppet[:log_level] = 'debug'
|
57
58
|
allow(@confine).to receive(:pass?).and_return(false)
|
58
59
|
expect(@confine).to receive(:message).and_return("My message")
|
59
60
|
expect(@confine).to receive(:label).and_return("Mylabel")
|
60
|
-
expect(Puppet).to receive(:debug).
|
61
|
+
expect(Puppet).to receive(:debug) { |&b| expect(b.call).to eq("Mylabel: My message") }
|
61
62
|
@confine.valid?
|
62
63
|
end
|
63
64
|
end
|
@@ -41,8 +41,12 @@ describe Puppet::Context::TrustedInformation, :unless => RUBY_PLATFORM == 'java'
|
|
41
41
|
}
|
42
42
|
|
43
43
|
def allow_external_trusted_data(certname, data)
|
44
|
-
|
45
|
-
|
44
|
+
command = 'generate_data.sh'
|
45
|
+
Puppet[:trusted_external_command] = command
|
46
|
+
# The expand_path bit is necessary b/c :trusted_external_command is a
|
47
|
+
# file_or_directory setting, and file_or_directory settings automatically
|
48
|
+
# expand the given path.
|
49
|
+
allow(Puppet::Util::Execution).to receive(:execute).with([File.expand_path(command), certname], anything).and_return(JSON.dump(data))
|
46
50
|
end
|
47
51
|
|
48
52
|
it "defaults external to an empty hash" do
|
@@ -90,6 +94,25 @@ describe Puppet::Context::TrustedInformation, :unless => RUBY_PLATFORM == 'java'
|
|
90
94
|
|
91
95
|
expect(trusted.external).to eq(external_data)
|
92
96
|
end
|
97
|
+
|
98
|
+
it 'does not run the trusted external command when creating a trusted context' do
|
99
|
+
Puppet[:trusted_external_command] = '/usr/bin/generate_data.sh'
|
100
|
+
|
101
|
+
expect(Puppet::Util::Execution).to receive(:execute).never
|
102
|
+
Puppet::Context::TrustedInformation.remote(true, 'cert name', cert)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'only runs the trusted external command the first time it is invoked' do
|
106
|
+
command = 'generate_data.sh'
|
107
|
+
Puppet[:trusted_external_command] = command
|
108
|
+
|
109
|
+
# See allow_external_trusted_data to understand why expand_path is necessary
|
110
|
+
expect(Puppet::Util::Execution).to receive(:execute).with([File.expand_path(command), 'cert name'], anything).and_return(JSON.dump(external_data)).once
|
111
|
+
|
112
|
+
trusted = Puppet::Context::TrustedInformation.remote(true, 'cert name', cert)
|
113
|
+
trusted.external
|
114
|
+
trusted.external
|
115
|
+
end
|
93
116
|
end
|
94
117
|
|
95
118
|
context "when local" do
|
data/spec/unit/daemon_spec.rb
CHANGED
@@ -32,13 +32,17 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
32
32
|
let(:pidfile) { double("PidFile", :lock => true, :unlock => true, :file_path => 'fake.pid') }
|
33
33
|
let(:scheduler) { RecordingScheduler.new }
|
34
34
|
|
35
|
-
let(:daemon) { Puppet::Daemon.new(pidfile, scheduler) }
|
35
|
+
let(:daemon) { Puppet::Daemon.new(agent, pidfile, scheduler) }
|
36
36
|
|
37
37
|
before(:each) do
|
38
38
|
allow(Signal).to receive(:trap)
|
39
39
|
allow(daemon).to receive(:close_streams).and_return(nil)
|
40
40
|
end
|
41
41
|
|
42
|
+
it "should fail when no agent is provided" do
|
43
|
+
expect { Puppet::Daemon.new(nil, pidfile, scheduler) }.to raise_error(Puppet::DevError)
|
44
|
+
end
|
45
|
+
|
42
46
|
it "should reopen the Log logs when told to reopen logs" do
|
43
47
|
expect(Puppet::Util::Log).to receive(:reopen)
|
44
48
|
daemon.reopen_logs
|
@@ -72,65 +76,21 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
72
76
|
allow(daemon).to receive(:set_signal_traps)
|
73
77
|
end
|
74
78
|
|
75
|
-
it "should fail if it has neither agent nor server" do
|
76
|
-
expect { daemon.start }.to raise_error(Puppet::DevError)
|
77
|
-
end
|
78
|
-
|
79
79
|
it "should create its pidfile" do
|
80
80
|
expect(pidfile).to receive(:lock).and_return(true)
|
81
|
-
|
82
|
-
daemon.agent = agent
|
83
81
|
daemon.start
|
84
82
|
end
|
85
83
|
|
86
84
|
it "should fail if it cannot lock" do
|
87
85
|
expect(pidfile).to receive(:lock).and_return(false)
|
88
|
-
daemon.agent = agent
|
89
|
-
|
90
86
|
expect { daemon.start }.to raise_error(RuntimeError, "Could not create PID file: #{pidfile.file_path}")
|
91
87
|
end
|
92
88
|
|
93
|
-
it "should start its server if one is configured" do
|
94
|
-
daemon.server = server
|
95
|
-
|
96
|
-
expect(server).to receive(:start)
|
97
|
-
|
98
|
-
daemon.start
|
99
|
-
end
|
100
|
-
|
101
89
|
it "disables the reparse of configs if the filetimeout is 0" do
|
102
90
|
Puppet[:filetimeout] = 0
|
103
|
-
daemon.agent = agent
|
104
|
-
|
105
91
|
daemon.start
|
106
|
-
|
107
92
|
expect(scheduler.jobs[0]).not_to be_enabled
|
108
93
|
end
|
109
|
-
|
110
|
-
it "disables the agent run when there is no agent" do
|
111
|
-
Puppet[:filetimeout] = 0
|
112
|
-
daemon.server = server
|
113
|
-
|
114
|
-
daemon.start
|
115
|
-
|
116
|
-
expect(scheduler.jobs[1]).not_to be_enabled
|
117
|
-
end
|
118
|
-
|
119
|
-
it "waits for the server to shutdown when there is one" do
|
120
|
-
daemon.server = server
|
121
|
-
|
122
|
-
expect(server).to receive(:wait_for_shutdown)
|
123
|
-
|
124
|
-
daemon.start
|
125
|
-
end
|
126
|
-
|
127
|
-
it "waits for the server to shutdown when there is one" do
|
128
|
-
daemon.server = server
|
129
|
-
|
130
|
-
expect(server).to receive(:wait_for_shutdown)
|
131
|
-
|
132
|
-
daemon.start
|
133
|
-
end
|
134
94
|
end
|
135
95
|
|
136
96
|
describe "when stopping" do
|
@@ -146,14 +106,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
146
106
|
without_warnings { Puppet::Application = Puppet::Application.superclass }
|
147
107
|
end
|
148
108
|
|
149
|
-
it "should stop its server if one is configured" do
|
150
|
-
expect(server).to receive(:stop)
|
151
|
-
|
152
|
-
daemon.server = server
|
153
|
-
|
154
|
-
expect { daemon.stop }.to exit_with 0
|
155
|
-
end
|
156
|
-
|
157
109
|
it 'should request a stop from Puppet::Application' do
|
158
110
|
expect(Puppet::Application).to receive(:stop!)
|
159
111
|
expect { daemon.stop }.to exit_with 0
|
@@ -161,7 +113,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
161
113
|
|
162
114
|
it "should remove its pidfile" do
|
163
115
|
expect(pidfile).to receive(:unlock)
|
164
|
-
|
165
116
|
expect { daemon.stop }.to exit_with 0
|
166
117
|
end
|
167
118
|
|
@@ -188,8 +139,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
188
139
|
expect(agent).to receive(:run).with({:splay => false}).and_raise(Puppet::LockError, 'Failed to aquire lock')
|
189
140
|
expect(Puppet).to receive(:notice).with('Not triggering already-running agent')
|
190
141
|
|
191
|
-
daemon.agent = agent
|
192
|
-
|
193
142
|
daemon.reload
|
194
143
|
end
|
195
144
|
|
@@ -197,8 +146,6 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
197
146
|
expect(agent).to receive(:run).with({:splay => false})
|
198
147
|
expect(Puppet).not_to receive(:notice).with('Not triggering already-running agent')
|
199
148
|
|
200
|
-
daemon.agent = agent
|
201
|
-
|
202
149
|
daemon.reload
|
203
150
|
end
|
204
151
|
end
|
@@ -220,15 +167,11 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
220
167
|
|
221
168
|
it "should reexec itself if no agent is available" do
|
222
169
|
expect(daemon).to receive(:reexec)
|
223
|
-
|
224
170
|
daemon.restart
|
225
171
|
end
|
226
172
|
|
227
173
|
it "should reexec itself if the agent is not running" do
|
228
|
-
expect(agent).to receive(:running?).and_return(false)
|
229
|
-
daemon.agent = agent
|
230
174
|
expect(daemon).to receive(:reexec)
|
231
|
-
|
232
175
|
daemon.restart
|
233
176
|
end
|
234
177
|
end
|
@@ -247,14 +190,12 @@ describe Puppet::Daemon, :unless => Puppet::Util::Platform.windows? do
|
|
247
190
|
it "should shut down without exiting" do
|
248
191
|
daemon.argv = %w{foo}
|
249
192
|
expect(daemon).to receive(:stop).with(:exit => false)
|
250
|
-
|
251
193
|
daemon.reexec
|
252
194
|
end
|
253
195
|
|
254
196
|
it "should call 'exec' with the original executable and arguments" do
|
255
197
|
daemon.argv = %w{foo}
|
256
198
|
expect(daemon).to receive(:exec).with($0 + " foo")
|
257
|
-
|
258
199
|
daemon.reexec
|
259
200
|
end
|
260
201
|
end
|