puppet 6.14.0-x64-mingw32 → 6.19.0-x64-mingw32
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
@@ -1,8 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Handle HTTP redirects
|
5
|
+
#
|
1
6
|
class Puppet::HTTP::Redirector
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
#
|
10
|
+
# Create a new redirect handler
|
11
|
+
#
|
12
|
+
# @param [Integer] redirect_limit maximum number of redirects allowed
|
13
|
+
#
|
2
14
|
def initialize(redirect_limit)
|
3
15
|
@redirect_limit = redirect_limit
|
4
16
|
end
|
5
17
|
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
#
|
21
|
+
# Determine of the HTTP response code indicates a redirect
|
22
|
+
#
|
23
|
+
# @param [Net::HTTP] request request that received the response
|
24
|
+
# @param [Puppet::HTTP::Response] response
|
25
|
+
#
|
26
|
+
# @return [Boolean] true if the response code is 301, 302, or 307.
|
27
|
+
#
|
6
28
|
def redirect?(request, response)
|
7
29
|
# Net::HTTPRedirection is not used because historically puppet
|
8
30
|
# has only handled these, and we're not a browser
|
@@ -14,17 +36,23 @@ class Puppet::HTTP::Redirector
|
|
14
36
|
end
|
15
37
|
end
|
16
38
|
|
39
|
+
#
|
40
|
+
# @api private
|
41
|
+
#
|
42
|
+
# Implement the HTTP request redirection
|
43
|
+
#
|
44
|
+
# @param [Net::HTTP] request request that has been redirected
|
45
|
+
# @param [Puppet::HTTP::Response] response
|
46
|
+
# @param [Integer] redirects the current number of redirects
|
47
|
+
#
|
48
|
+
# @return [Net::HTTP] A new request based on the original request, but with
|
49
|
+
# the redirected location
|
50
|
+
#
|
17
51
|
def redirect_to(request, response, redirects)
|
18
52
|
raise Puppet::HTTP::TooManyRedirects.new(request.uri) if redirects >= @redirect_limit
|
19
53
|
|
20
54
|
location = parse_location(response)
|
21
|
-
|
22
|
-
url = request.uri.dup
|
23
|
-
url.path = location.path
|
24
|
-
else
|
25
|
-
url = location.dup
|
26
|
-
end
|
27
|
-
url.query = request.uri.query
|
55
|
+
url = request.uri.merge(location)
|
28
56
|
|
29
57
|
new_request = request.class.new(url)
|
30
58
|
new_request.body = request.body
|
@@ -32,6 +60,14 @@ class Puppet::HTTP::Redirector
|
|
32
60
|
new_request[header] = value
|
33
61
|
end
|
34
62
|
|
63
|
+
# mimic private Net::HTTP#addr_port
|
64
|
+
new_request['Host'] = if (location.scheme == 'https' && location.port == 443) ||
|
65
|
+
(location.scheme == 'http' && location.port == 80)
|
66
|
+
location.host
|
67
|
+
else
|
68
|
+
"#{location.host}:#{location.port}"
|
69
|
+
end
|
70
|
+
|
35
71
|
new_request
|
36
72
|
end
|
37
73
|
|
data/lib/puppet/http/resolver.rb
CHANGED
@@ -1,18 +1,58 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Resolver base class. Each resolver represents a different strategy for
|
5
|
+
# resolving a service name into a list of candidate servers and ports.
|
6
|
+
#
|
7
|
+
# @abstract Subclass and override {#resolve} to create a new resolver.
|
8
|
+
#
|
1
9
|
class Puppet::HTTP::Resolver
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
# Create a new resolver
|
14
|
+
#
|
15
|
+
# @param [Puppet::HTTP::Client] client
|
16
|
+
#
|
2
17
|
def initialize(client)
|
3
18
|
@client = client
|
4
19
|
end
|
5
20
|
|
6
|
-
|
21
|
+
#
|
22
|
+
# @api private
|
23
|
+
#
|
24
|
+
# Return a working server/port for the resolver. This is the base
|
25
|
+
# implementation and is meant to be a placeholder.
|
26
|
+
#
|
27
|
+
# @param [Puppet::HTTP::Session] session
|
28
|
+
# @param [Symbol] name the service to resolve
|
29
|
+
# @param [Puppet::SSL::SSLContext] ssl_context (nil) optional ssl context to
|
30
|
+
# use when creating a connection
|
31
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
32
|
+
# to cancel resolution.
|
33
|
+
#
|
34
|
+
# @raise [NotImplementedError] this base class is not implemented
|
35
|
+
#
|
36
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
7
37
|
raise NotImplementedError
|
8
38
|
end
|
9
39
|
|
40
|
+
#
|
41
|
+
# @api private
|
42
|
+
#
|
43
|
+
# Check a given connection to establish if it can be relied on for future use
|
44
|
+
#
|
45
|
+
# @param [Puppet::HTTP::Session] session
|
46
|
+
# @param [Puppet::HTTP::Service] service
|
47
|
+
# @param [Puppet::SSL::SSLContext] ssl_context
|
48
|
+
#
|
49
|
+
# @return [Boolean] Returns true if a connection is successful, false otherwise
|
50
|
+
#
|
10
51
|
def check_connection?(session, service, ssl_context: nil)
|
11
52
|
service.connect(ssl_context: ssl_context)
|
12
53
|
return true
|
13
54
|
rescue Puppet::HTTP::ConnectionError => e
|
14
|
-
|
15
|
-
Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
|
55
|
+
Puppet.log_exception(e, "Connection to #{service.url} failed, trying next route: #{e.message}")
|
16
56
|
return false
|
17
57
|
end
|
18
58
|
end
|
@@ -1,4 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Use the server_list setting to resolve a service. This resolver is only used
|
5
|
+
# if server_list is set either on the command line or in the configuration file.
|
6
|
+
#
|
1
7
|
class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
#
|
11
|
+
# @param [Puppet::HTTP::Client] client
|
12
|
+
# @param [Array<String>] server_list_setting array of servers set via the
|
13
|
+
# configuration or the command line
|
14
|
+
# @param [Integer] default_port if a port is not set for a server in
|
15
|
+
# server_list, use this port
|
16
|
+
# @param [Array<Symbol>] services array of services that server_list can be
|
17
|
+
# used to resolve. If a service is not included in this array, this resolver
|
18
|
+
# will return nil.
|
19
|
+
#
|
2
20
|
def initialize(client, server_list_setting:, default_port:, services: )
|
3
21
|
@client = client
|
4
22
|
@server_list_setting = server_list_setting
|
@@ -6,33 +24,57 @@ class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
|
|
6
24
|
@services = services
|
7
25
|
end
|
8
26
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
27
|
+
#
|
28
|
+
# @api private
|
29
|
+
#
|
30
|
+
# Walk the server_list to find a server and port that will connect successfully.
|
31
|
+
#
|
32
|
+
# @param [Puppet::HTTP::Session] session <description>
|
33
|
+
# @param [Symbol] name the name of the service being resolved
|
34
|
+
# @param [Puppet::SSL::SSLContext] ssl_context
|
35
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
36
|
+
# to cancel resolution.
|
37
|
+
#
|
38
|
+
# @return [nil] return nil if the service to be resolved does not support
|
39
|
+
# server_list
|
40
|
+
# @return [Puppet::HTTP::Service] a validated service to use for future HTTP
|
41
|
+
# requests
|
42
|
+
#
|
43
|
+
# @raise [Puppet::Error] raise if none of the servers defined in server_list
|
44
|
+
# are available
|
45
|
+
#
|
46
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
47
|
+
# If we're configured to use an explicit service host, e.g. report_server
|
48
|
+
# then don't use server_list to resolve the `:report` service.
|
49
|
+
return nil unless @services.include?(name)
|
50
|
+
|
51
|
+
# If we resolved the URL already, use its host & port for the service
|
52
|
+
if @resolved_url
|
53
|
+
return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Return the first simple service status endpoint we can connect to
|
57
|
+
@server_list_setting.value.each do |server|
|
58
|
+
host = server[0]
|
59
|
+
port = server[1] || @default_port
|
60
|
+
|
61
|
+
service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port)
|
62
|
+
begin
|
63
|
+
service.get_simple_status(ssl_context: ssl_context)
|
64
|
+
@resolved_url = service.url
|
65
|
+
return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port)
|
66
|
+
rescue Puppet::HTTP::ResponseError => detail
|
67
|
+
Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
|
68
|
+
{ host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason })
|
69
|
+
rescue Puppet::HTTP::HTTPError => detail
|
70
|
+
Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail})
|
18
71
|
end
|
19
|
-
raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: @server_list_setting.print(@server_list_setting.value) }
|
20
|
-
else
|
21
|
-
return nil
|
22
72
|
end
|
23
|
-
end
|
24
73
|
|
25
|
-
|
26
|
-
|
27
|
-
return true if response.success?
|
74
|
+
# don't fallback to other resolvers
|
75
|
+
canceled_handler.call(true) if canceled_handler
|
28
76
|
|
29
|
-
|
30
|
-
|
31
|
-
return false
|
32
|
-
rescue => detail
|
33
|
-
session.add_exception(detail)
|
34
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
35
|
-
Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
|
36
|
-
return false
|
77
|
+
# not found
|
78
|
+
nil
|
37
79
|
end
|
38
80
|
end
|
@@ -1,5 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Resolve a service using settings. This is the default resolver if none of the
|
5
|
+
# other resolvers find a functional connection.
|
6
|
+
#
|
1
7
|
class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
|
2
|
-
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
#
|
11
|
+
# Resolve a service using the default server and port settings for this service.
|
12
|
+
#
|
13
|
+
# @param [Puppet::HTTP::Session] session
|
14
|
+
# @param [Symbol] name the name of the service to be resolved
|
15
|
+
# @param [Puppet::SSL::SSLContext] ssl_context
|
16
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
17
|
+
# to cancel resolution.
|
18
|
+
#
|
19
|
+
# @return [Puppet::HTTP::Service] if the service successfully connects,
|
20
|
+
# return it. Otherwise, return nil.
|
21
|
+
#
|
22
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
3
23
|
service = Puppet::HTTP::Service.create_service(@client, session, name)
|
4
24
|
check_connection?(session, service, ssl_context: ssl_context) ? service : nil
|
5
25
|
end
|
@@ -1,11 +1,37 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Resolve a service using SRV
|
5
|
+
#
|
1
6
|
class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
#
|
10
|
+
# @param [Puppet::HTTP::Client] client
|
11
|
+
# @param [String] domain srv domain
|
12
|
+
# @param [Resolv::DNS] dns
|
13
|
+
#
|
2
14
|
def initialize(client, domain:, dns: Resolv::DNS.new)
|
3
15
|
@client = client
|
4
16
|
@srv_domain = domain
|
5
17
|
@delegate = Puppet::Network::Resolver.new(dns)
|
6
18
|
end
|
7
19
|
|
8
|
-
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
#
|
23
|
+
# Walk the available srv records and return the first that successfully connects
|
24
|
+
#
|
25
|
+
# @param [Puppet::HTTP::Session] session
|
26
|
+
# @param [Symbol] name the service being resolved
|
27
|
+
# @param [Puppet::SSL::SSLContext] ssl_context
|
28
|
+
# @param [Proc] canceled_handler (nil) optional callback allowing a resolver
|
29
|
+
# to cancel resolution.
|
30
|
+
#
|
31
|
+
# @return [Puppet::HTTP::Service] if an available service is found, return
|
32
|
+
# it. Return nil otherwise.
|
33
|
+
#
|
34
|
+
def resolve(session, name, ssl_context: nil, canceled_handler: nil)
|
9
35
|
# Here we pass our HTTP service name as the DNS SRV service name
|
10
36
|
# This is fine for :ca, but note that :puppet and :file are handled
|
11
37
|
# specially in `each_srv_record`.
|
@@ -14,6 +40,6 @@ class Puppet::HTTP::Resolver::SRV < Puppet::HTTP::Resolver
|
|
14
40
|
return service if check_connection?(session, service, ssl_context: ssl_context)
|
15
41
|
end
|
16
42
|
|
17
|
-
|
43
|
+
nil
|
18
44
|
end
|
19
45
|
end
|
data/lib/puppet/http/response.rb
CHANGED
@@ -1,37 +1,118 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# Represents the response returned from the server from an HTTP request
|
5
|
+
#
|
1
6
|
class Puppet::HTTP::Response
|
2
|
-
|
7
|
+
# @api private
|
8
|
+
# @return [Net::HTTP] the Net::HTTP response
|
9
|
+
attr_reader :nethttp
|
3
10
|
|
11
|
+
# @api private
|
12
|
+
# @return [URI] the response uri
|
13
|
+
attr_reader :url
|
14
|
+
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
18
|
+
# Object to represent the response returned from an HTTP request
|
19
|
+
#
|
20
|
+
# @param [Net::HTTP] nethttp the request response
|
21
|
+
# @param [URI] url
|
22
|
+
#
|
4
23
|
def initialize(nethttp, url)
|
5
24
|
@nethttp = nethttp
|
6
25
|
@url = url
|
7
26
|
end
|
8
27
|
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
# Extract the response code
|
32
|
+
#
|
33
|
+
# @return [Integer] Response code for the request
|
34
|
+
#
|
9
35
|
def code
|
10
36
|
@nethttp.code.to_i
|
11
37
|
end
|
12
38
|
|
39
|
+
#
|
40
|
+
# @api private
|
41
|
+
#
|
42
|
+
# Extract the response message
|
43
|
+
#
|
44
|
+
# @return [String] Response message for the request
|
45
|
+
#
|
13
46
|
def reason
|
14
47
|
@nethttp.message
|
15
48
|
end
|
16
49
|
|
50
|
+
#
|
51
|
+
# @api private
|
52
|
+
#
|
53
|
+
# Returns the entire response body. Can be used instead of
|
54
|
+
# Puppet::HTTP::Response.read_body, but both methods cannot be used for the
|
55
|
+
# same response.
|
56
|
+
#
|
57
|
+
# @return [String] Response body for the request
|
58
|
+
#
|
17
59
|
def body
|
18
60
|
@nethttp.body
|
19
61
|
end
|
20
62
|
|
63
|
+
#
|
64
|
+
# @api private
|
65
|
+
#
|
66
|
+
# Streams the response body to the caller in chunks. Can be used instead of
|
67
|
+
# Puppet::HTTP::Response.body, but both methods cannot be used for the same
|
68
|
+
# response.
|
69
|
+
#
|
70
|
+
# @yield [String] Streams the response body in chunks
|
71
|
+
#
|
72
|
+
# @raise [ArgumentError] raise if a block is not given
|
73
|
+
#
|
21
74
|
def read_body(&block)
|
22
75
|
raise ArgumentError, "A block is required" unless block_given?
|
23
76
|
|
24
77
|
@nethttp.read_body(&block)
|
25
78
|
end
|
26
79
|
|
80
|
+
#
|
81
|
+
# @api private
|
82
|
+
#
|
83
|
+
# Check if the request received a response of success
|
84
|
+
#
|
85
|
+
# @return [Boolean] Returns true if the response indicates success
|
86
|
+
#
|
27
87
|
def success?
|
28
88
|
@nethttp.is_a?(Net::HTTPSuccess)
|
29
89
|
end
|
30
90
|
|
91
|
+
# @api private
|
92
|
+
#
|
93
|
+
# Get a header case-insensitively.
|
94
|
+
# @param [String] name The header name
|
95
|
+
# @return [String] The header value
|
96
|
+
#
|
31
97
|
def [](name)
|
32
98
|
@nethttp[name]
|
33
99
|
end
|
34
100
|
|
101
|
+
# @api private
|
102
|
+
#
|
103
|
+
# Yield each header name and value. Returns an enumerator if no block is given.
|
104
|
+
#
|
105
|
+
# @yieldparam [String] header name
|
106
|
+
# @yieldparam [String] header value
|
107
|
+
#
|
108
|
+
def each_header(&block)
|
109
|
+
@nethttp.each_header(&block)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @api private
|
113
|
+
#
|
114
|
+
# Drain the response body.
|
115
|
+
#
|
35
116
|
def drain
|
36
117
|
body
|
37
118
|
true
|
@@ -1,12 +1,37 @@
|
|
1
1
|
require 'date'
|
2
2
|
require 'time'
|
3
3
|
|
4
|
+
#
|
5
|
+
# @api private
|
6
|
+
#
|
7
|
+
# Parse information relating to responses containing a Retry-After headers
|
8
|
+
#
|
4
9
|
class Puppet::HTTP::RetryAfterHandler
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
# Create a handler to allow the system to sleep between HTTP requests
|
14
|
+
#
|
15
|
+
# @param [Integer] retry_limit number of retries allowed
|
16
|
+
# @param [Integer] max_sleep maximum sleep time allowed
|
17
|
+
#
|
5
18
|
def initialize(retry_limit, max_sleep)
|
6
19
|
@retry_limit = retry_limit
|
7
20
|
@max_sleep = max_sleep
|
8
21
|
end
|
9
22
|
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
#
|
26
|
+
# Does the response from the server tell us to wait until we attempt the next
|
27
|
+
# retry?
|
28
|
+
#
|
29
|
+
# @param [Net::HTTP] request
|
30
|
+
# @param [Puppet::HTTP::Response] response
|
31
|
+
#
|
32
|
+
# @return [Boolean] Return true if the response code is 429 or 503, return
|
33
|
+
# false otherwise
|
34
|
+
#
|
10
35
|
def retry_after?(request, response)
|
11
36
|
case response.code
|
12
37
|
when 429, 503
|
@@ -16,6 +41,20 @@ class Puppet::HTTP::RetryAfterHandler
|
|
16
41
|
end
|
17
42
|
end
|
18
43
|
|
44
|
+
#
|
45
|
+
# @api private
|
46
|
+
#
|
47
|
+
# The amount of time to wait before attempting a retry
|
48
|
+
#
|
49
|
+
# @param [Net::HTTP] request
|
50
|
+
# @param [Puppet::HTTP::Response] response
|
51
|
+
# @param [Integer] retries number of retries attempted so far
|
52
|
+
#
|
53
|
+
# @return [Integer] the amount of time to wait
|
54
|
+
#
|
55
|
+
# @raise [Puppet::HTTP::TooManyRetryAfters] raise if we have hit our retry
|
56
|
+
# limit
|
57
|
+
#
|
19
58
|
def retry_after_interval(request, response, retries)
|
20
59
|
raise Puppet::HTTP::TooManyRetryAfters.new(request.uri) if retries >= @retry_limit
|
21
60
|
|