puppet 6.13.0-x86-mingw32 → 6.18.0-x86-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/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -32
- data/README.md +17 -24
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +58 -57
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +10 -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 +92 -12
- data/lib/puppet/environments.rb +4 -5
- 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/plugin.rb +2 -2
- data/lib/puppet/feature/base.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/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- 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 +263 -73
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +97 -12
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +249 -16
- data/lib/puppet/http/service/file_server.rb +141 -20
- data/lib/puppet/http/service/report.rb +47 -17
- data/lib/puppet/http/session.rb +96 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- 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 +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- 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/base_pool.rb +7 -2
- 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 +8 -5
- 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/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/evaluator_impl.rb +5 -5
- 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/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/groupadd.rb +9 -4
- 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/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/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/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +100 -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 +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +3 -1
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- 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 +81 -35
- 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 +21 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +3 -3
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +75 -64
- 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/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/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 +641 -511
- data/man/man5/puppet.conf.5 +75 -10
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- 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 +1 -1
- 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 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- 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/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/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
- data/spec/integration/application/agent_spec.rb +475 -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/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +47 -37
- 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 +93 -20
- 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 +6 -1
- 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/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -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/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +64 -46
- 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 +8 -0
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- 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 +10 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +321 -36
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -3
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -12
- data/spec/unit/http/service/compiler_spec.rb +332 -28
- data/spec/unit/http/service/file_server_spec.rb +100 -12
- data/spec/unit/http/service/report_spec.rb +19 -9
- data/spec/unit/http/service_spec.rb +94 -6
- data/spec/unit/http/session_spec.rb +159 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- 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/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http/pool_spec.rb +59 -13
- 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/group/groupadd_spec.rb +22 -8
- 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/gem_spec.rb +40 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- 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/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +243 -1
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/init_spec.rb +42 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +93 -18
- 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/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- 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 +99 -13
- 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 +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- 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 +3 -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 +102 -54
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- 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 +84 -52
- data/COMMITTERS.md +0 -244
- 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 -61
- 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
@@ -38,6 +38,7 @@
|
|
38
38
|
# $data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
|
39
39
|
# $filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
|
40
40
|
# # $filtered_data = {blueberry => 1, raspberry => 2}
|
41
|
+
# ```
|
41
42
|
#
|
42
43
|
# When the first argument is an array and the lambda has two parameters, Puppet passes the
|
43
44
|
# array's indexes (enumerated from 0) in the first parameter and its values in the second
|
@@ -12,15 +12,15 @@
|
|
12
12
|
#
|
13
13
|
# @example Removing leading space from a String
|
14
14
|
# ```puppet
|
15
|
-
# "\n\thello".lstrip()
|
16
|
-
#
|
15
|
+
# "\n\thello ".lstrip()
|
16
|
+
# lstrip("\n\thello ")
|
17
17
|
# ```
|
18
18
|
# Would both result in `"hello"`
|
19
19
|
#
|
20
20
|
# @example Removing leading space from strings in an Array
|
21
21
|
# ```puppet
|
22
|
-
# ["\n\thello", "\n\thi"].lstrip()
|
23
|
-
# lstrip(["\n\thello", "\n\thi"])
|
22
|
+
# ["\n\thello ", "\n\thi "].lstrip()
|
23
|
+
# lstrip(["\n\thello ", "\n\thi "])
|
24
24
|
# ```
|
25
25
|
# Would both result in `['hello', 'hi']`
|
26
26
|
#
|
@@ -39,11 +39,9 @@
|
|
39
39
|
# values to the lambda.
|
40
40
|
#
|
41
41
|
# Puppet calls the lambda for each of the data structure's remaining values. For each
|
42
|
-
# call, it passes the result of the previous call as the first parameter (
|
42
|
+
# call, it passes the result of the previous call as the first parameter (`$memo` in the
|
43
43
|
# above examples) and the next value from the data structure as the second parameter
|
44
|
-
# (
|
45
|
-
#
|
46
|
-
# If the structure has one value, Puppet returns the value and does not call the lambda.
|
44
|
+
# (`$value`).
|
47
45
|
#
|
48
46
|
# @example Using the `reduce` function
|
49
47
|
#
|
@@ -84,7 +84,7 @@ Puppet::Functions.create_function(:reverse_each) do
|
|
84
84
|
|
85
85
|
def reverse_each(iterable)
|
86
86
|
# produces an Iterable
|
87
|
-
Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).reverse_each
|
87
|
+
Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable, true).reverse_each
|
88
88
|
end
|
89
89
|
|
90
90
|
def reverse_each_block(iterable, &block)
|
@@ -12,15 +12,15 @@
|
|
12
12
|
#
|
13
13
|
# @example Removing trailing space from a String
|
14
14
|
# ```puppet
|
15
|
-
# "hello\n\t".
|
16
|
-
#
|
15
|
+
# " hello\n\t".rstrip()
|
16
|
+
# rstrip(" hello\n\t")
|
17
17
|
# ```
|
18
18
|
# Would both result in `"hello"`
|
19
19
|
#
|
20
20
|
# @example Removing trailing space from strings in an Array
|
21
21
|
# ```puppet
|
22
|
-
# ["hello\n\t", "hi\n\t"].
|
23
|
-
#
|
22
|
+
# [" hello\n\t", " hi\n\t"].rstrip()
|
23
|
+
# rstrip([" hello\n\t", " hi\n\t"])
|
24
24
|
# ```
|
25
25
|
# Would both result in `['hello', 'hi']`
|
26
26
|
#
|
@@ -88,7 +88,7 @@ Puppet::Functions.create_function(:step) do
|
|
88
88
|
|
89
89
|
def step(iterable, step)
|
90
90
|
# produces an Iterable
|
91
|
-
Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable).step(step)
|
91
|
+
Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable, true).step(step)
|
92
92
|
end
|
93
93
|
|
94
94
|
def step_block(iterable, step, &block)
|
@@ -12,15 +12,15 @@
|
|
12
12
|
#
|
13
13
|
# @example Removing leading and trailing space from a String
|
14
14
|
# ```puppet
|
15
|
-
# " hello\n\t".
|
16
|
-
#
|
15
|
+
# " hello\n\t".strip()
|
16
|
+
# strip(" hello\n\t")
|
17
17
|
# ```
|
18
18
|
# Would both result in `"hello"`
|
19
19
|
#
|
20
20
|
# @example Removing trailing space from strings in an Array
|
21
21
|
# ```puppet
|
22
|
-
# [" hello\n\t", " hi\n\t"].
|
23
|
-
#
|
22
|
+
# [" hello\n\t", " hi\n\t"].strip()
|
23
|
+
# strip([" hello\n\t", " hi\n\t"])
|
24
24
|
# ```
|
25
25
|
# Would both result in `['hello', 'hi']`
|
26
26
|
#
|
@@ -65,7 +65,7 @@ module Puppet::GettextConfig
|
|
65
65
|
return if @gettext_disabled || !gettext_loaded?
|
66
66
|
domain_name = domain_name.to_sym
|
67
67
|
|
68
|
-
Puppet.debug "Reset text domain to #{domain_name.inspect}"
|
68
|
+
Puppet.debug { "Reset text domain to #{domain_name.inspect}" }
|
69
69
|
FastGettext.add_text_domain(domain_name,
|
70
70
|
type: :chain,
|
71
71
|
chain: [],
|
@@ -115,10 +115,10 @@ module Puppet::GettextConfig
|
|
115
115
|
domain_name = domain_name.to_sym
|
116
116
|
|
117
117
|
if FastGettext.translation_repositories.include?(domain_name)
|
118
|
-
Puppet.debug "Use text domain #{domain_name.inspect}"
|
118
|
+
Puppet.debug { "Use text domain #{domain_name.inspect}" }
|
119
119
|
FastGettext.text_domain = domain_name
|
120
120
|
else
|
121
|
-
Puppet.debug "Requested unknown text domain #{domain_name.inspect}"
|
121
|
+
Puppet.debug { "Requested unknown text domain #{domain_name.inspect}" }
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -139,10 +139,10 @@ module Puppet::GettextConfig
|
|
139
139
|
|
140
140
|
deleted = FastGettext.translation_repositories.delete(domain_name)
|
141
141
|
if FastGettext.text_domain == domain_name
|
142
|
-
Puppet.debug "Deleted current text domain #{domain_name.inspect}: #{!deleted.nil?}"
|
142
|
+
Puppet.debug { "Deleted current text domain #{domain_name.inspect}: #{!deleted.nil?}" }
|
143
143
|
FastGettext.text_domain = nil
|
144
144
|
else
|
145
|
-
Puppet.debug "Deleted text domain #{domain_name.inspect}: #{!deleted.nil?}"
|
145
|
+
Puppet.debug { "Deleted text domain #{domain_name.inspect}: #{!deleted.nil?}" }
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
@@ -13,9 +13,9 @@ module Puppet::ModuleTranslations
|
|
13
13
|
|
14
14
|
module_name = mod.forge_name.tr('/', '-')
|
15
15
|
if Puppet::GettextConfig.load_translations(module_name, mod.locale_directory, :po)
|
16
|
-
Puppet.debug "Loaded translations for #{module_name}."
|
16
|
+
Puppet.debug { "Loaded translations for #{module_name}." }
|
17
17
|
elsif Puppet::GettextConfig.gettext_loaded?
|
18
|
-
Puppet.debug "Could not find translation files for #{module_name} at #{mod.locale_directory}. Skipping translation initialization."
|
18
|
+
Puppet.debug { "Could not find translation files for #{module_name} at #{mod.locale_directory}. Skipping translation initialization." }
|
19
19
|
else
|
20
20
|
Puppet.warn_once("gettext_unavailable", "gettext_unavailable", "No gettext library found, skipping translation initialization.")
|
21
21
|
end
|
@@ -31,9 +31,9 @@ module Puppet::ModuleTranslations
|
|
31
31
|
Dir.glob("#{vardir}/locales/#{locale}/*.po") do |f|
|
32
32
|
module_name = File.basename(f, ".po")
|
33
33
|
if Puppet::GettextConfig.load_translations(module_name, File.join(vardir, "locales"), :po)
|
34
|
-
Puppet.debug "Loaded translations for #{module_name}."
|
34
|
+
Puppet.debug { "Loaded translations for #{module_name}." }
|
35
35
|
elsif Puppet::GettextConfig.gettext_loaded?
|
36
|
-
Puppet.debug "Could not load translations for #{module_name}."
|
36
|
+
Puppet.debug { "Could not load translations for #{module_name}." }
|
37
37
|
else
|
38
38
|
Puppet.warn_once("gettext_unavailable", "gettext_unavailable", "No gettext library found, skipping translation initialization.")
|
39
39
|
end
|
data/lib/puppet/http.rb
CHANGED
@@ -11,8 +11,10 @@ module Puppet
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
# @api private
|
14
15
|
module HTTP
|
15
16
|
ACCEPT_ENCODING = "gzip;q=1.0,deflate;q=0.6,identity;q=0.3".freeze
|
17
|
+
HEADER_PUPPET_VERSION = "X-Puppet-Version".freeze
|
16
18
|
|
17
19
|
require 'puppet/http/errors'
|
18
20
|
require 'puppet/http/response'
|
@@ -29,5 +31,6 @@ module Puppet
|
|
29
31
|
require 'puppet/http/client'
|
30
32
|
require 'puppet/http/redirector'
|
31
33
|
require 'puppet/http/retry_after_handler'
|
34
|
+
require 'puppet/http/external_client'
|
32
35
|
end
|
33
36
|
end
|
data/lib/puppet/http/client.rb
CHANGED
@@ -1,27 +1,85 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# The client contains a pool of persistent HTTP connections and creates HTTP
|
5
|
+
# sessions.
|
6
|
+
#
|
1
7
|
class Puppet::HTTP::Client
|
2
|
-
|
8
|
+
|
9
|
+
# @api private
|
10
|
+
# @return [Puppet::Network::HTTP::Pool] the pool instance associated with
|
11
|
+
# this client
|
12
|
+
attr_reader :pool
|
13
|
+
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
#
|
17
|
+
# Create a new http client instance. The client contains a pool of persistent
|
18
|
+
# HTTP connections and creates HTTP sessions.
|
19
|
+
#
|
20
|
+
# @param [Puppet::Network::HTTP::Pool] pool pool of persistent Net::HTTP
|
21
|
+
# connections
|
22
|
+
# @param [Puppet::SSL::SSLContext] ssl_context ssl context to be used for
|
23
|
+
# connections
|
24
|
+
# @param [Puppet::SSL::SSLContext] system_ssl_context the system ssl context
|
25
|
+
# used if :include_system_store is set to true
|
26
|
+
# @param [Integer] redirect_limit default number of HTTP redirections to allow
|
27
|
+
# in a given request. Can also be specified per-request.
|
28
|
+
# @param [Integer] retry_limit number of HTTP reties allowed in a given
|
29
|
+
# request
|
30
|
+
#
|
31
|
+
def initialize(pool: Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout]), ssl_context: nil, system_ssl_context: nil, redirect_limit: 10, retry_limit: 100)
|
3
32
|
@pool = pool
|
4
33
|
@default_headers = {
|
5
34
|
'X-Puppet-Version' => Puppet.version,
|
6
35
|
'User-Agent' => Puppet[:http_user_agent],
|
7
36
|
}.freeze
|
8
37
|
@default_ssl_context = ssl_context
|
9
|
-
@
|
38
|
+
@default_system_ssl_context = system_ssl_context
|
39
|
+
@default_redirect_limit = redirect_limit
|
10
40
|
@retry_after_handler = Puppet::HTTP::RetryAfterHandler.new(retry_limit, Puppet[:runinterval])
|
11
|
-
@resolvers = build_resolvers
|
12
41
|
end
|
13
42
|
|
43
|
+
#
|
44
|
+
# @api private
|
45
|
+
#
|
46
|
+
# Create a new HTTP session. A session is the object through which services
|
47
|
+
# may be connected to and accessed.
|
48
|
+
#
|
49
|
+
# @return [Puppet::HTTP::Session] the newly created HTTP session
|
50
|
+
#
|
14
51
|
def create_session
|
15
|
-
Puppet::HTTP::Session.new(self,
|
52
|
+
Puppet::HTTP::Session.new(self, build_resolvers)
|
16
53
|
end
|
17
54
|
|
18
|
-
|
55
|
+
#
|
56
|
+
# @api private
|
57
|
+
#
|
58
|
+
# Open a connection to the given URI
|
59
|
+
#
|
60
|
+
# @param [URI] uri the connection destination
|
61
|
+
# @param [Hash] options
|
62
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
63
|
+
# be used for connections
|
64
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
65
|
+
# the system store for connection
|
66
|
+
#
|
67
|
+
# @yield [Net::HTTP] If a block is given, yields an active http connection
|
68
|
+
# from the pool
|
69
|
+
#
|
70
|
+
def connect(uri, options: {}, &block)
|
19
71
|
start = Time.now
|
20
|
-
|
21
|
-
site = Puppet::Network::HTTP::Site.from_uri(uri)
|
22
|
-
verifier = Puppet::SSL::Verifier.new(site.host, ctx)
|
72
|
+
verifier = nil
|
23
73
|
connected = false
|
24
74
|
|
75
|
+
site = Puppet::Network::HTTP::Site.from_uri(uri)
|
76
|
+
if site.use_ssl?
|
77
|
+
ssl_context = options.fetch(:ssl_context, nil)
|
78
|
+
include_system_store = options.fetch(:include_system_store, false)
|
79
|
+
ctx = resolve_ssl_context(ssl_context, include_system_store)
|
80
|
+
verifier = Puppet::SSL::Verifier.new(site.host, ctx)
|
81
|
+
end
|
82
|
+
|
25
83
|
@pool.with_connection(site, verifier) do |http|
|
26
84
|
connected = true
|
27
85
|
if block_given?
|
@@ -43,117 +101,228 @@ class Puppet::HTTP::Client
|
|
43
101
|
{uri: uri, elapsed: elapsed(start), message: e.message}, e, connected)
|
44
102
|
end
|
45
103
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
104
|
+
#
|
105
|
+
# @api private
|
106
|
+
#
|
107
|
+
# Submits a GET HTTP request to the given url
|
108
|
+
#
|
109
|
+
# @param [URI] url the location to submit the http request
|
110
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
111
|
+
# @param [Hash] params encoded and set as the url query
|
112
|
+
# @param [Hash] options passed through to the request execution
|
113
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
114
|
+
# be used for connections
|
115
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
116
|
+
# the system store for connection
|
117
|
+
# @param options [Integer] :redirect_limit number of HTTP redirections to allow
|
118
|
+
# for this request.
|
119
|
+
#
|
120
|
+
# @yield [Puppet::HTTP::Response] if a block is given yields the response
|
121
|
+
#
|
122
|
+
# @return [String] if a block is not given, returns the response body
|
123
|
+
#
|
124
|
+
def get(url, headers: {}, params: {}, options: {}, &block)
|
125
|
+
url = encode_query(url, params)
|
52
126
|
|
53
127
|
request = Net::HTTP::Get.new(url, @default_headers.merge(headers))
|
54
128
|
|
55
|
-
execute_streaming(request,
|
129
|
+
execute_streaming(request, options: options) do |response|
|
56
130
|
if block_given?
|
57
131
|
yield response
|
58
132
|
else
|
59
|
-
response.
|
133
|
+
response.body
|
60
134
|
end
|
61
135
|
end
|
62
136
|
end
|
63
137
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
138
|
+
#
|
139
|
+
# @api private
|
140
|
+
#
|
141
|
+
# Submits a HEAD HTTP request to the given url
|
142
|
+
#
|
143
|
+
# @param [URI] url the location to submit the http request
|
144
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
145
|
+
# @param [Hash] params encoded and set as the url query
|
146
|
+
# @param [Hash] options passed through to the request execution
|
147
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
148
|
+
# be used for connections
|
149
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
150
|
+
# the system store for connection
|
151
|
+
# @param options [Integer] :redirect_limit number of HTTP redirections to allow
|
152
|
+
# for this request.
|
153
|
+
#
|
154
|
+
# @return [String] the body of the request response
|
155
|
+
#
|
156
|
+
def head(url, headers: {}, params: {}, options: {})
|
157
|
+
url = encode_query(url, params)
|
70
158
|
|
71
159
|
request = Net::HTTP::Head.new(url, @default_headers.merge(headers))
|
72
160
|
|
73
|
-
execute_streaming(request,
|
74
|
-
response.
|
161
|
+
execute_streaming(request, options: options) do |response|
|
162
|
+
response.body
|
75
163
|
end
|
76
164
|
end
|
77
165
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
166
|
+
#
|
167
|
+
# @api private
|
168
|
+
#
|
169
|
+
# Submits a PUT HTTP request to the given url
|
170
|
+
#
|
171
|
+
# @param [URI] url the location to submit the http request
|
172
|
+
# @param [String] body the body of the PUT request
|
173
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
174
|
+
# @param [Hash] params encoded and set as the url query
|
175
|
+
# @param [Hash] options passed through to the request execution
|
176
|
+
# @option options [String] :content_type the type of the body content
|
177
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
178
|
+
# be used for connections
|
179
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
180
|
+
# the system store for connection
|
181
|
+
# @param options [Integer] :redirect_limit number of HTTP redirections to allow
|
182
|
+
# for this request.
|
183
|
+
#
|
184
|
+
# @return [String] the body of the request response
|
185
|
+
#
|
186
|
+
def put(url, body, headers: {}, params: {}, options: {})
|
187
|
+
raise ArgumentError, "'put' requires a string 'body' argument" unless body.is_a?(String)
|
188
|
+
url = encode_query(url, params)
|
84
189
|
|
85
190
|
request = Net::HTTP::Put.new(url, @default_headers.merge(headers))
|
86
191
|
request.body = body
|
87
|
-
request
|
88
|
-
request['Content-Type'] = content_type
|
192
|
+
request.content_length = body.bytesize
|
89
193
|
|
90
|
-
|
91
|
-
|
194
|
+
raise ArgumentError, "'put' requires a 'content-type' header" unless request['Content-Type']
|
195
|
+
|
196
|
+
execute_streaming(request, options: options) do |response|
|
197
|
+
response.body
|
92
198
|
end
|
93
199
|
end
|
94
200
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
201
|
+
#
|
202
|
+
# @api private
|
203
|
+
#
|
204
|
+
# Submits a POST HTTP request to the given url
|
205
|
+
#
|
206
|
+
# @param [URI] url the location to submit the http request
|
207
|
+
# @param [String] body the body of the POST request
|
208
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
209
|
+
# @param [Hash] params encoded and set as the url query
|
210
|
+
# @param [Hash] options passed through to the request execution
|
211
|
+
# @option options [String] :content_type the type of the body content
|
212
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
213
|
+
# be used for connections
|
214
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
215
|
+
# the system store for connection
|
216
|
+
# @param options [Integer] :redirect_limit number of HTTP redirections to allow
|
217
|
+
# for this request.
|
218
|
+
#
|
219
|
+
# @return [String] the body of the request response
|
220
|
+
#
|
221
|
+
def post(url, body, headers: {}, params: {}, options: {}, &block)
|
222
|
+
raise ArgumentError, "'post' requires a string 'body' argument" unless body.is_a?(String)
|
223
|
+
url = encode_query(url, params)
|
101
224
|
|
102
225
|
request = Net::HTTP::Post.new(url, @default_headers.merge(headers))
|
103
226
|
request.body = body
|
104
|
-
request
|
105
|
-
request['Content-Type'] = content_type
|
227
|
+
request.content_length = body.bytesize
|
106
228
|
|
107
|
-
|
229
|
+
raise ArgumentError, "'post' requires a 'content-type' header" unless request['Content-Type']
|
230
|
+
|
231
|
+
execute_streaming(request, options: options) do |response|
|
108
232
|
if block_given?
|
109
233
|
yield response
|
110
234
|
else
|
111
|
-
response.
|
235
|
+
response.body
|
112
236
|
end
|
113
237
|
end
|
114
238
|
end
|
115
239
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
240
|
+
#
|
241
|
+
# @api private
|
242
|
+
#
|
243
|
+
# Submits a DELETE HTTP request to the given url
|
244
|
+
#
|
245
|
+
# @param [URI] url the location to submit the http request
|
246
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
247
|
+
# @param [Hash] params encoded and set as the url query
|
248
|
+
# @param [Hash] options options hash passed through to the request execution
|
249
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
250
|
+
# be used for connections
|
251
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
252
|
+
# the system store for connection
|
253
|
+
# @param options [Integer] :redirect_limit number of HTTP redirections to allow
|
254
|
+
# for this request.
|
255
|
+
#
|
256
|
+
# @return [String] the body of the request response
|
257
|
+
#
|
258
|
+
def delete(url, headers: {}, params: {}, options: {})
|
259
|
+
url = encode_query(url, params)
|
122
260
|
|
123
261
|
request = Net::HTTP::Delete.new(url, @default_headers.merge(headers))
|
124
262
|
|
125
|
-
execute_streaming(request,
|
126
|
-
response.
|
263
|
+
execute_streaming(request, options: options) do |response|
|
264
|
+
response.body
|
127
265
|
end
|
128
266
|
end
|
129
267
|
|
268
|
+
#
|
269
|
+
# @api private
|
270
|
+
#
|
271
|
+
# Close persistent connections in the pool
|
272
|
+
#
|
130
273
|
def close
|
131
274
|
@pool.close
|
132
275
|
end
|
133
276
|
|
277
|
+
protected
|
278
|
+
|
279
|
+
def encode_query(url, params)
|
280
|
+
return url if params.empty?
|
281
|
+
|
282
|
+
url = url.dup
|
283
|
+
url.query = encode_params(params)
|
284
|
+
url
|
285
|
+
end
|
286
|
+
|
134
287
|
private
|
135
288
|
|
136
|
-
def execute_streaming(request,
|
289
|
+
def execute_streaming(request, options: {}, &block)
|
290
|
+
redirector = Puppet::HTTP::Redirector.new(options.fetch(:redirect_limit, @default_redirect_limit))
|
291
|
+
|
292
|
+
basic_auth = options.fetch(:basic_auth, nil)
|
293
|
+
unless basic_auth
|
294
|
+
if request.uri.user && request.uri.password
|
295
|
+
basic_auth = { user: request.uri.user, password: request.uri.password }
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
137
299
|
redirects = 0
|
138
300
|
retries = 0
|
301
|
+
response = nil
|
302
|
+
done = false
|
139
303
|
|
140
|
-
|
141
|
-
connect(request.uri,
|
142
|
-
apply_auth(request,
|
304
|
+
while !done do
|
305
|
+
connect(request.uri, options: options) do |http|
|
306
|
+
apply_auth(request, basic_auth)
|
143
307
|
|
308
|
+
# don't call return within the `request` block
|
144
309
|
http.request(request) do |nethttp|
|
145
|
-
response = Puppet::HTTP::Response.new(nethttp)
|
310
|
+
response = Puppet::HTTP::Response.new(nethttp, request.uri)
|
146
311
|
begin
|
147
312
|
Puppet.debug("HTTP #{request.method.upcase} #{request.uri} returned #{response.code} #{response.reason}")
|
148
313
|
|
149
|
-
if
|
150
|
-
request =
|
314
|
+
if redirector.redirect?(request, response)
|
315
|
+
request = redirector.redirect_to(request, response, redirects)
|
151
316
|
redirects += 1
|
152
317
|
next
|
153
318
|
elsif @retry_after_handler.retry_after?(request, response)
|
154
319
|
interval = @retry_after_handler.retry_after_interval(request, response, retries)
|
155
320
|
retries += 1
|
156
321
|
if interval
|
322
|
+
if http.started?
|
323
|
+
Puppet.debug("Closing connection for #{Puppet::Network::HTTP::Site.from_uri(request.uri)}")
|
324
|
+
http.finish
|
325
|
+
end
|
157
326
|
Puppet.warning(_("Sleeping for %{interval} seconds before retrying the request") % { interval: interval })
|
158
327
|
::Kernel.sleep(interval)
|
159
328
|
next
|
@@ -165,10 +334,12 @@ class Puppet::HTTP::Client
|
|
165
334
|
response.drain
|
166
335
|
end
|
167
336
|
|
168
|
-
|
337
|
+
done = true
|
169
338
|
end
|
170
339
|
end
|
171
340
|
end
|
341
|
+
|
342
|
+
response
|
172
343
|
end
|
173
344
|
|
174
345
|
def expand_into_parameters(data)
|
@@ -219,13 +390,30 @@ class Puppet::HTTP::Client
|
|
219
390
|
end
|
220
391
|
end
|
221
392
|
|
222
|
-
def
|
223
|
-
|
393
|
+
def resolve_ssl_context(ssl_context, include_system_store)
|
394
|
+
if ssl_context
|
395
|
+
raise Puppet::HTTP::HTTPError, "The ssl_context and include_system_store parameters are mutually exclusive" if include_system_store
|
396
|
+
ssl_context
|
397
|
+
elsif include_system_store
|
398
|
+
system_ssl_context
|
399
|
+
else
|
400
|
+
@default_ssl_context || Puppet.lookup(:ssl_context)
|
401
|
+
end
|
224
402
|
end
|
225
403
|
|
226
|
-
def
|
227
|
-
|
228
|
-
|
404
|
+
def system_ssl_context
|
405
|
+
return @default_system_ssl_context if @default_system_ssl_context
|
406
|
+
|
407
|
+
cert_provider = Puppet::X509::CertProvider.new
|
408
|
+
cacerts = cert_provider.load_cacerts || []
|
409
|
+
|
410
|
+
ssl = Puppet::SSL::SSLProvider.new
|
411
|
+
@default_system_ssl_context = ssl.create_system_context(cacerts: cacerts)
|
412
|
+
end
|
413
|
+
|
414
|
+
def apply_auth(request, basic_auth)
|
415
|
+
if basic_auth
|
416
|
+
request.basic_auth(basic_auth[:user], basic_auth[:password])
|
229
417
|
end
|
230
418
|
end
|
231
419
|
|
@@ -238,14 +426,16 @@ class Puppet::HTTP::Client
|
|
238
426
|
|
239
427
|
server_list_setting = Puppet.settings.setting(:server_list)
|
240
428
|
if server_list_setting.value && !server_list_setting.value.empty?
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
#
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
429
|
+
# use server list to resolve all services
|
430
|
+
services = Puppet::HTTP::Service::SERVICE_NAMES.dup
|
431
|
+
|
432
|
+
# except if it's been explicitly set
|
433
|
+
if Puppet.settings.set_by_config?(:ca_server)
|
434
|
+
services.delete(:ca)
|
435
|
+
end
|
436
|
+
|
437
|
+
if Puppet.settings.set_by_config?(:report_server)
|
438
|
+
services.delete(:report)
|
249
439
|
end
|
250
440
|
|
251
441
|
resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:masterport], services: services)
|