puppet 6.12.0-x64-mingw32 → 6.17.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +39 -36
- data/README.md +18 -25
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +65 -69
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +154 -58
- data/lib/puppet/environments.rb +27 -20
- data/lib/puppet/face/facts.rb +8 -5
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +14 -10
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +5 -0
- data/lib/puppet/http/client.rb +293 -73
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +151 -7
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +49 -23
- data/lib/puppet/http/session.rb +103 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/base_pool.rb +7 -2
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +11 -1
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +4 -29
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
- data/lib/puppet/parser/compiler.rb +43 -33
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/validation/checker4_0.rb +11 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +78 -4
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +109 -25
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +22 -12
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +15 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +18 -6
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +51 -60
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +55 -8
- data/lib/puppet/type/user.rb +3 -28
- data/lib/puppet/util.rb +39 -15
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +2 -2
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +23 -8
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +707 -574
- data/man/man5/puppet.conf.5 +74 -14
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
- data/spec/integration/application/agent_spec.rb +483 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +2 -15
- data/spec/integration/network/http_pool_spec.rb +93 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +40 -5
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/configurer/fact_handler_spec.rb +4 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +17 -18
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +25 -2
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +327 -35
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -2
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -11
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +27 -9
- data/spec/unit/http/service_spec.rb +98 -5
- data/spec/unit/http/session_spec.rb +190 -7
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +559 -175
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkg_spec.rb +15 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +92 -12
- data/spec/unit/provider/service/windows_spec.rb +22 -14
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +43 -24
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +185 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +73 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/test/test_helper_spec.rb +0 -31
| @@ -217,13 +217,13 @@ class Puppet::Transaction::Report | |
| 217 217 | 
             
              end
         | 
| 218 218 |  | 
| 219 219 | 
             
              # @api private
         | 
| 220 | 
            -
              def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil)
         | 
| 220 | 
            +
              def initialize(configuration_version=nil, environment=nil, transaction_uuid=nil, job_id=nil, start_time=Time.now)
         | 
| 221 221 | 
             
                @metrics = {}
         | 
| 222 222 | 
             
                @logs = []
         | 
| 223 223 | 
             
                @resource_statuses = {}
         | 
| 224 224 | 
             
                @external_times ||= {}
         | 
| 225 225 | 
             
                @host = Puppet[:node_name_value]
         | 
| 226 | 
            -
                @time =  | 
| 226 | 
            +
                @time = start_time
         | 
| 227 227 | 
             
                @report_format = 10
         | 
| 228 228 | 
             
                @puppet_version = Puppet.version
         | 
| 229 229 | 
             
                @configuration_version = configuration_version
         | 
| @@ -101,7 +101,7 @@ class Puppet::Transaction::ResourceHarness | |
| 101 101 | 
             
              # We persist the last known values for the properties of a resource after resource
         | 
| 102 102 | 
             
              # application.
         | 
| 103 103 | 
             
              # @param [Puppet::Type] resource resource whose values we are to persist.
         | 
| 104 | 
            -
              # @param [ | 
| 104 | 
            +
              # @param [ResourceApplicationContext] context the application context to operate on.
         | 
| 105 105 | 
             
              def persist_system_values(resource, context)
         | 
| 106 106 | 
             
                param_to_event = {}
         | 
| 107 107 | 
             
                context.status.events.each do |ev|
         | 
| @@ -3,11 +3,39 @@ module Puppet::TrustedExternal | |
| 3 3 | 
             
              def retrieve(certname)
         | 
| 4 4 | 
             
                command = Puppet[:trusted_external_command]
         | 
| 5 5 | 
             
                return nil unless command
         | 
| 6 | 
            +
                Puppet.debug _("Retrieving trusted external data from %{command}") % {command: command}
         | 
| 7 | 
            +
                setting_type = Puppet.settings.setting(:trusted_external_command).type
         | 
| 8 | 
            +
                if setting_type == :file
         | 
| 9 | 
            +
                  return fetch_data(command, certname)
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
                # command is a directory. Thus, data is a hash of <basename> => <data> for
         | 
