puppet 6.12.0-x86-mingw32 → 6.17.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 +39 -36
- data/README.md +18 -25
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- 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/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +65 -69
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +154 -58
- data/lib/puppet/environments.rb +27 -20
- data/lib/puppet/face/facts.rb +8 -5
- 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/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +14 -10
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/file_system/windows.rb +7 -10
- 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/reduce.rb +2 -4
- data/lib/puppet/http.rb +5 -0
- data/lib/puppet/http/client.rb +293 -73
- data/lib/puppet/http/errors.rb +2 -0
- 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 +151 -7
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +49 -23
- data/lib/puppet/http/session.rb +103 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.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 +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- 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/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 +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +11 -1
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +4 -29
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
- 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 -13
- 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/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/validation/checker4_0.rb +11 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- 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 +78 -4
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- 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/pkg.rb +18 -5
- 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 +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +109 -25
- data/lib/puppet/provider/package/zypper.rb +59 -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 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +22 -12
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/reports/store.rb +1 -1
- 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 +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- 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/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +15 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +18 -6
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +51 -60
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +55 -8
- data/lib/puppet/type/user.rb +3 -28
- data/lib/puppet/util.rb +39 -15
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- 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 +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -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/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +2 -2
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- 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 +1 -0
- 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 +23 -8
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +707 -574
- data/man/man5/puppet.conf.5 +74 -14
- 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 +1 -1
- 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/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/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 -102
- 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 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- 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 -102
- data/spec/integration/application/agent_spec.rb +483 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +2 -15
- 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/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +40 -5
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/configurer/fact_handler_spec.rb +4 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +17 -18
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +25 -2
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- 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/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +327 -35
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -2
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -11
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +27 -9
- data/spec/unit/http/service_spec.rb +98 -5
- data/spec/unit/http/session_spec.rb +190 -7
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- 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/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +559 -175
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- 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 +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- 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 +1 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- 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 +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -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/pkg_spec.rb +15 -1
- 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 +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/service/init_spec.rb +1 -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 +92 -12
- data/spec/unit/provider/service/windows_spec.rb +22 -14
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +43 -24
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- 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/certificate_spec.rb +7 -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 +1 -10
- 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/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +185 -8
- data/spec/unit/type/user_spec.rb +1 -2
- 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/checksums_spec.rb +16 -0
- 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 +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- 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 +73 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/test/test_helper_spec.rb +0 -31
data/lib/puppet/forge.rb
CHANGED
data/lib/puppet/forge/cache.rb
CHANGED
@@ -25,7 +25,7 @@ class Puppet::Forge
|
|
25
25
|
unless cached_file.file?
|
26
26
|
if uri.scheme == 'file'
|
27
27
|
# CGI.unescape butchers Uris that are escaped properly
|
28
|
-
FileUtils.cp(
|
28
|
+
FileUtils.cp(Puppet::Util.uri_unescape(uri.path), cached_file)
|
29
29
|
else
|
30
30
|
# TODO: Handle HTTPS; probably should use repository.contact
|
31
31
|
data = read_retrieve(uri)
|
@@ -37,18 +37,15 @@ class Puppet::Forge
|
|
37
37
|
uri = URI(str)
|
38
38
|
|
39
39
|
headers = { "User-Agent" => user_agent }
|
40
|
-
user = nil
|
41
|
-
password = nil
|
42
40
|
|
43
41
|
if forge_authorization
|
42
|
+
uri.user = nil
|
43
|
+
uri.password = nil
|
44
44
|
headers["Authorization"] = forge_authorization
|
45
|
-
elsif @uri.user && @uri.password
|
46
|
-
user = @uri.user
|
47
|
-
password = @uri.password
|
48
45
|
end
|
49
46
|
|
50
|
-
http = Puppet.runtime[
|
51
|
-
response = http.get(uri, headers: headers,
|
47
|
+
http = Puppet.runtime[:http]
|
48
|
+
response = http.get(uri, headers: headers, options: {ssl_context: @ssl_context})
|
52
49
|
io.write(response.body) if io.respond_to?(:write)
|
53
50
|
response
|
54
51
|
rescue Puppet::SSL::CertVerifyError => e
|
@@ -39,7 +39,7 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
|
|
39
39
|
context.cache(nil, raw_data)
|
40
40
|
end
|
41
41
|
context.not_found unless raw_data.include?(key)
|
42
|
-
context.cache(key, decrypt_value(raw_data[key], context, options))
|
42
|
+
context.cache(key, decrypt_value(raw_data[key], context, options, key))
|
43
43
|
end
|
44
44
|
|
45
45
|
def load_data_hash(options, context)
|
@@ -62,22 +62,22 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
def decrypt_value(value, context, options)
|
65
|
+
def decrypt_value(value, context, options, key)
|
66
66
|
case value
|
67
67
|
when String
|
68
|
-
decrypt(value, context, options)
|
68
|
+
decrypt(value, context, options, key)
|
69
69
|
when Hash
|
70
70
|
result = {}
|
71
|
-
value.each_pair { |k, v| result[context.interpolate(k)] = decrypt_value(v, context, options) }
|
71
|
+
value.each_pair { |k, v| result[context.interpolate(k)] = decrypt_value(v, context, options, key) }
|
72
72
|
result
|
73
73
|
when Array
|
74
|
-
value.map { |v| decrypt_value(v, context, options) }
|
74
|
+
value.map { |v| decrypt_value(v, context, options, key) }
|
75
75
|
else
|
76
76
|
value
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
def decrypt(data, context, options)
|
80
|
+
def decrypt(data, context, options, key)
|
81
81
|
if encrypted?(data)
|
82
82
|
# Options must be set prior to each call to #parse since they end up as static variables in
|
83
83
|
# the Options class. They cannot be set once before #decrypt_value is called, since each #decrypt
|
@@ -85,8 +85,13 @@ Puppet::Functions.create_function(:eyaml_lookup_key) do
|
|
85
85
|
# config.
|
86
86
|
#
|
87
87
|
Hiera::Backend::Eyaml::Options.set(options)
|
88
|
-
|
89
|
-
|
88
|
+
begin
|
89
|
+
tokens = Hiera::Backend::Eyaml::Parser::ParserFactory.hiera_backend_parser.parse(data)
|
90
|
+
data = tokens.map(&:to_plain_text).join.chomp
|
91
|
+
rescue StandardError => ex
|
92
|
+
raise Puppet::DataBinding::LookupError,
|
93
|
+
_("hiera-eyaml backend error decrypting %{data} when looking up %{key} in %{path}. Error was %{message}") % { data: data, key: key, path: options['path'], message: ex.message }
|
94
|
+
end
|
90
95
|
end
|
91
96
|
context.interpolate(data)
|
92
97
|
end
|
@@ -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
|
@@ -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
|
#
|
data/lib/puppet/http.rb
CHANGED
@@ -11,13 +11,17 @@ 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'
|
19
21
|
require 'puppet/http/service'
|
20
22
|
require 'puppet/http/service/ca'
|
23
|
+
require 'puppet/http/service/compiler'
|
24
|
+
require 'puppet/http/service/file_server'
|
21
25
|
require 'puppet/http/service/report'
|
22
26
|
require 'puppet/http/session'
|
23
27
|
require 'puppet/http/resolver'
|
@@ -27,5 +31,6 @@ module Puppet
|
|
27
31
|
require 'puppet/http/client'
|
28
32
|
require 'puppet/http/redirector'
|
29
33
|
require 'puppet/http/retry_after_handler'
|
34
|
+
require 'puppet/http/external_client'
|
30
35
|
end
|
31
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,13 +334,45 @@ 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
|
343
|
+
end
|
344
|
+
|
345
|
+
def expand_into_parameters(data)
|
346
|
+
data.inject([]) do |params, key_value|
|
347
|
+
key, value = key_value
|
348
|
+
|
349
|
+
expanded_value = case value
|
350
|
+
when Array
|
351
|
+
value.collect { |val| [key, val] }
|
352
|
+
else
|
353
|
+
[key_value]
|
354
|
+
end
|
355
|
+
|
356
|
+
params.concat(expand_primitive_types_into_parameters(expanded_value))
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def expand_primitive_types_into_parameters(data)
|
361
|
+
data.inject([]) do |params, key_value|
|
362
|
+
key, value = key_value
|
363
|
+
case value
|
364
|
+
when nil
|
365
|
+
params
|
366
|
+
when true, false, String, Symbol, Integer, Float
|
367
|
+
params << [key, value]
|
368
|
+
else
|
369
|
+
raise Puppet::HTTP::SerializationError, _("HTTP REST queries cannot handle values of type '%{klass}'") % { klass: value.class }
|
370
|
+
end
|
371
|
+
end
|
172
372
|
end
|
173
373
|
|
174
374
|
def encode_params(params)
|
375
|
+
params = expand_into_parameters(params)
|
175
376
|
params.map do |key, value|
|
176
377
|
"#{key}=#{Puppet::Util.uri_query_encode(value.to_s)}"
|
177
378
|
end.join('&')
|
@@ -189,13 +390,30 @@ class Puppet::HTTP::Client
|
|
189
390
|
end
|
190
391
|
end
|
191
392
|
|
192
|
-
def
|
193
|
-
|
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
|
402
|
+
end
|
403
|
+
|
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)
|
194
412
|
end
|
195
413
|
|
196
|
-
def apply_auth(request,
|
197
|
-
if
|
198
|
-
request.basic_auth(user, password)
|
414
|
+
def apply_auth(request, basic_auth)
|
415
|
+
if basic_auth
|
416
|
+
request.basic_auth(basic_auth[:user], basic_auth[:password])
|
199
417
|
end
|
200
418
|
end
|
201
419
|
|
@@ -208,14 +426,16 @@ class Puppet::HTTP::Client
|
|
208
426
|
|
209
427
|
server_list_setting = Puppet.settings.setting(:server_list)
|
210
428
|
if server_list_setting.value && !server_list_setting.value.empty?
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
#
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
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)
|
219
439
|
end
|
220
440
|
|
221
441
|
resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:masterport], services: services)
|