puppet 6.13.0-x64-mingw32 → 6.18.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -32
- data/README.md +17 -24
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +58 -57
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +92 -12
- data/lib/puppet/environments.rb +4 -5
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +17 -13
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +3 -0
- data/lib/puppet/http/client.rb +263 -73
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +97 -12
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +249 -16
- data/lib/puppet/http/service/file_server.rb +141 -20
- data/lib/puppet/http/service/report.rb +47 -17
- data/lib/puppet/http/session.rb +96 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/base_pool.rb +7 -2
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +1 -0
- data/lib/puppet/network/http/pool.rb +8 -5
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +22 -5
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +30 -31
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +43 -33
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +18 -9
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +24 -15
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/validation/checker4_0.rb +29 -15
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +9 -4
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +98 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +61 -14
- data/lib/puppet/provider/package/gem.rb +45 -9
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +11 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +100 -20
- data/lib/puppet/provider/package/zypper.rb +62 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +16 -5
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +3 -1
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +21 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +3 -3
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +75 -64
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +41 -3
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -29
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +13 -25
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +13 -7
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/adsi.rb +2 -2
- data/lib/puppet/util/windows/api_types.rb +60 -33
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +5 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +641 -511
- data/man/man5/puppet.conf.5 +75 -10
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
- data/spec/integration/application/agent_spec.rb +475 -0
- data/spec/integration/application/apply_spec.rb +279 -150
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +239 -0
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +123 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/network/http_pool_spec.rb +93 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +127 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -10
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +64 -46
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +24 -1
- data/spec/unit/environments_spec.rb +8 -0
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +29 -0
- data/spec/unit/file_system_spec.rb +10 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +321 -36
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -3
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -12
- data/spec/unit/http/service/compiler_spec.rb +332 -28
- data/spec/unit/http/service/file_server_spec.rb +100 -12
- data/spec/unit/http/service/report_spec.rb +19 -9
- data/spec/unit/http/service_spec.rb +94 -6
- data/spec/unit/http/session_spec.rb +159 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http/pool_spec.rb +59 -13
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +33 -0
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/provider/group/groupadd_spec.rb +22 -8
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +107 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +243 -1
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/init_spec.rb +42 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +93 -18
- data/spec/unit/provider/service/windows_spec.rb +50 -14
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +30 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
- data/spec/unit/puppet_pal_2pec.rb +11 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
- data/spec/unit/puppet_spec.rb +33 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/service_spec.rb +218 -8
- data/spec/unit/type/user_spec.rb +32 -3
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +102 -54
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +84 -52
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -64
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
data/lib/puppet/transaction.rb
CHANGED
@@ -202,7 +202,7 @@ class Puppet::Transaction
|
|
202
202
|
# mark the end of transaction evaluate.
|
203
203
|
report.transaction_completed = true
|
204
204
|
|
205
|
-
Puppet.debug "Finishing transaction #{object_id}"
|
205
|
+
Puppet.debug { "Finishing transaction #{object_id}" }
|
206
206
|
end
|
207
207
|
|
208
208
|
# Wraps application run state check to flag need to interrupt processing
|
@@ -373,7 +373,7 @@ class Puppet::Transaction
|
|
373
373
|
type_name = provider_class.resource_type.name
|
374
374
|
return if @prefetched_providers[type_name][provider_class.name] ||
|
375
375
|
@prefetch_failed_providers[type_name][provider_class.name]
|
376
|
-
Puppet.debug "Prefetching #{provider_class.name} resources for #{type_name}"
|
376
|
+
Puppet.debug { "Prefetching #{provider_class.name} resources for #{type_name}" }
|
377
377
|
begin
|
378
378
|
provider_class.prefetch(resources)
|
379
379
|
rescue LoadError, Puppet::MissingCommand => detail
|
@@ -62,7 +62,7 @@ class Puppet::Transaction::Persistence
|
|
62
62
|
result = nil
|
63
63
|
Puppet::Util.benchmark(:debug, _("Loaded transaction store file in %{seconds} seconds")) do
|
64
64
|
begin
|
65
|
-
result = Puppet::Util::Yaml.safe_load_file(filename, [Symbol])
|
65
|
+
result = Puppet::Util::Yaml.safe_load_file(filename, [Symbol, Time])
|
66
66
|
rescue Puppet::Util::Yaml::YamlLoadError => detail
|
67
67
|
Puppet.log_exception(detail, _("Transaction store file %{filename} is corrupt (%{detail}); replacing") % { filename: filename, detail: detail })
|
68
68
|
|
@@ -122,7 +122,7 @@ class Puppet::Transaction::Report
|
|
122
122
|
|
123
123
|
# @!attribute [r] corrective_change
|
124
124
|
# @return [Boolean] true if the report contains any events and resources that had
|
125
|
-
# corrective changes.
|
125
|
+
# corrective changes, including noop corrective changes.
|
126
126
|
attr_reader :corrective_change
|
127
127
|
|
128
128
|
# @return [Boolean] true if one or more resources attempted to generate
|
@@ -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
|
@@ -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,17 @@ 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
|
-
Puppet.debug
|
1205
|
-
[self.name.to_s.capitalize,
|
1215
|
+
Puppet.debug {
|
1216
|
+
"%s %s found in both %s and %s; skipping the %s version" % [self.name.to_s.capitalize, title, other.class.name, instance.class.name, instance.class.name]
|
1217
|
+
}
|
1206
1218
|
next
|
1207
1219
|
end
|
1208
|
-
provider_instances[
|
1220
|
+
provider_instances[title] = instance
|
1209
1221
|
|
1210
|
-
result = new(:name => instance.name, :provider => instance)
|
1222
|
+
result = new(:name => instance.name, :provider => instance, :title => title)
|
1211
1223
|
properties.each { |name| result.newattr(name) }
|
1212
1224
|
result
|
1213
1225
|
end
|
@@ -1708,6 +1720,7 @@ class Type
|
|
1708
1720
|
}
|
1709
1721
|
end
|
1710
1722
|
|
1723
|
+
# @deprecated application orchestration will be removed in puppet 7
|
1711
1724
|
newmetaparam(:export, :parent => RelationshipMetaparam, :attributes => {:direction => :out, :events => :NONE}) do
|
1712
1725
|
desc <<EOS
|
1713
1726
|
Export a capability resource.
|
@@ -1733,6 +1746,7 @@ web { server:
|
|
1733
1746
|
EOS
|
1734
1747
|
end
|
1735
1748
|
|
1749
|
+
# @deprecated application orchestration will be removed in puppet 7
|
1736
1750
|
newmetaparam(:consume, :parent => RelationshipMetaparam, :attributes => {:direction => :in, :events => :NONE}) do
|
1737
1751
|
desc <<EOS
|
1738
1752
|
Consume a capability resource.
|
@@ -1882,7 +1896,7 @@ end
|
|
1882
1896
|
name = name.intern
|
1883
1897
|
|
1884
1898
|
if unprovide(name)
|
1885
|
-
Puppet.debug "Reloading #{name} #{self.name} provider"
|
1899
|
+
Puppet.debug { "Reloading #{name} #{self.name} provider" }
|
1886
1900
|
end
|
1887
1901
|
|
1888
1902
|
pname = options[:parent]
|
@@ -2284,7 +2298,6 @@ end
|
|
2284
2298
|
#
|
2285
2299
|
attr_accessor :self_refresh
|
2286
2300
|
include Enumerable, Puppet::Util::ClassGen
|
2287
|
-
include Puppet::MetaType::Manager
|
2288
2301
|
|
2289
2302
|
include Puppet::Util
|
2290
2303
|
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
|
+
```
|
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'
|
@@ -31,7 +23,7 @@ module Puppet
|
|
31
23
|
* Fully qualified paths to locally available files (including files on NFS
|
32
24
|
shares or Windows mapped drives).
|
33
25
|
* `file:` URIs, which behave the same as local file paths.
|
34
|
-
* `http:` URIs, which point to files served by common web servers.
|
26
|
+
* `http(s):` URIs, which point to files served by common web servers.
|
35
27
|
|
36
28
|
The normal form of a `puppet:` URI is:
|
37
29
|
|
@@ -52,9 +44,26 @@ module Puppet
|
|
52
44
|
because HTTP servers do not transfer any metadata that translates to
|
53
45
|
ownership or permission details.
|
54
46
|
|
55
|
-
|
56
|
-
|
57
|
-
|
47
|
+
Puppet determines if file content is synchronized by computing a checksum
|
48
|
+
for the local file and comparing it against the `checksum_value`
|
49
|
+
parameter. If the `checksum_value` parameter is not specified for
|
50
|
+
`puppet` and `file` sources, Puppet computes a checksum based on its
|
51
|
+
`Puppet[:digest_algorithm]`. For `http(s)` sources, Puppet uses the
|
52
|
+
first HTTP header it recognizes out of the following list:
|
53
|
+
`X-Checksum-Sha256`, `X-Checksum-Sha1`, `X-Checksum-Md5` or `Content-MD5`.
|
54
|
+
If the server response does not include one of these headers, Puppet
|
55
|
+
defaults to using the `Last-Modified` header. Puppet updates the local
|
56
|
+
file if the header is newer than the modified time (mtime) of the local
|
57
|
+
file.
|
58
|
+
|
59
|
+
_HTTP_ URIs can include a user information component so that Puppet can
|
60
|
+
retrieve file metadata and content from HTTP servers that require HTTP Basic
|
61
|
+
authentication. For example `https://<user>:<pass>@<server>:<port>/path/to/file.`
|
62
|
+
|
63
|
+
When connecting to _HTTPS_ servers, Puppet trusts CA certificates in the
|
64
|
+
puppet-agent certificate bundle and the Puppet CA. You can configure Puppet
|
65
|
+
to trust additional CA certificates using the `Puppet[:ssl_trust_store]`
|
66
|
+
setting.
|
58
67
|
|
59
68
|
Multiple `source` values can be specified as an array, and Puppet will
|
60
69
|
use the first source that exists. This can be used to serve different
|
@@ -104,8 +113,8 @@ module Puppet
|
|
104
113
|
# Ruby 1.9.3 and earlier have a URI bug in URI
|
105
114
|
# to_s returns an ASCII string despite UTF-8 fragments
|
106
115
|
# since its escaped its safe to universally call encode
|
107
|
-
#
|
108
|
-
|
116
|
+
# Puppet::Util.uri_unescape always returns strings in the original encoding
|
117
|
+
Puppet::Util.uri_unescape(uri_string.encode(Encoding::UTF_8))
|
109
118
|
else
|
110
119
|
source
|
111
120
|
end
|
@@ -129,18 +138,6 @@ module Puppet
|
|
129
138
|
metadata && metadata.checksum
|
130
139
|
end
|
131
140
|
|
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
141
|
# Copy the values from the source to the resource. Yay.
|
145
142
|
def copy_source_values
|
146
143
|
devfail "Somehow got asked to copy source values without any metadata" unless metadata
|
@@ -273,63 +270,77 @@ module Puppet
|
|
273
270
|
end
|
274
271
|
end
|
275
272
|
|
276
|
-
def each_chunk_from
|
277
|
-
if Puppet[:default_file_terminus] == :file_server
|
278
|
-
|
273
|
+
def each_chunk_from(&block)
|
274
|
+
if Puppet[:default_file_terminus] == :file_server && scheme == 'puppet' && (uri.host.nil? || uri.host.empty?)
|
275
|
+
chunk_file_from_disk(metadata.full_path, &block)
|
279
276
|
elsif local?
|
280
|
-
chunk_file_from_disk
|
277
|
+
chunk_file_from_disk(full_path, &block)
|
281
278
|
else
|
282
|
-
chunk_file_from_source
|
279
|
+
chunk_file_from_source(&block)
|
283
280
|
end
|
284
281
|
end
|
285
282
|
|
286
|
-
def chunk_file_from_disk
|
287
|
-
File.open(
|
283
|
+
def chunk_file_from_disk(local_path)
|
284
|
+
File.open(local_path, "rb") do |src|
|
288
285
|
while chunk = src.read(8192) #rubocop:disable Lint/AssignmentInCondition
|
289
286
|
yield chunk
|
290
287
|
end
|
291
288
|
end
|
292
289
|
end
|
293
290
|
|
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
|
291
|
+
def get_from_content_uri_source(url, &block)
|
292
|
+
session = Puppet.lookup(:http_session)
|
293
|
+
api = session.route_to(:fileserver, url: url)
|
302
294
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
295
|
+
api.get_static_file_content(
|
296
|
+
path: Puppet::Util.uri_unescape(url.path),
|
297
|
+
environment: resource.catalog.environment_instance.to_s,
|
298
|
+
code_id: resource.catalog.code_id,
|
299
|
+
&block
|
300
|
+
)
|
308
301
|
end
|
309
302
|
|
310
|
-
def
|
311
|
-
Puppet
|
303
|
+
def get_from_source_uri_source(url, &block)
|
304
|
+
session = Puppet.lookup(:http_session)
|
305
|
+
api = session.route_to(:fileserver, url: url)
|
306
|
+
|
307
|
+
api.get_file_content(
|
308
|
+
path: Puppet::Util.uri_unescape(url.path),
|
309
|
+
environment: resource.catalog.environment_instance.to_s,
|
310
|
+
&block
|
311
|
+
)
|
312
312
|
end
|
313
313
|
|
314
|
-
def
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
314
|
+
def get_from_http_source(url, &block)
|
315
|
+
client = Puppet.runtime[:http]
|
316
|
+
client.get(url, options: {include_system_store: true}) do |response|
|
317
|
+
raise Puppet::HTTP::ResponseError.new(response) unless response.success?
|
318
|
+
|
319
|
+
response.read_body(&block)
|
320
320
|
end
|
321
321
|
end
|
322
322
|
|
323
|
-
def chunk_file_from_source
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
323
|
+
def chunk_file_from_source(&block)
|
324
|
+
if uri.scheme =~ /^https?/
|
325
|
+
# Historically puppet has not encoded the http(s) source URL before parsing
|
326
|
+
# it, for example, if the path contains spaces, then it must be URL encoded
|
327
|
+
# as %20 in the manifest. Puppet behaves the same when retrieving file
|
328
|
+
# metadata via http(s), see Puppet::Indirector::FileMetadata::Http#find.
|
329
|
+
url = URI.parse(metadata.source)
|
330
|
+
get_from_http_source(url, &block)
|
331
|
+
elsif metadata.content_uri
|
332
|
+
content_url = URI.parse(Puppet::Util.uri_encode(metadata.content_uri))
|
333
|
+
get_from_content_uri_source(content_url, &block)
|
334
|
+
else
|
335
|
+
get_from_source_uri_source(uri, &block)
|
332
336
|
end
|
337
|
+
rescue Puppet::HTTP::ResponseError => e
|
338
|
+
handle_response_error(e.response)
|
339
|
+
end
|
340
|
+
|
341
|
+
def handle_response_error(response)
|
342
|
+
message = "Error #{response.code} on SERVER: #{response.body.empty? ? response.reason : response.body}"
|
343
|
+
raise Net::HTTPError.new(message, response.nethttp)
|
333
344
|
end
|
334
345
|
end
|
335
346
|
|