| 12 | 
            +
                # each executable file in command. For example, if the files 'servicenow.rb',
         | 
| 13 | 
            +
                # 'unicorn.sh' are in command, then data is the following hash:
         | 
| 14 | 
            +
                #   { 'servicenow' => <servicenow.rb output>, 'unicorn' => <unicorn.sh output> }
         | 
| 15 | 
            +
                data = {}
         | 
| 16 | 
            +
                Puppet::FileSystem.children(command).each do |file|
         | 
| 17 | 
            +
                  abs_path = Puppet::FileSystem.expand_path(file)
         | 
| 18 | 
            +
                  executable_file = Puppet::FileSystem.file?(abs_path) && Puppet::FileSystem.executable?(abs_path)
         | 
| 19 | 
            +
                  unless executable_file
         | 
| 20 | 
            +
                    Puppet.debug _("Skipping non-executable file %{file}")  % { file: abs_path }
         | 
| 21 | 
            +
                    next
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                  basename = file.basename(file.extname).to_s
         | 
| 24 | 
            +
                  unless data[basename].nil?
         | 
| 25 | 
            +
                    raise Puppet::Error, _("There is more than one '%{basename}' script in %{dir}") % { basename: basename, dir: command }
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  data[basename] = fetch_data(abs_path, certname)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                data
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              module_function :retrieve
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              def fetch_data(command, certname)
         | 
| 6 34 | 
             
                result = Puppet::Util::Execution.execute([command, certname], {
         | 
| 7 35 | 
             
                  :combine => false,
         | 
| 8 36 | 
             
                  :failonfail => true,
         | 
| 9 37 | 
             
                })
         | 
| 10 38 | 
             
                JSON.parse(result)
         | 
| 11 39 | 
             
              end
         | 
| 12 | 
            -
              module_function : | 
| 40 | 
            +
              module_function :fetch_data
         | 
| 13 41 | 
             
            end
         | 
    
        data/lib/puppet/type.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ require 'puppet/metatype/manager' | |
| 10 10 | 
             
            require 'puppet/util/errors'
         | 
| 11 11 | 
             
            require 'puppet/util/logging'
         | 
| 12 12 | 
             
            require 'puppet/util/tagging'
         | 
| 13 | 
            +
            require 'puppet/concurrent/lock'
         | 
| 13 14 |  | 
| 14 15 | 
             
            # see the bottom of the file for the rest of the inclusions
         | 
| 15 16 |  | 
| @@ -84,6 +85,11 @@ class Type | |
| 84 85 | 
             
              # Comparing type instances.
         | 
| 85 86 | 
             
              include Comparable
         | 
| 86 87 |  | 
| 88 | 
            +
              # These variables are used in Metatype::Manager for managing types
         | 
| 89 | 
            +
              @types = {}
         | 
| 90 | 
            +
              @manager_lock = Puppet::Concurrent::Lock.new
         | 
| 91 | 
            +
              extend Puppet::MetaType::Manager
         | 
| 92 | 
            +
             | 
| 87 93 | 
             
              # Compares this type against the given _other_ (type) and returns -1, 0, or +1 depending on the order.
         | 
| 88 94 | 
             
              # @param other [Object] the object to compare against (produces nil, if not kind of Type}
         | 
| 89 95 | 
             
              # @return [-1, 0, +1, nil] produces -1 if this type is before the given _other_ type, 0 if equals, and 1 if after.
         | 
| @@ -110,8 +116,10 @@ class Type | |
| 110 116 |  | 
| 111 117 | 
             
              # Allow declaring that a type is actually a capability
         | 
| 112 118 | 
             
              class << self
         | 
| 119 | 
            +
                # @deprecated application orchestration will be removed in puppet 7
         | 
| 113 120 | 
             
                attr_accessor :is_capability
         | 
| 114 121 |  | 
| 122 | 
            +
                # @deprecated application orchestration will be removed in puppet 7
         | 
| 115 123 | 
             
                def is_capability?
         | 
| 116 124 | 
             
                  c = is_capability
         | 
| 117 125 | 
             
                  c.nil? ? false : c
         | 
