puppet 6.11.1-universal-darwin → 6.16.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 +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
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'puppet/file_serving/metadata'
|
2
|
+
|
3
|
+
#
|
4
|
+
# @api private
|
5
|
+
#
|
6
|
+
# The FileServer service is used to retrieve file metadata and content
|
7
|
+
#
|
8
|
+
class Puppet::HTTP::Service::FileServer < Puppet::HTTP::Service
|
9
|
+
# @api private
|
10
|
+
# @return [String] Default API for the FileServer service
|
11
|
+
API = '/puppet/v3'.freeze
|
12
|
+
|
13
|
+
# @api private
|
14
|
+
# @return [RegEx] RegEx used to determine if a path contains a leading slash
|
15
|
+
PATH_REGEX = /^\//
|
16
|
+
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
#
|
20
|
+
# @param [Puppet::HTTP::Client] client
|
21
|
+
# @param [Puppet::HTTP::Session] session
|
22
|
+
# @param [String] server (Puppet[:ca_server]) If an explicit server is given,
|
23
|
+
# create a service using that server. If server is nil, the default value
|
24
|
+
# is used to create the service.
|
25
|
+
# @param [Integer] port (Puppet[:ca_port]) If an explicit port is given, create
|
26
|
+
# a service using that port. If port is nil, the default value is used to
|
27
|
+
# create the service.
|
28
|
+
#
|
29
|
+
def initialize(client, session, server, port)
|
30
|
+
url = build_url(API, server || Puppet[:server], port || Puppet[:masterport])
|
31
|
+
super(client, session, url)
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
#
|
37
|
+
# Submit a GET request to the server to retrieve the metadata for a specified
|
38
|
+
# file
|
39
|
+
#
|
40
|
+
# @param [String] path path to the file to retrieve data from
|
41
|
+
# @param [String] environment the name of the environment we are operating in
|
42
|
+
# @param [Symbol] links Can be one of either `:follow` or `:manage`, defines
|
43
|
+
# how links are handled.
|
44
|
+
# @param [String] checksum_type The digest algorithm used to verify the file.
|
45
|
+
# Currently if fips is enabled, this defaults to `sha256`. Otherwise, it
|
46
|
+
# defaults to `md5`.
|
47
|
+
# @param [Symbol] source_permissions Can be one of `:use`, `:use_when_creating`,
|
48
|
+
# or `:ignore`. This parameter tells the server if it should include the
|
49
|
+
# file permissions in the response. If set to `:ignore`, the server will
|
50
|
+
# return default permissions.
|
51
|
+
#
|
52
|
+
# @return [Array<Puppet::HTTP::Response, Puppet::FileServing::Metadata>] An
|
53
|
+
# array with the request response and the deserialized metadata for the
|
54
|
+
# file returned from the server
|
55
|
+
#
|
56
|
+
def get_file_metadata(path:, environment:, links: :manage, checksum_type: Puppet[:digest_algorithm], source_permissions: :ignore)
|
57
|
+
validate_path(path)
|
58
|
+
|
59
|
+
headers = add_puppet_headers('Accept' => get_mime_types(Puppet::FileServing::Metadata).join(', '))
|
60
|
+
|
61
|
+
response = @client.get(
|
62
|
+
with_base_url("/file_metadata#{path}"),
|
63
|
+
headers: headers,
|
64
|
+
params: {
|
65
|
+
links: links,
|
66
|
+
checksum_type: checksum_type,
|
67
|
+
source_permissions: source_permissions,
|
68
|
+
environment: environment
|
69
|
+
}
|
70
|
+
)
|
71
|
+
|
72
|
+
process_response(response)
|
73
|
+
|
74
|
+
[response, deserialize(response, Puppet::FileServing::Metadata)]
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# @api private
|
79
|
+
#
|
80
|
+
# Submit a GET request to the server to retrieve the metadata for multiple files
|
81
|
+
#
|
82
|
+
# @param [String] path path to the file(s) to retrieve data from
|
83
|
+
# @param [String] environment the name of the environment we are operating in
|
84
|
+
# @param [Symbol] recurse Can be `:true`, `:false`, or `:remote`. Defines if
|
85
|
+
# we recursively return the contents of the directory. Used in conjunction
|
86
|
+
# with `:recurselimit`. See the reference documentation for the file type
|
87
|
+
# for more details.
|
88
|
+
# @param [Integer] recurselimit When `recurse` is set, `recurselimit` defines
|
89
|
+
# how far Puppet should descend into subdirectories. `0` is effectively the
|
90
|
+
# same as `recurse => false`, `1` will return files and directories directly
|
91
|
+
# inside the defined directory, `2` will return the direct content of the
|
92
|
+
# directory as well as the contents of the _first_ level of subdirectories.
|
93
|
+
# The pattern continues for each incremental value. See the reference
|
94
|
+
# documentation for the file type for more details.
|
95
|
+
# @param [Array<String>] ignore An optional array of files to ignore, ie `['CVS', '.git', '.hg']`
|
96
|
+
# @param [Symbol] links Can be one of either `:follow` or `:manage`, defines
|
97
|
+
# how links are handled.
|
98
|
+
# @param [String] checksum_type The digest algorithm used to verify the file.
|
99
|
+
# Currently if fips is enabled, this defaults to `sha256`. Otherwise, it's `md5`.
|
100
|
+
# @param [Symbol] source_permissions Can be one of `:use`, `:use_when_creating`,
|
101
|
+
# or `:ignore`. This parameter tells the server if it should include the
|
102
|
+
# file permissions in the report. If set to `:ignore`, the server will return
|
103
|
+
# default permissions.
|
104
|
+
#
|
105
|
+
# @return [Array<Puppet::HTTP::Response, Array<Puppet::FileServing::Metadata>>]
|
106
|
+
# An array with the request response and an array of the deserialized
|
107
|
+
# metadata for each file returned from the server
|
108
|
+
#
|
109
|
+
def get_file_metadatas(path: nil, environment:, recurse: :false, recurselimit: nil, ignore: nil, links: :manage, checksum_type: Puppet[:digest_algorithm], source_permissions: :ignore)
|
110
|
+
validate_path(path)
|
111
|
+
|
112
|
+
headers = add_puppet_headers('Accept' => get_mime_types(Puppet::FileServing::Metadata).join(', '))
|
113
|
+
|
114
|
+
response = @client.get(
|
115
|
+
with_base_url("/file_metadatas#{path}"),
|
116
|
+
headers: headers,
|
117
|
+
params: {
|
118
|
+
recurse: recurse,
|
119
|
+
recurselimit: recurselimit,
|
120
|
+
ignore: ignore,
|
121
|
+
links: links,
|
122
|
+
checksum_type: checksum_type,
|
123
|
+
source_permissions: source_permissions,
|
124
|
+
environment: environment,
|
125
|
+
}
|
126
|
+
)
|
127
|
+
|
128
|
+
process_response(response)
|
129
|
+
|
130
|
+
[response, deserialize_multiple(response, Puppet::FileServing::Metadata)]
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# @api private
|
135
|
+
#
|
136
|
+
# Submit a GET request to the server to retrieve content of a file
|
137
|
+
#
|
138
|
+
# @param [String] path path to the file to retrieve data from
|
139
|
+
# @param [String] environment the name of the environment we are operating in
|
140
|
+
#
|
141
|
+
# @yield [Sting] Yields the body of the response returned from the server
|
142
|
+
#
|
143
|
+
# @return [Puppet::HTTP::Response] The request response
|
144
|
+
#
|
145
|
+
def get_file_content(path:, environment:, &block)
|
146
|
+
validate_path(path)
|
147
|
+
|
148
|
+
headers = add_puppet_headers('Accept' => 'application/octet-stream')
|
149
|
+
response = @client.get(
|
150
|
+
with_base_url("/file_content#{path}"),
|
151
|
+
headers: headers,
|
152
|
+
params: {
|
153
|
+
environment: environment
|
154
|
+
}
|
155
|
+
) do |res|
|
156
|
+
if res.success?
|
157
|
+
res.read_body(&block)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
process_response(response)
|
162
|
+
|
163
|
+
response
|
164
|
+
end
|
165
|
+
|
166
|
+
#
|
167
|
+
# @api private
|
168
|
+
#
|
169
|
+
# Submit a GET request to
|
170
|
+
#
|
171
|
+
# @param [String] path path to the file to retrieve data from
|
172
|
+
# @param [String] environment the name of the environment we are operating in
|
173
|
+
# @param [String] code_id Defines the version of the resource to return
|
174
|
+
#
|
175
|
+
# @yield [String] Yields the body of the response returned
|
176
|
+
#
|
177
|
+
# @return [Puppet::HTTP::Response] The request response
|
178
|
+
#
|
179
|
+
def get_static_file_content(path:, environment:, code_id:, &block)
|
180
|
+
validate_path(path)
|
181
|
+
|
182
|
+
headers = add_puppet_headers('Accept' => 'application/octet-stream')
|
183
|
+
response = @client.get(
|
184
|
+
with_base_url("/static_file_content#{path}"),
|
185
|
+
headers: headers,
|
186
|
+
params: {
|
187
|
+
environment: environment,
|
188
|
+
code_id: code_id,
|
189
|
+
}
|
190
|
+
) do |res|
|
191
|
+
if res.success?
|
192
|
+
res.read_body(&block)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
process_response(response)
|
197
|
+
|
198
|
+
response
|
199
|
+
end
|
200
|
+
|
201
|
+
private
|
202
|
+
|
203
|
+
def validate_path(path)
|
204
|
+
raise ArgumentError, "Path must start with a slash" unless path =~ PATH_REGEX
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# The Report service is used to submit run reports to the report server
|
5
|
+
#
|
6
|
+
class Puppet::HTTP::Service::Report < Puppet::HTTP::Service
|
7
|
+
|
8
|
+
# @api private
|
9
|
+
# @return [String] Default API for the report service
|
10
|
+
API = '/puppet/v3'.freeze
|
11
|
+
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
#
|
15
|
+
# @param [Puppet::HTTP::Client] client
|
16
|
+
# @param [Puppet::HTTP::Session] session
|
17
|
+
# @param [String] server (Puppet[:ca_server]) If an explicit server is given,
|
18
|
+
# create a service using that server. If server is nil, the default value
|
19
|
+
# is used to create the service.
|
20
|
+
# @param [Integer] port (Puppet[:ca_port]) If an explicit port is given, create
|
21
|
+
# a service using that port. If port is nil, the default value is used to
|
22
|
+
# create the service.
|
23
|
+
#
|
24
|
+
def initialize(client, session, server, port)
|
25
|
+
url = build_url(API, server || Puppet[:report_server], port || Puppet[:report_port])
|
26
|
+
super(client, session, url)
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
# Submit a report to the report server
|
33
|
+
#
|
34
|
+
# @param [String] name the name of the report being submitted
|
35
|
+
# @param [Puppet::Transaction::Report] report run report to be submitted
|
36
|
+
# @param [String] environment name of the agent environment
|
37
|
+
#
|
38
|
+
# @return [Puppet::HTTP::Response] response returned by the server
|
39
|
+
#
|
40
|
+
def put_report(name, report, environment:)
|
41
|
+
formatter = Puppet::Network::FormatHandler.format_for(Puppet[:preferred_serialization_format])
|
42
|
+
headers = add_puppet_headers(
|
43
|
+
'Accept' => get_mime_types(Puppet::Transaction::Report).join(', '),
|
44
|
+
'Content-Type' => formatter.mime
|
45
|
+
)
|
46
|
+
|
47
|
+
response = @client.put(
|
48
|
+
with_base_url("/report/#{name}"),
|
49
|
+
serialize(formatter, report),
|
50
|
+
headers: headers,
|
51
|
+
params: { environment: environment },
|
52
|
+
)
|
53
|
+
|
54
|
+
# override parent's process_response handling
|
55
|
+
@session.process_response(response)
|
56
|
+
|
57
|
+
if response.success?
|
58
|
+
response
|
59
|
+
elsif !@session.supports?(:report, 'json') && Puppet[:preferred_serialization_format] != 'pson'
|
60
|
+
#TRANSLATORS "pson", "preferred_serialization_format", and "puppetserver" should not be translated
|
61
|
+
raise Puppet::HTTP::ProtocolError.new(_("To submit reports to a server running puppetserver %{server_version}, set preferred_serialization_format to pson") % { server_version: response[Puppet::HTTP::HEADER_PUPPET_VERSION]})
|
62
|
+
else
|
63
|
+
raise Puppet::HTTP::ResponseError.new(response)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/puppet/http/session.rb
CHANGED
@@ -1,55 +1,130 @@
|
|
1
|
+
#
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
# The session is the mechanism by which services may be connected to and accessed.
|
5
|
+
#
|
1
6
|
class Puppet::HTTP::Session
|
2
|
-
|
7
|
+
# capabilities for a site
|
8
|
+
CAP_LOCALES = 'locales'.freeze
|
9
|
+
CAP_JSON = 'json'.freeze
|
3
10
|
|
4
|
-
|
5
|
-
|
6
|
-
}.freeze
|
11
|
+
# puppet version where locales mount was added
|
12
|
+
SUPPORTED_LOCALES_MOUNT_AGENT_VERSION = Gem::Version.new("5.3.4")
|
7
13
|
|
14
|
+
# puppet version where JSON was enabled by default
|
15
|
+
SUPPORTED_JSON_DEFAULT = Gem::Version.new("5.0.0")
|
16
|
+
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
#
|
20
|
+
# Create a new HTTP session. The session is the mechanism by which services
|
21
|
+
# may be connected to and accessed.
|
22
|
+
#
|
23
|
+
# @param [Puppet::HTTP::Client] client the container for this session
|
24
|
+
# @param [Array<Puppet::HTTP::Resolver>] resolvers array of resolver strategies
|
25
|
+
# to implement.
|
26
|
+
#
|
8
27
|
def initialize(client, resolvers)
|
9
28
|
@client = client
|
10
29
|
@resolvers = resolvers
|
11
30
|
@resolved_services = {}
|
31
|
+
@server_versions = {}
|
12
32
|
end
|
13
33
|
|
14
|
-
|
15
|
-
|
16
|
-
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
#
|
37
|
+
# If an explicit server and port are specified on the command line or
|
38
|
+
# configuration file, this method always returns a Service with that host and
|
39
|
+
# port. Otherwise, we walk the list of resolvers in priority order:
|
40
|
+
# - DNS SRV
|
41
|
+
# - Server List
|
42
|
+
# - Puppet server/port settings
|
43
|
+
# If a given resolver fails to connect, it tries the next available resolver
|
44
|
+
# until a successful connection is found and returned. The successful service
|
45
|
+
# is cached and returned if `route_to` is called again.
|
46
|
+
#
|
47
|
+
# @param [Symbol] name the service to resolve
|
48
|
+
# @param [URI] url (nil) optional explicit url to use, if it is already known
|
49
|
+
# @param [Puppet::SSL::SSLContext] ssl_context ssl_context ssl context to be
|
50
|
+
# used for connections
|
51
|
+
#
|
52
|
+
# @return [Puppet::HTTP::Service] the resolved service
|
53
|
+
#
|
54
|
+
def route_to(name, url: nil, ssl_context: nil)
|
55
|
+
raise ArgumentError, "Unknown service #{name}" unless Puppet::HTTP::Service.valid_name?(name)
|
56
|
+
|
57
|
+
# short circuit if explicit URL host & port given
|
58
|
+
if url && url.host != nil && !url.host.empty?
|
59
|
+
service = Puppet::HTTP::Service.create_service(@client, self, name, url.host, url.port)
|
60
|
+
service.connect(ssl_context: ssl_context)
|
61
|
+
return service
|
62
|
+
end
|
17
63
|
|
18
64
|
cached = @resolved_services[name]
|
19
65
|
return cached if cached
|
20
66
|
|
21
|
-
|
67
|
+
resolution_exceptions = []
|
68
|
+
error_handler = proc { |e| resolution_exceptions << e }
|
22
69
|
|
23
70
|
@resolvers.each do |resolver|
|
24
71
|
Puppet.debug("Resolving service '#{name}' using #{resolver.class}")
|
25
|
-
resolver.resolve(self, name
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
return service
|
31
|
-
rescue Puppet::HTTP::ConnectionError => e
|
32
|
-
errors << e
|
33
|
-
Puppet.debug("Connection to #{service.url} failed, trying next route: #{e.message}")
|
34
|
-
end
|
72
|
+
service = resolver.resolve(self, name, ssl_context: ssl_context, error_handler: error_handler)
|
73
|
+
if service
|
74
|
+
@resolved_services[name] = service
|
75
|
+
Puppet.debug("Resolved service '#{name}' to #{service.url}")
|
76
|
+
return service
|
35
77
|
end
|
36
78
|
end
|
37
79
|
|
38
|
-
|
39
|
-
|
80
|
+
resolution_exceptions.each { |e| Puppet.log_exception(e) }
|
40
81
|
raise Puppet::HTTP::RouteError, "No more routes to #{name}"
|
41
82
|
end
|
42
83
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
84
|
+
#
|
85
|
+
# @api private
|
86
|
+
#
|
87
|
+
# Collect per-site server versions. This will allow us to modify future
|
88
|
+
# requests based on the version of puppetserver we are talking to.
|
89
|
+
#
|
90
|
+
# @param [Puppet::HTTP::Response] response the request response containing headers
|
91
|
+
#
|
92
|
+
def process_response(response)
|
93
|
+
version = response[Puppet::HTTP::HEADER_PUPPET_VERSION]
|
94
|
+
if version
|
95
|
+
site = Puppet::Network::HTTP::Site.from_uri(response.url)
|
96
|
+
@server_versions[site] = version
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
#
|
101
|
+
# @api private
|
102
|
+
#
|
103
|
+
# Determine if a session supports a capability. Depending on the server version
|
104
|
+
# we are talking to, we know certain features are available or not. These
|
105
|
+
# specifications are defined here so we can modify our requests appropriately.
|
106
|
+
#
|
107
|
+
# @param [Symbol] name name of the service to check
|
108
|
+
# @param [String] capability the capability, ie `locales` or `json`
|
109
|
+
#
|
110
|
+
# @return [Boolean]
|
111
|
+
#
|
112
|
+
def supports?(name, capability)
|
113
|
+
raise ArgumentError, "Unknown service #{name}" unless Puppet::HTTP::Service.valid_name?(name)
|
114
|
+
|
115
|
+
service = @resolved_services[name]
|
116
|
+
return false unless service
|
117
|
+
|
118
|
+
site = Puppet::Network::HTTP::Site.from_uri(service.url)
|
119
|
+
server_version = @server_versions[site]
|
120
|
+
|
121
|
+
case capability
|
122
|
+
when CAP_LOCALES
|
123
|
+
!server_version.nil? && Gem::Version.new(server_version) >= SUPPORTED_LOCALES_MOUNT_AGENT_VERSION
|
124
|
+
when CAP_JSON
|
125
|
+
server_version.nil? || Gem::Version.new(server_version) >= SUPPORTED_JSON_DEFAULT
|
126
|
+
else
|
127
|
+
false
|
128
|
+
end
|
54
129
|
end
|
55
130
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'puppet/environments'
|
1
2
|
require 'puppet/node'
|
2
3
|
require 'puppet/resource/catalog'
|
3
4
|
require 'puppet/indirector/code'
|
@@ -173,6 +174,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
173
174
|
# Initially restricted to files sourced from codedir via puppet:/// uri.
|
174
175
|
def inline_metadata(catalog, checksum_type)
|
175
176
|
environment_path = Pathname.new File.join(Puppet[:environmentpath], catalog.environment, "")
|
177
|
+
environment_path = Puppet::Environments::Directories.real_path(environment_path)
|
176
178
|
list_of_resources = catalog.resources.find_all { |res| res.type == "File" }
|
177
179
|
|
178
180
|
# TODO: get property/parameter defaults if entries are nil in the resource
|
@@ -393,9 +395,17 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
393
395
|
|
394
396
|
# Initialize our server fact hash; we add these to each client, and they
|
395
397
|
# won't change while we're running, so it's safe to cache the values.
|
398
|
+
#
|
399
|
+
# See also set_server_facts in Puppet::Server::Compiler in puppetserver.
|
396
400
|
def set_server_facts
|
397
401
|
@server_facts = {}
|
398
402
|
|
403
|
+
# Add our server Puppet Enterprise version, if available.
|
404
|
+
pe_version_file = '/opt/puppetlabs/server/pe_version'
|
405
|
+
if File.readable?(pe_version_file) and !File.zero?(pe_version_file)
|
406
|
+
@server_facts['pe_serverversion'] = File.read(pe_version_file).chomp
|
407
|
+
end
|
408
|
+
|
399
409
|
# Add our server version to the fact list
|
400
410
|
@server_facts["serverversion"] = Puppet.version.to_s
|
401
411
|
|