puppet 6.13.0-universal-darwin → 6.18.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -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
@@ -6,4 +6,22 @@ class Puppet::Indirector::Status::Rest < Puppet::Indirector::REST
|
|
6
6
|
desc "Get puppet master's status via REST. Useful because it tests the health
|
7
7
|
of both the web server and the indirector."
|
8
8
|
|
9
|
+
def find(request)
|
10
|
+
return super unless use_http_client?
|
11
|
+
|
12
|
+
session = Puppet.lookup(:http_session)
|
13
|
+
api = session.route_to(:puppet)
|
14
|
+
_, status = api.get_status(request.key)
|
15
|
+
status
|
16
|
+
rescue Puppet::HTTP::ResponseError => e
|
17
|
+
if e.response.code == 404
|
18
|
+
return nil unless request.options[:fail_on_404]
|
19
|
+
|
20
|
+
_, body = parse_response(e.response.nethttp)
|
21
|
+
msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
|
22
|
+
raise Puppet::Error, msg
|
23
|
+
else
|
24
|
+
raise convert_to_http_error(e.response.nethttp)
|
25
|
+
end
|
26
|
+
end
|
9
27
|
end
|
data/lib/puppet/loaders.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/synchronized'
|
2
|
+
|
1
3
|
module Puppet
|
2
4
|
module Pops
|
3
5
|
require 'puppet/pops/loaders'
|
@@ -22,6 +24,10 @@ module Puppet
|
|
22
24
|
require 'puppet/pops/loader/predefined_loader'
|
23
25
|
require 'puppet/pops/loader/generic_plan_instantiator'
|
24
26
|
require 'puppet/pops/loader/puppet_plan_instantiator'
|
27
|
+
|
28
|
+
# The implementation of synchronized applies it to all subclasses so we
|
29
|
+
# want to add it to be base class after any subclasses are created
|
30
|
+
Loader.include Puppet::Concurrent::Synchronized
|
25
31
|
end
|
26
32
|
end
|
27
33
|
|
@@ -70,68 +70,68 @@ module Manager
|
|
70
70
|
# @dsl type
|
71
71
|
# @api public
|
72
72
|
def newtype(name, options = {}, &block)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
# First make sure we don't have a method sitting around
|
81
|
-
name = name.intern
|
82
|
-
newmethod = "new#{name}"
|
73
|
+
@manager_lock.synchronize do
|
74
|
+
# Handle backward compatibility
|
75
|
+
unless options.is_a?(Hash)
|
76
|
+
#TRANSLATORS 'Puppet::Type.newtype' should not be translated
|
77
|
+
Puppet.warning(_("Puppet::Type.newtype(%{name}) now expects a hash as the second argument, not %{argument}") %
|
78
|
+
{ name: name, argument: options.inspect})
|
79
|
+
end
|
83
80
|
|
84
|
-
|
85
|
-
|
81
|
+
# First make sure we don't have a method sitting around
|
82
|
+
name = name.intern
|
83
|
+
newmethod = "new#{name}"
|
86
84
|
|
87
|
-
|
85
|
+
# Used for method manipulation.
|
86
|
+
selfobj = singleton_class
|
88
87
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
88
|
+
if @types.include?(name)
|
89
|
+
if self.respond_to?(newmethod)
|
90
|
+
# Remove the old newmethod
|
91
|
+
selfobj.send(:remove_method,newmethod)
|
92
|
+
end
|
93
93
|
end
|
94
|
-
end
|
95
|
-
|
96
|
-
# Then create the class.
|
97
94
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
#
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
95
|
+
# Then create the class.
|
96
|
+
|
97
|
+
klass = genclass(
|
98
|
+
name,
|
99
|
+
:parent => Puppet::Type,
|
100
|
+
:overwrite => true,
|
101
|
+
:hash => @types,
|
102
|
+
:attributes => options,
|
103
|
+
&block
|
104
|
+
)
|
105
|
+
|
106
|
+
# Now define a "new<type>" method for convenience.
|
107
|
+
if self.respond_to? newmethod
|
108
|
+
# Refuse to overwrite existing methods like 'newparam' or 'newtype'.
|
109
|
+
#TRANSLATORS 'new%{method}' will become a method name, do not translate this string
|
110
|
+
Puppet.warning(_("'new%{method}' method already exists; skipping") % { method: name.to_s })
|
111
|
+
else
|
112
|
+
selfobj.send(:define_method, newmethod) do |*args|
|
113
|
+
klass.new(*args)
|
114
|
+
end
|
115
115
|
end
|
116
|
-
end
|
117
116
|
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
# If they've got all the necessary methods defined and they haven't
|
118
|
+
# already added the property, then do so now.
|
119
|
+
klass.ensurable if klass.ensurable? and ! klass.validproperty?(:ensure)
|
121
120
|
|
122
|
-
|
121
|
+
# Now set up autoload any providers that might exist for this type.
|
123
122
|
|
124
|
-
|
123
|
+
klass.providerloader = Puppet::Util::Autoload.new(klass, "puppet/provider/#{klass.name}")
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
|
125
|
+
# We have to load everything so that we can figure out the default provider.
|
126
|
+
klass.providerloader.loadall(Puppet.lookup(:current_environment))
|
127
|
+
klass.providify unless klass.providers.empty?
|
129
128
|
|
130
|
-
|
131
|
-
|
132
|
-
|
129
|
+
loc = block_given? ? block.source_location : nil
|
130
|
+
uri = loc.nil? ? nil : URI("#{Puppet::Util.path_to_uri(loc[0])}?line=#{loc[1]}")
|
131
|
+
Puppet::Pops::Loaders.register_runtime3_type(name, uri)
|
133
132
|
|
134
|
-
|
133
|
+
klass
|
134
|
+
end
|
135
135
|
end
|
136
136
|
|
137
137
|
# Removes an existing type.
|
@@ -151,47 +151,47 @@ module Manager
|
|
151
151
|
# @return [Puppet::Type, nil] the type or nil if the type was not defined and could not be loaded
|
152
152
|
#
|
153
153
|
def type(name)
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
154
|
+
@manager_lock.synchronize do
|
155
|
+
# Avoid loading if name obviously is not a type name
|
156
|
+
if name.to_s.include?(':')
|
157
|
+
return nil
|
158
|
+
end
|
158
159
|
|
159
|
-
|
160
|
+
# We are overwhelmingly symbols here, which usually match, so it is worth
|
161
|
+
# having this special-case to return quickly. Like, 25K symbols vs. 300
|
162
|
+
# strings in this method. --daniel 2012-07-17
|
163
|
+
return @types[name] if @types.include? name
|
160
164
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
+
# Try mangling the name, if it is a string.
|
166
|
+
if name.is_a? String
|
167
|
+
name = name.downcase.intern
|
168
|
+
return @types[name] if @types.include? name
|
169
|
+
end
|
170
|
+
# Try loading the type.
|
171
|
+
if typeloader.load(name, Puppet.lookup(:current_environment))
|
172
|
+
#TRANSLATORS 'puppet/type/%{name}' should not be translated
|
173
|
+
Puppet.warning(_("Loaded puppet/type/%{name} but no class was created") % { name: name }) unless @types.include? name
|
174
|
+
elsif !Puppet[:always_retry_plugins]
|
175
|
+
# PUP-5482 - Only look for a type once if plugin retry is disabled
|
176
|
+
@types[name] = nil
|
177
|
+
end
|
165
178
|
|
166
|
-
|
167
|
-
|
168
|
-
name = name.downcase.intern
|
169
|
-
return @types[name] if @types.include? name
|
170
|
-
end
|
171
|
-
# Try loading the type.
|
172
|
-
if typeloader.load(name, Puppet.lookup(:current_environment))
|
173
|
-
#TRANSLATORS 'puppet/type/%{name}' should not be translated
|
174
|
-
Puppet.warning(_("Loaded puppet/type/%{name} but no class was created") % { name: name }) unless @types.include? name
|
175
|
-
elsif !Puppet[:always_retry_plugins]
|
176
|
-
# PUP-5482 - Only look for a type once if plugin retry is disabled
|
177
|
-
@types[name] = nil
|
179
|
+
# ...and I guess that is that, eh.
|
180
|
+
return @types[name]
|
178
181
|
end
|
179
|
-
|
180
|
-
# ...and I guess that is that, eh.
|
181
|
-
return @types[name]
|
182
182
|
end
|
183
183
|
|
184
184
|
# Creates a loader for Puppet types.
|
185
185
|
# Defaults to an instance of {Puppet::Util::Autoload} if no other auto loader has been set.
|
186
186
|
# @return [Puppet::Util::Autoload] the loader to use.
|
187
187
|
# @api private
|
188
|
-
def typeloader
|
189
|
-
|
190
|
-
|
191
|
-
|
188
|
+
def typeloader
|
189
|
+
unless defined?(@typeloader)
|
190
|
+
@typeloader = Puppet::Util::Autoload.new(self, "puppet/type")
|
191
|
+
end
|
192
192
|
|
193
|
-
|
194
|
-
end
|
193
|
+
@typeloader
|
194
|
+
end
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
data/lib/puppet/module.rb
CHANGED
@@ -107,8 +107,7 @@ class Puppet::Module
|
|
107
107
|
define_method(type + '?') do
|
108
108
|
type_subpath = subpath(location)
|
109
109
|
unless Puppet::FileSystem.exist?(type_subpath)
|
110
|
-
Puppet.debug
|
111
|
-
"(file / directory does not exist)")
|
110
|
+
Puppet.debug { "No #{type} found in subpath '#{type_subpath}' (file / directory does not exist)" }
|
112
111
|
return false
|
113
112
|
end
|
114
113
|
|
@@ -49,7 +49,7 @@ module Puppet::Network::FormatSupport
|
|
49
49
|
|
50
50
|
result = put_preferred_format_first(result).map(&:name)
|
51
51
|
|
52
|
-
Puppet.debug "#{friendly_name} supports formats: #{result.join(' ')}"
|
52
|
+
Puppet.debug { "#{friendly_name} supports formats: #{result.join(' ')}" }
|
53
53
|
|
54
54
|
result
|
55
55
|
end
|
@@ -81,7 +81,7 @@ module Puppet::Network::FormatSupport
|
|
81
81
|
}
|
82
82
|
|
83
83
|
if preferred.empty?
|
84
|
-
Puppet.debug "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first.name})"
|
84
|
+
Puppet.debug { "Value of 'preferred_serialization_format' (#{preferred_format}) is invalid for #{friendly_name}, using default (#{list.first.name})" }
|
85
85
|
else
|
86
86
|
list = preferred + list.reject { |format|
|
87
87
|
format.mime.end_with?(preferred_format)
|
@@ -218,7 +218,7 @@ class Puppet::Network::HTTP::API::IndirectedRoutes
|
|
218
218
|
return formatter if formatter
|
219
219
|
|
220
220
|
raise Puppet::Network::HTTP::Error::HTTPNotAcceptableError.new(
|
221
|
-
_("No supported formats are acceptable (Accept: %{accepted_formats})") % { accepted_formats: formats },
|
221
|
+
_("No supported formats are acceptable (Accept: %{accepted_formats})") % { accepted_formats: formats.map(&:mime).join(', ') },
|
222
222
|
Puppet::Network::HTTP::Issues::UNSUPPORTED_FORMAT)
|
223
223
|
end
|
224
224
|
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'puppet/util/json'
|
2
2
|
require 'puppet/parser/environment_compiler'
|
3
3
|
|
4
|
+
# @deprecated application orchestration will be removed in puppet 7
|
4
5
|
class Puppet::Network::HTTP::API::Master::V3::Environment
|
5
6
|
def call(request, response)
|
7
|
+
Puppet.deprecation_warning("Application orchestration is deprecated. See https://puppet.com/docs/puppet/5.5/deprecated_language.html")
|
8
|
+
|
6
9
|
env_name = request.routing_path.split('/').last
|
7
10
|
env = Puppet.lookup(:environments).get(env_name)
|
8
11
|
code_id = request.params[:code_id]
|
@@ -4,7 +4,7 @@
|
|
4
4
|
class Puppet::Network::HTTP::BasePool
|
5
5
|
def start(site, verifier, http)
|
6
6
|
Puppet.debug("Starting connection for #{site}")
|
7
|
-
if
|
7
|
+
if site.use_ssl?
|
8
8
|
verifier.setup_connection(http)
|
9
9
|
begin
|
10
10
|
http.start
|
@@ -26,6 +26,11 @@ class Puppet::Network::HTTP::BasePool
|
|
26
26
|
socket = buffered_io.io
|
27
27
|
return unless socket
|
28
28
|
|
29
|
-
|
29
|
+
cipher = if Puppet::Util::Platform.jruby?
|
30
|
+
socket.cipher
|
31
|
+
else
|
32
|
+
socket.cipher.first
|
33
|
+
end
|
34
|
+
Puppet.debug("Using #{socket.ssl_version} with cipher #{cipher}")
|
30
35
|
end
|
31
36
|
end
|
@@ -20,9 +20,11 @@ module Puppet::Network::HTTP::Compression
|
|
20
20
|
def uncompress_body(response)
|
21
21
|
case response['content-encoding']
|
22
22
|
when 'gzip'
|
23
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress_body is deprecated.'))
|
23
24
|
# ZLib::GzipReader has an associated encoding, by default Encoding.default_external
|
24
25
|
return Zlib::GzipReader.new(StringIO.new(response.body), :encoding => Encoding::BINARY).read
|
25
26
|
when 'deflate'
|
27
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress_body is deprecated.'))
|
26
28
|
return Zlib::Inflate.new.inflate(response.body)
|
27
29
|
when nil, 'identity'
|
28
30
|
return response.body
|
@@ -32,6 +34,7 @@ module Puppet::Network::HTTP::Compression
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def uncompress(response)
|
37
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::Active#uncompress is deprecated.'))
|
35
38
|
raise Net::HTTPError.new("No block passed", response) unless block_given?
|
36
39
|
|
37
40
|
case response['content-encoding']
|
@@ -71,6 +74,7 @@ module Puppet::Network::HTTP::Compression
|
|
71
74
|
end
|
72
75
|
|
73
76
|
def uncompress(chunk)
|
77
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::ZlibAdapter#uncompress is deprecated.'))
|
74
78
|
out = @uncompressor.inflate(chunk)
|
75
79
|
@first = false
|
76
80
|
return out
|
@@ -97,6 +101,7 @@ module Puppet::Network::HTTP::Compression
|
|
97
101
|
|
98
102
|
module None
|
99
103
|
def uncompress_body(response)
|
104
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::None#uncompress_body is deprecated.'))
|
100
105
|
response.body
|
101
106
|
end
|
102
107
|
|
@@ -105,12 +110,14 @@ module Puppet::Network::HTTP::Compression
|
|
105
110
|
end
|
106
111
|
|
107
112
|
def uncompress(response)
|
113
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::None#uncompress is deprecated.'))
|
108
114
|
yield IdentityAdapter.new
|
109
115
|
end
|
110
116
|
end
|
111
117
|
|
112
118
|
class IdentityAdapter
|
113
119
|
def uncompress(chunk)
|
120
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Compression::IdentityAdapter#uncompress is deprecated.'))
|
114
121
|
chunk
|
115
122
|
end
|
116
123
|
|
@@ -343,6 +343,8 @@ module Puppet::Network::HTTP
|
|
343
343
|
end
|
344
344
|
|
345
345
|
def with_connection(site, &block)
|
346
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Connection is deprecated. Please use Puppet::Network::HTTP::ConnectionAdapter instead.'))
|
347
|
+
|
346
348
|
response = nil
|
347
349
|
@pool.with_connection(site, @verifier) do |conn|
|
348
350
|
response = yield conn
|
@@ -0,0 +1,184 @@
|
|
1
|
+
class Puppet::Network::HTTP::ConnectionAdapter < Puppet::Network::HTTP::Connection
|
2
|
+
def initialize(host, port, options = {})
|
3
|
+
super(host, port, options)
|
4
|
+
|
5
|
+
@client = Puppet.runtime[:http]
|
6
|
+
end
|
7
|
+
|
8
|
+
def get(path, headers = {}, options = {})
|
9
|
+
headers ||= {}
|
10
|
+
options[:ssl_context] ||= resolve_ssl_context
|
11
|
+
options[:redirect_limit] ||= @redirect_limit
|
12
|
+
|
13
|
+
with_error_handling do
|
14
|
+
resp = @client.get(to_url(path), headers: headers, options: options)
|
15
|
+
resp.nethttp
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def post(path, data, headers = nil, options = {})
|
20
|
+
headers ||= {}
|
21
|
+
headers['Content-Type'] ||= "application/x-www-form-urlencoded"
|
22
|
+
data ||= ''
|
23
|
+
options[:ssl_context] ||= resolve_ssl_context
|
24
|
+
options[:redirect_limit] ||= @redirect_limit
|
25
|
+
|
26
|
+
with_error_handling do
|
27
|
+
resp = @client.post(to_url(path), data, headers: headers, options: options)
|
28
|
+
resp.nethttp
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def head(path, headers = {}, options = {})
|
33
|
+
headers ||= {}
|
34
|
+
options[:ssl_context] ||= resolve_ssl_context
|
35
|
+
options[:redirect_limit] ||= @redirect_limit
|
36
|
+
|
37
|
+
with_error_handling do
|
38
|
+
resp = @client.head(to_url(path), headers: headers, options: options)
|
39
|
+
resp.nethttp
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete(path, headers = {'Depth' => 'Infinity'}, options = {})
|
44
|
+
headers ||= {}
|
45
|
+
options[:ssl_context] ||= resolve_ssl_context
|
46
|
+
options[:redirect_limit] ||= @redirect_limit
|
47
|
+
|
48
|
+
with_error_handling do
|
49
|
+
resp = @client.delete(to_url(path), headers: headers, options: options)
|
50
|
+
resp.nethttp
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def put(path, data, headers = nil, options = {})
|
55
|
+
headers ||= {}
|
56
|
+
headers['Content-Type'] ||= "application/x-www-form-urlencoded"
|
57
|
+
data ||= ''
|
58
|
+
options[:ssl_context] ||= resolve_ssl_context
|
59
|
+
options[:redirect_limit] ||= @redirect_limit
|
60
|
+
|
61
|
+
with_error_handling do
|
62
|
+
resp = @client.put(to_url(path), data, headers: headers, options: options)
|
63
|
+
resp.nethttp
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def request_get(*args, &block)
|
68
|
+
path, headers = *args
|
69
|
+
headers ||= {}
|
70
|
+
options = {
|
71
|
+
ssl_context: resolve_ssl_context,
|
72
|
+
redirect_limit: @redirect_limit
|
73
|
+
}
|
74
|
+
|
75
|
+
resp = @client.get(to_url(path), headers: headers, options: options) do |response|
|
76
|
+
yield response.nethttp if block_given?
|
77
|
+
end
|
78
|
+
resp.nethttp
|
79
|
+
end
|
80
|
+
|
81
|
+
def request_head(*args, &block)
|
82
|
+
path, headers = *args
|
83
|
+
headers ||= {}
|
84
|
+
options = {
|
85
|
+
ssl_context: resolve_ssl_context,
|
86
|
+
redirect_limit: @redirect_limit
|
87
|
+
}
|
88
|
+
|
89
|
+
response = @client.head(to_url(path), headers: headers, options: options)
|
90
|
+
yield response.nethttp if block_given?
|
91
|
+
response.nethttp
|
92
|
+
end
|
93
|
+
|
94
|
+
def request_post(*args, &block)
|
95
|
+
path, data, headers = *args
|
96
|
+
headers ||= {}
|
97
|
+
headers['Content-Type'] ||= "application/x-www-form-urlencoded"
|
98
|
+
options = {
|
99
|
+
ssl_context: resolve_ssl_context,
|
100
|
+
redirect_limit: @redirect_limit
|
101
|
+
}
|
102
|
+
|
103
|
+
resp = @client.post(to_url(path), data, headers: headers, options: options) do |response|
|
104
|
+
yield response.nethttp if block_given?
|
105
|
+
end
|
106
|
+
resp.nethttp
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
# The old Connection class ignores the ssl_context on the Puppet stack,
|
112
|
+
# and always loads certs/keys based on what is currently in the filesystem.
|
113
|
+
# If the files are missing, it would attempt to bootstrap the certs/keys
|
114
|
+
# while in the process of making a network request, due to the call to
|
115
|
+
# Puppet.lookup(:ssl_host) in Puppet::SSL::Validator::DefaultValidator#setup_connection.
|
116
|
+
# This class doesn't preserve the boostrap behavior because that is handled
|
117
|
+
# outside of this class, and can only be triggered by running `puppet ssl` or
|
118
|
+
# `puppet agent`.
|
119
|
+
def resolve_ssl_context
|
120
|
+
# don't need an ssl context for http connections
|
121
|
+
return nil unless @site.use_ssl?
|
122
|
+
|
123
|
+
# if our verifier has an ssl_context, use that
|
124
|
+
ctx = @verifier.ssl_context
|
125
|
+
return ctx if ctx
|
126
|
+
|
127
|
+
# load available certs
|
128
|
+
cert = Puppet::X509::CertProvider.new
|
129
|
+
ssl = Puppet::SSL::SSLProvider.new
|
130
|
+
begin
|
131
|
+
password = cert.load_private_key_password
|
132
|
+
ssl.load_context(certname: Puppet[:certname], password: password)
|
133
|
+
rescue Puppet::SSL::SSLError => e
|
134
|
+
Puppet.log_exception(e)
|
135
|
+
|
136
|
+
# if we don't have cacerts, then create a root context that doesn't
|
137
|
+
# trust anything. The old code used to fallback to VERIFY_NONE,
|
138
|
+
# which we don't want to emulate.
|
139
|
+
ssl.create_root_context(cacerts: [])
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def to_url(path)
|
144
|
+
if path =~ /^https?:\/\//
|
145
|
+
# The old Connection class accepts a URL as the request path, and sends
|
146
|
+
# it in "absolute-form" in the request line, e.g. GET https://puppet:8140/.
|
147
|
+
# See https://httpwg.org/specs/rfc7230.html#absolute-form. It just so happens
|
148
|
+
# to work because HTTP 1.1 servers are required to accept absolute-form even
|
149
|
+
# though clients are only supposed to send them to proxies, so the proxy knows
|
150
|
+
# what upstream server to CONNECT to. This method creates a URL using the
|
151
|
+
# scheme/host/port that the connection was created with, and appends the path
|
152
|
+
# and query portions of the absolute-form. The resulting request will use "origin-form"
|
153
|
+
# as it should have done all along.
|
154
|
+
abs_form = URI(path)
|
155
|
+
url = URI("#{@site.addr}/#{normalize_path(abs_form.path)}")
|
156
|
+
url.query = abs_form.query if abs_form.query
|
157
|
+
url
|
158
|
+
else
|
159
|
+
URI("#{@site.addr}/#{normalize_path(path)}")
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def normalize_path(path)
|
164
|
+
if path[0] == '/'
|
165
|
+
path[1..-1]
|
166
|
+
else
|
167
|
+
path
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def with_error_handling(&block)
|
172
|
+
yield
|
173
|
+
rescue Puppet::HTTP::TooManyRedirects => e
|
174
|
+
raise Puppet::Network::HTTP::RedirectionLimitExceededException.new(_("Too many HTTP redirections for %{host}:%{port}") % { host: @host, port: @port }, e)
|
175
|
+
rescue Puppet::HTTP::HTTPError => e
|
176
|
+
Puppet.log_exception(e, e.message)
|
177
|
+
case e.cause
|
178
|
+
when Net::OpenTimeout, Net::ReadTimeout, Net::HTTPError, EOFError
|
179
|
+
raise e.cause
|
180
|
+
else
|
181
|
+
raise e
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|