| @@ -123,6 +131,8 @@ class Type | |
| 123 131 | 
             
              # represent application instances, this implementation always returns
         | 
| 124 132 | 
             
              # +false+. Having this method though makes code checking whether a
         | 
| 125 133 | 
             
              # resource is an application instance simpler
         | 
| 134 | 
            +
              #
         | 
| 135 | 
            +
              # @deprecated application orchestration will be removed in puppet 7
         | 
| 126 136 | 
             
              def self.application?
         | 
| 127 137 | 
             
                  false
         | 
| 128 138 | 
             
              end
         | 
| @@ -743,7 +753,7 @@ class Type | |
| 743 753 | 
             
              # @param options [Hash] options merged with a fixed set of options defined by this method, passed on to {Puppet::Transaction::Event}.
         | 
| 744 754 | 
             
              # @return [Puppet::Transaction::Event] the created event
         | 
| 745 755 | 
             
              def event(options = {})
         | 
| 746 | 
            -
                Puppet::Transaction::Event.new({:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
         | 
| 756 | 
            +
                Puppet::Transaction::Event.new(**{:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
         | 
| 747 757 | 
             
              end
         | 
| 748 758 |  | 
| 749 759 | 
             
              # @return [Object, nil] Returns the 'should' (wanted state) value for a specified property, or nil if the
         | 
| @@ -1199,15 +1209,16 @@ class Type | |
| 1199 1209 | 
             
                  provider.instances.collect do |instance|
         | 
| 1200 1210 | 
             
                    # We always want to use the "first" provider instance we find, unless the resource
         | 
| 1201 1211 | 
             
                    # is already managed and has a different provider set
         | 
| 1202 | 
            -
                     | 
| 1212 | 
            +
                    title = instance.respond_to?(:title) ? instance.title : instance.name
         | 
| 1213 | 
            +
                    other = provider_instances[title]
         | 
| 1203 1214 | 
             
                    if other
         | 
| 1204 1215 | 
             
                      Puppet.debug "%s %s found in both %s and %s; skipping the %s version" %
         | 
| 1205 | 
            -
                        [self.name.to_s.capitalize,  | 
| 1216 | 
            +
                        [self.name.to_s.capitalize, title, other.class.name, instance.class.name, instance.class.name]
         | 
| 1206 1217 | 
             
                      next
         | 
| 1207 1218 | 
             
                    end
         | 
| 1208 | 
            -
                    provider_instances[ | 
| 1219 | 
            +
                    provider_instances[title] = instance
         | 
| 1209 1220 |  | 
| 1210 | 
            -
                    result = new(:name => instance.name, :provider => instance)
         | 
| 1221 | 
            +
                    result = new(:name => instance.name, :provider => instance, :title => title)
         | 
| 1211 1222 | 
             
                    properties.each { |name| result.newattr(name) }
         | 
| 1212 1223 | 
             
                    result
         | 
| 1213 1224 | 
             
                  end
         | 
| @@ -1708,6 +1719,7 @@ class Type | |
| 1708 1719 | 
             
                }
         | 
| 1709 1720 | 
             
              end
         | 
| 1710 1721 |  | 
| 1722 | 
            +
              # @deprecated application orchestration will be removed in puppet 7
         | 
| 1711 1723 | 
             
              newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
         | 
| 1712 1724 | 
             
                      desc <<EOS
         | 
| 1713 1725 | 
             
            Export a capability resource.
         | 
| @@ -1733,6 +1745,7 @@ web { server: | |
| 1733 1745 | 
             
            EOS
         | 
| 1734 1746 | 
             
              end
         | 
| 1735 1747 |  | 
| 1748 | 
            +
              # @deprecated application orchestration will be removed in puppet 7
         | 
| 1736 1749 | 
             
              newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
         | 
| 1737 1750 | 
             
                      desc <<EOS
         | 
| 1738 1751 | 
             
            Consume a capability resource.
         | 
| @@ -2284,7 +2297,6 @@ end | |
| 2284 2297 | 
             
                #
         | 
| 2285 2298 | 
             
                attr_accessor :self_refresh
         | 
| 2286 2299 | 
             
                include Enumerable, Puppet::Util::ClassGen
         | 
| 2287 | 
            -
                include Puppet::MetaType::Manager
         | 
| 2288 2300 |  | 
| 2289 2301 | 
             
                include Puppet::Util
         | 
| 2290 2302 | 
             
                include Puppet::Util::Logging
         | 
    
        data/lib/puppet/type/file.rb
    CHANGED
    
    | @@ -110,6 +110,19 @@ Puppet::Type.newtype(:file) do | |
| 110 110 | 
             
                  balancer to direct all filebucket traffic to a single master, or use
         | 
| 111 111 | 
             
                  something like an out-of-band rsync task to synchronize the content on all
         | 
| 112 112 | 
             
                  masters.
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                  > **Note**: Enabling and using the backup option, and by extension the 
         | 
| 115 | 
            +
                    filebucket resource, requires appropriate planning and management to ensure 
         | 
| 116 | 
            +
                    that sufficient disk space is available for the file backups. Generally, you 
         | 
| 117 | 
            +
                    can implement this using one of the following two options:
         | 
| 118 | 
            +
                    - Use a `find` command and `crontab` entry to retain only the last X days 
         | 
| 119 | 
            +
                    of file backups. For example,
         | 
| 120 | 
            +
                    
         | 
| 121 | 
            +
                    ```shell script
         | 
| 122 | 
            +
                    find /opt/puppetlabs/server/data/puppetserver/bucket -type f -mtime +45 -atime +45 -print0 | xargs -0 rm
         | 
| 123 | 
            +
                    ```
         | 
| 124 | 
            +
                    
         | 
| 125 | 
            +
                    - Restrict the directory to a maximum size after which the oldest items are removed.
         | 
| 113 126 | 
             
                EOT
         | 
| 114 127 |  | 
| 115 128 | 
             
                defaultto "puppet"
         | 
| @@ -388,8 +401,12 @@ Puppet::Type.newtype(:file) do | |
| 388 401 | 
             
                end
         | 
| 389 402 | 
             
              end
         | 
| 390 403 |  | 
| 391 | 
            -
               | 
| 392 | 
            -
               | 
| 404 | 
            +
              # mutually exclusive ways to create files
         | 
| 405 | 
            +
              CREATORS = [:content, :source, :target].freeze
         | 
| 406 | 
            +
             | 
| 407 | 
            +
              # This is both "checksum types that can't be used with the content property"
         | 
| 408 | 
            +
              # and "checksum types that are not digest based"
         | 
| 409 | 
            +
              SOURCE_ONLY_CHECKSUMS = [:none, :ctime, :mtime].freeze
         | 
| 393 410 |  | 
| 394 411 | 
             
              validate do
         | 
| 395 412 | 
             
                creator_count = 0
         | 
| @@ -415,7 +432,7 @@ Puppet::Type.newtype(:file) do | |
| 415 432 | 
             
                  @parameters[:content].value = @parameters[:checksum].sum(@parameters[:content].actual_content)
         | 
| 416 433 | 
             
                end
         | 
| 417 434 |  | 
| 418 | 
            -
                if self[:checksum] && self[:checksum_value] && ! | 
| 435 | 
            +
                if self[:checksum] && self[:checksum_value] && !valid_checksum?(self[:checksum], self[:checksum_value])
         | 
| 419 436 | 
             
                  self.fail _("Checksum value '%{value}' is not a valid checksum type %{checksum}") % { value: self[:checksum_value], checksum: self[:checksum] }
         | 
| 420 437 | 
             
                end
         | 
| 421 438 |  | 
| @@ -917,7 +934,7 @@ Puppet::Type.newtype(:file) do | |
| 917 934 | 
             
                      # that out.
         | 
| 918 935 | 
             
                    end
         | 
| 919 936 |  | 
| 920 | 
            -
                    fail_if_checksum_is_wrong(file.path, content_checksum) | 
| 937 | 
            +
                    fail_if_checksum_is_wrong(property, file.path, content_checksum)
         | 
| 921 938 | 
             
                  end
         | 
| 922 939 | 
             
                else
         | 
| 923 940 | 
             
                  umask = mode ? 000 : 022
         | 
| @@ -1027,17 +1044,38 @@ Puppet::Type.newtype(:file) do | |
| 1027 1044 | 
             
                end
         | 
| 1028 1045 | 
             
              end
         | 
| 1029 1046 |  | 
| 1030 | 
            -
              # Should we validate the checksum of the file we're writing?
         | 
| 1031 | 
            -
              def validate_checksum?
         | 
| 1032 | 
            -
                self[:checksum] !~ /time/
         | 
| 1033 | 
            -
              end
         | 
| 1034 | 
            -
             | 
| 1035 1047 | 
             
              # Make sure the file we wrote out is what we think it is.
         | 
| 1036 | 
            -
               | 
| 1037 | 
            -
             | 
| 1038 | 
            -
             | 
| 1048 | 
            +
              # @param [Puppet::Parameter] property the param or property that wrote the file, or nil
         | 
| 1049 | 
            +
              # @param [String] path to the file
         | 
| 1050 | 
            +
              # @param [String] the checksum for the local file
         | 
| 1051 | 
            +
              #
         | 
| 1052 | 
            +
              # @api private
         | 
| 1053 | 
            +
              #
         | 
| 1054 | 
            +
              def fail_if_checksum_is_wrong(property, path, content_checksum)
         | 
| 1055 | 
            +
                desired_checksum = desired_checksum(property, path)
         | 
| 1039 1056 |  | 
| 1040 | 
            -
                 | 
| 1057 | 
            +
                if desired_checksum && content_checksum != desired_checksum
         | 
| 1058 | 
            +
                  self.fail _("File written to disk did not match desired checksum; discarding changes (%{content_checksum} vs %{desired_checksum})") % { content_checksum: content_checksum, desired_checksum: desired_checksum }
         | 
| 1059 | 
            +
                end
         | 
| 1060 | 
            +
              end
         | 
| 1061 | 
            +
             | 
| 1062 | 
            +
              # Return the desired checksum or nil
         | 
| 1063 | 
            +
              def desired_checksum(property, path)
         | 
| 1064 | 
            +
                return if SOURCE_ONLY_CHECKSUMS.include?(self[:checksum])
         | 
| 1065 | 
            +
             | 
| 1066 | 
            +
                if self[:checksum] && self[:checksum_value]
         | 
| 1067 | 
            +
                  "{#{self[:checksum]}}#{self[:checksum_value]}"
         | 
| 1068 | 
            +
                elsif property && property.name == :source
         | 
| 1069 | 
            +
                  meta = property.metadata
         | 
| 1070 | 
            +
                  return unless meta
         | 
| 1071 | 
            +
             | 
| 1072 | 
            +
                  # due to HttpMetadata the checksum type may fallback to mtime, so recheck
         | 
| 1073 | 
            +
                  return if SOURCE_ONLY_CHECKSUMS.include?(meta.checksum_type)
         | 
| 1074 | 
            +
                  meta.checksum
         | 
| 1075 | 
            +
                elsif property && property.name == :content
         | 
| 1076 | 
            +
                  str = property.actual_content
         | 
| 1077 | 
            +
                  str ? parameter(:checksum).sum(str) : nil
         | 
| 1078 | 
            +
                end
         | 
| 1041 1079 | 
             
              end
         | 
| 1042 1080 |  | 
| 1043 1081 | 
             
              def write_temporary_file?
         | 
| @@ -9,7 +9,7 @@ Puppet::Type.type(:file).newparam(:checksum) do | |
| 9 9 |  | 
| 10 10 | 
             
                The default checksum type is md5."
         | 
| 11 11 |  | 
| 12 | 
            -
              newvalues | 
| 12 | 
            +
              newvalues(*Puppet::Util::Checksums.known_checksum_types)
         | 
| 13 13 |  | 
| 14 14 | 
             
              defaultto do
         | 
| 15 15 | 
             
                Puppet[:digest_algorithm].to_sym
         | 
| @@ -23,18 +23,18 @@ Puppet::Type.type(:file).newparam(:checksum) do | |
| 23 23 |  | 
| 24 24 | 
             
              def sum(content)
         | 
| 25 25 | 
             
                content = content.is_a?(Puppet::Pops::Types::PBinaryType::Binary) ? content.binary_buffer : content
         | 
| 26 | 
            -
                type = digest_algorithm | 
| 26 | 
            +
                type = digest_algorithm
         | 
| 27 27 | 
             
                "{#{type}}" + send(type, content)
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              def sum_file(path)
         | 
| 31 | 
            -
                type = digest_algorithm | 
| 31 | 
            +
                type = digest_algorithm
         | 
| 32 32 | 
             
                method = type.to_s + "_file"
         | 
| 33 33 | 
             
                "{#{type}}" + send(method, path).to_s
         | 
| 34 34 | 
             
              end
         | 
| 35 35 |  | 
| 36 36 | 
             
              def sum_stream(&block)
         | 
| 37 | 
            -
                type = digest_algorithm | 
| 37 | 
            +
                type = digest_algorithm
         | 
| 38 38 | 
             
                method = type.to_s + "_stream"
         | 
| 39 39 | 
             
                checksum = send(method, &block)
         | 
| 40 40 | 
             
                "{#{type}}#{checksum}"
         | 
| @@ -2,10 +2,7 @@ require 'puppet/file_serving/content' | |
| 2 2 | 
             
            require 'puppet/file_serving/metadata'
         | 
| 3 3 | 
             
            require 'puppet/file_serving/terminus_helper'
         | 
| 4 4 |  | 
| 5 | 
            -
            require 'puppet/ | 
| 6 | 
            -
            require 'puppet/network/http'
         | 
| 7 | 
            -
            require 'puppet/network/http/api/indirected_routes'
         | 
| 8 | 
            -
            require 'puppet/network/http/compression'
         | 
| 5 | 
            +
            require 'puppet/http'
         | 
| 9 6 |  | 
| 10 7 | 
             
            module Puppet
         | 
| 11 8 | 
             
              # Copy files from a local or remote source.  This state *only* does any work
         | 
| @@ -14,11 +11,6 @@ module Puppet | |
| 14 11 | 
             
              # this state, during retrieval, modifies the appropriate other states
         | 
| 15 12 | 
             
              # so that things get taken care of appropriately.
         | 
| 16 13 | 
             
              Puppet::Type.type(:file).newparam(:source) do
         | 
| 17 | 
            -
                include Puppet::Network::HTTP::Compression.module
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                BINARY_MIME_TYPES = [
         | 
| 20 | 
            -
                  Puppet::Network::FormatHandler.format_for('binary').mime
         | 
| 21 | 
            -
                ].join(', ').freeze
         | 
| 22 14 |  | 
| 23 15 | 
             
                attr_accessor :source, :local
         | 
| 24 16 | 
             
                desc <<-'EOT'
         | 
| @@ -55,6 +47,8 @@ module Puppet | |
| 55 47 | 
             
                  The `http` source uses the server `Content-MD5` header as a checksum to
         | 
| 56 48 | 
             
                  determine if the remote file has changed. If the server response does not
         | 
| 57 49 | 
             
                  include that header, Puppet defaults to using the `Last-Modified` header.
         | 
| 50 | 
            +
                  Puppet will update the local file if the header is newer than the modified
         | 
| 51 | 
            +
                  time (mtime) of the local file.
         | 
| 58 52 |  | 
| 59 53 | 
             
                  Multiple `source` values can be specified as an array, and Puppet will
         | 
| 60 54 | 
             
                  use the first source that exists. This can be used to serve different
         | 
| @@ -104,8 +98,8 @@ module Puppet | |
| 104 98 | 
             
                      # Ruby 1.9.3 and earlier have a URI bug in URI
         | 
| 105 99 | 
             
                      # to_s returns an ASCII string despite UTF-8 fragments
         | 
| 106 100 | 
             
                      # since its escaped its safe to universally call encode
         | 
| 107 | 
            -
                      #  | 
| 108 | 
            -
                       | 
| 101 | 
            +
                      # Puppet::Util.uri_unescape always returns strings in the original encoding
         | 
| 102 | 
            +
                      Puppet::Util.uri_unescape(uri_string.encode(Encoding::UTF_8))
         | 
| 109 103 | 
             
                    else
         | 
| 110 104 | 
             
                      source
         | 
| 111 105 | 
             
                    end
         | 
| @@ -129,18 +123,6 @@ module Puppet | |
| 129 123 | 
             
                  metadata && metadata.checksum
         | 
| 130 124 | 
             
                end
         | 
| 131 125 |  | 
| 132 | 
            -
                # Look up (if necessary) and return local content.
         | 
| 133 | 
            -
                def content
         | 
| 134 | 
            -
                  return @content if @content
         | 
| 135 | 
            -
                  raise Puppet::DevError, _("No source for content was stored with the metadata") unless metadata.source
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                  tmp = Puppet::FileServing::Content.indirection.find(metadata.source, :environment => resource.catalog.environment_instance, :links => resource[:links])
         | 
| 138 | 
            -
                  unless tmp
         | 
| 139 | 
            -
                    self.fail "Could not find any content at %s" % metadata.source
         | 
| 140 | 
            -
                  end
         | 
| 141 | 
            -
                  @content = tmp.content
         | 
| 142 | 
            -
                end
         | 
| 143 | 
            -
             | 
| 144 126 | 
             
                # Copy the values from the source to the resource.  Yay.
         | 
| 145 127 | 
             
                def copy_source_values
         | 
| 146 128 | 
             
                  devfail "Somehow got asked to copy source values without any metadata" unless metadata
         | 
| @@ -273,63 +255,72 @@ module Puppet | |
| 273 255 | 
             
                  end
         | 
| 274 256 | 
             
                end
         | 
| 275 257 |  | 
| 276 | 
            -
                def each_chunk_from
         | 
| 277 | 
            -
                  if Puppet[:default_file_terminus] == :file_server
         | 
| 278 | 
            -
                     | 
| 258 | 
            +
                def each_chunk_from(&block)
         | 
| 259 | 
            +
                  if Puppet[:default_file_terminus] == :file_server && scheme == 'puppet' && (uri.host.nil? || uri.host.empty?)
         | 
| 260 | 
            +
                    chunk_file_from_disk(metadata.full_path, &block)
         | 
| 279 261 | 
             
                  elsif local?
         | 
| 280 | 
            -
                    chunk_file_from_disk  | 
| 262 | 
            +
                    chunk_file_from_disk(full_path, &block)
         | 
| 281 263 | 
             
                  else
         | 
| 282 | 
            -
                    chunk_file_from_source | 
| 264 | 
            +
                    chunk_file_from_source(&block)
         | 
| 283 265 | 
             
                  end
         | 
| 284 266 | 
             
                end
         | 
| 285 267 |  | 
| 286 | 
            -
                def chunk_file_from_disk
         | 
| 287 | 
            -
                  File.open( | 
| 268 | 
            +
                def chunk_file_from_disk(local_path)
         | 
| 269 | 
            +
                  File.open(local_path, "rb") do |src|
         | 
| 288 270 | 
             
                    while chunk = src.read(8192) #rubocop:disable Lint/AssignmentInCondition
         | 
| 289 271 | 
             
                      yield chunk
         | 
| 290 272 | 
             
                    end
         | 
| 291 273 | 
             
                  end
         | 
| 292 274 | 
             
                end
         | 
| 293 275 |  | 
| 294 | 
            -
                def  | 
| 295 | 
            -
                   | 
| 296 | 
            -
                   | 
| 297 | 
            -
                    options[:code_id] = resource.catalog.code_id
         | 
| 298 | 
            -
                    request = Puppet::Indirector::Request.new(:static_file_content, :find, content_uri, nil, options)
         | 
| 299 | 
            -
                  else
         | 
| 300 | 
            -
                    request = Puppet::Indirector::Request.new(:file_content, :find, source_uri, nil, options)
         | 
| 301 | 
            -
                  end
         | 
| 276 | 
            +
                def get_from_content_uri_source(url, &block)
         | 
| 277 | 
            +
                  session = Puppet.lookup(:http_session)
         | 
| 278 | 
            +
                  api = session.route_to(:fileserver, url: url)
         | 
| 302 279 |  | 
| 303 | 
            -
                   | 
| 304 | 
            -
                     | 
| 305 | 
            -
                     | 
| 306 | 
            -
                     | 
| 307 | 
            -
             | 
| 280 | 
            +
                  api.get_static_file_content(
         | 
| 281 | 
            +
                    path: Puppet::Util.uri_unescape(url.path),
         | 
| 282 | 
            +
                    environment: resource.catalog.environment_instance.to_s,
         | 
| 283 | 
            +
                    code_id: resource.catalog.code_id,
         | 
| 284 | 
            +
                    &block
         | 
| 285 | 
            +
                  )
         | 
| 308 286 | 
             
                end
         | 
| 309 287 |  | 
| 310 | 
            -
                def  | 
| 311 | 
            -
                  Puppet | 
| 288 | 
            +
                def get_from_source_uri_source(url, &block)
         | 
| 289 | 
            +
                  session = Puppet.lookup(:http_session)
         | 
| 290 | 
            +
                  api = session.route_to(:fileserver, url: url)
         | 
| 291 | 
            +
             | 
| 292 | 
            +
                  api.get_file_content(
         | 
| 293 | 
            +
                    path: Puppet::Util.uri_unescape(url.path),
         | 
| 294 | 
            +
                    environment: resource.catalog.environment_instance.to_s,
         | 
| 295 | 
            +
                    &block
         | 
| 296 | 
            +
                  )
         | 
| 312 297 | 
             
                end
         | 
| 313 298 |  | 
| 314 | 
            -
                def  | 
| 315 | 
            -
                   | 
| 316 | 
            -
                   | 
| 317 | 
            -
                     | 
| 318 | 
            -
             | 
| 319 | 
            -
                     | 
| 299 | 
            +
                def get_from_http_source(url, &block)
         | 
| 300 | 
            +
                  client = Puppet.runtime[:http]
         | 
| 301 | 
            +
                  client.get(url, options: {include_system_store: true}) do |response|
         | 
| 302 | 
            +
                    raise Puppet::HTTP::ResponseError.new(response) unless response.success?
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                    response.read_body(&block)
         | 
| 320 305 | 
             
                  end
         | 
| 321 306 | 
             
                end
         | 
| 322 307 |  | 
| 323 | 
            -
                def chunk_file_from_source
         | 
| 324 | 
            -
                   | 
| 325 | 
            -
                     | 
| 326 | 
            -
             | 
| 327 | 
            -
                     | 
| 328 | 
            -
             | 
| 329 | 
            -
             | 
| 330 | 
            -
             | 
| 331 | 
            -
                    end
         | 
| 308 | 
            +
                def chunk_file_from_source(&block)
         | 
| 309 | 
            +
                  if uri.scheme =~ /^https?/
         | 
| 310 | 
            +
                    get_from_http_source(uri, &block)
         | 
| 311 | 
            +
                  elsif metadata.content_uri
         | 
| 312 | 
            +
                    content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
         | 
| 313 | 
            +
                    get_from_content_uri_source(content_url, &block)
         | 
| 314 | 
            +
                  else
         | 
| 315 | 
            +
                    get_from_source_uri_source(uri, &block)
         | 
| 332 316 | 
             
                  end
         | 
| 317 | 
            +
                rescue Puppet::HTTP::ResponseError => e
         | 
| 318 | 
            +
                  handle_response_error(e.response)
         | 
| 319 | 
            +
                end
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                def handle_response_error(response)
         | 
| 322 | 
            +
                  message = "Error #{response.code} on SERVER: #{response.body.empty? ? response.reason : response.body}"
         | 
| 323 | 
            +
                  raise Net::HTTPError.new(message, response.nethttp)
         | 
| 333 324 | 
             
                end
         | 
| 334 325 | 
             
              end
         | 
| 335 326 |  |