puppet 6.11.1-x86-mingw32 → 6.16.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 +3 -8
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +1 -0
- data/Gemfile.lock +39 -36
- data/README.md +17 -24
- data/ext/build_defaults.yaml +1 -0
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +25 -20
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +12 -14
- 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/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +85 -83
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +158 -40
- data/lib/puppet/environments.rb +30 -20
- data/lib/puppet/error.rb +9 -1
- 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 +1 -1
- data/lib/puppet/file_system/file_impl.rb +13 -9
- 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 +4 -0
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +31 -86
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +7 -0
- data/lib/puppet/http/client.rb +341 -54
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +34 -0
- data/lib/puppet/http/resolver.rb +57 -1
- data/lib/puppet/http/resolver/server_list.rb +98 -0
- data/lib/puppet/http/resolver/settings.rb +23 -2
- data/lib/puppet/http/resolver/srv.rb +36 -4
- data/lib/puppet/http/response.rb +68 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +179 -3
- data/lib/puppet/http/service/ca.rb +84 -21
- 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 +66 -0
- data/lib/puppet/http/session.rb +106 -31
- 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 +4 -4
- 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/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/base_pool.rb +19 -1
- 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 +182 -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 +24 -8
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +9 -29
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
- data/lib/puppet/parser/compiler.rb +42 -32
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +30 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- 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/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 +5 -5
- 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 +108 -24
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +23 -5
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -8
- data/lib/puppet/reports/http.rb +13 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +32 -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_provider.rb +20 -0
- 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 +7 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +7 -2
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/file/source.rb +49 -58
- data/lib/puppet/type/group.rb +5 -4
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/user.rb +6 -30
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/logging.rb +30 -18
- 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/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +50 -20
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +640 -521
- data/man/man5/puppet.conf.5 +88 -9
- data/man/man8/puppet-agent.8 +6 -6
- 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/forge/bacula.json +76 -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 +394 -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/http/client_spec.rb +154 -0
- 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 +51 -0
- data/spec/integration/network/http_pool_spec.rb +76 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +20 -9
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/spec_helper.rb +6 -2
- 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/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +400 -406
- data/spec/unit/context/trusted_information_spec.rb +17 -0
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +38 -4
- 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_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +395 -27
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +81 -12
- data/spec/unit/http/response_spec.rb +69 -0
- data/spec/unit/http/service/ca_spec.rb +100 -7
- 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 +118 -0
- data/spec/unit/http/service_spec.rb +117 -4
- data/spec/unit/http/session_spec.rb +237 -19
- 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 +167 -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/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/network/http/connection_spec.rb +549 -176
- 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/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- 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 +9 -4
- 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/package_targetable_spec.rb +60 -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/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +21 -8
- 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/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 +71 -0
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +4 -0
- data/spec/unit/transaction_spec.rb +45 -1
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +86 -35
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- 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 +55 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +6 -35
- metadata +92 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/lib/puppet_spec/validators.rb +0 -37
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
|
|
@@ -4,10 +4,11 @@
|
|
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
|
11
|
+
print_ssl_info(http) if Puppet::Util::Log.sendlevel?(:debug)
|
11
12
|
rescue OpenSSL::SSL::SSLError => error
|
12
13
|
verifier.handle_connection_error(http, error)
|
13
14
|
end
|
@@ -15,4 +16,21 @@ class Puppet::Network::HTTP::BasePool
|
|
15
16
|
http.start
|
16
17
|
end
|
17
18
|
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def print_ssl_info(http)
|
23
|
+
buffered_io = http.instance_variable_get(:@socket)
|
24
|
+
return unless buffered_io
|
25
|
+
|
26
|
+
socket = buffered_io.io
|
27
|
+
return unless socket
|
28
|
+
|
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}")
|
35
|
+
end
|
18
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
|
|
@@ -213,6 +213,10 @@ module Puppet::Network::HTTP
|
|
213
213
|
current_request[header] = value
|
214
214
|
end
|
215
215
|
when 429, 503
|
216
|
+
if connection.started?
|
217
|
+
Puppet.debug("Closing connection for #{current_site}")
|
218
|
+
connection.finish
|
219
|
+
end
|
216
220
|
response = handle_retry_after(current_response)
|
217
221
|
else
|
218
222
|
response = current_response
|
@@ -339,6 +343,8 @@ module Puppet::Network::HTTP
|
|
339
343
|
end
|
340
344
|
|
341
345
|
def with_connection(site, &block)
|
346
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::Connection is deprecated. Please use Puppet::Network::HTTP::ConnectionAdapter instead.'))
|
347
|
+
|
342
348
|
response = nil
|
343
349
|
@pool.with_connection(site, @verifier) do |conn|
|
344
350
|
response = yield conn
|
@@ -0,0 +1,182 @@
|
|
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
|
+
# portion of the absolute-form. The resulting request will use "origin-form"
|
153
|
+
# as it should have done all along.
|
154
|
+
url = URI(path)
|
155
|
+
URI("#{@site.addr}/#{normalize_path(url.path)}")
|
156
|
+
else
|
157
|
+
URI("#{@site.addr}/#{Puppet::Util.uri_encode(normalize_path(path))}")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def normalize_path(path)
|
162
|
+
if path[0] == '/'
|
163
|
+
path[1..-1]
|
164
|
+
else
|
165
|
+
path
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def with_error_handling(&block)
|
170
|
+
yield
|
171
|
+
rescue Puppet::HTTP::TooManyRedirects => e
|
172
|
+
raise Puppet::Network::HTTP::RedirectionLimitExceededException.new(_("Too many HTTP redirections for %{host}:%{port}") % { host: @host, port: @port }, e)
|
173
|
+
rescue Puppet::HTTP::HTTPError => e
|
174
|
+
Puppet.log_exception(e, e.message)
|
175
|
+
case e.cause
|
176
|
+
when Net::OpenTimeout, Net::ReadTimeout, Net::HTTPError, EOFError
|
177
|
+
raise e.cause
|
178
|
+
else
|
179
|
+
raise e
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|