puppet 6.11.1 → 6.16.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +3 -8
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +1 -0
- data/Gemfile.lock +39 -36
- data/README.md +17 -24
- data/ext/build_defaults.yaml +1 -0
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +25 -20
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +12 -14
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +85 -83
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +158 -40
- data/lib/puppet/environments.rb +30 -20
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/face/facts.rb +8 -5
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +13 -9
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +31 -86
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +7 -0
- data/lib/puppet/http/client.rb +341 -54
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +34 -0
- data/lib/puppet/http/resolver.rb +57 -1
- data/lib/puppet/http/resolver/server_list.rb +98 -0
- data/lib/puppet/http/resolver/settings.rb +23 -2
- data/lib/puppet/http/resolver/srv.rb +36 -4
- data/lib/puppet/http/response.rb +68 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +179 -3
- data/lib/puppet/http/service/ca.rb +84 -21
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +66 -0
- data/lib/puppet/http/session.rb +106 -31
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +4 -4
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/base_pool.rb +19 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +182 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +24 -8
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +9 -29
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
- data/lib/puppet/parser/compiler.rb +42 -32
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +30 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +78 -4
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +5 -5
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +108 -24
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +23 -5
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -8
- data/lib/puppet/reports/http.rb +13 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +32 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_provider.rb +20 -0
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +7 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +7 -2
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/file/source.rb +49 -58
- data/lib/puppet/type/group.rb +5 -4
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/user.rb +6 -30
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +50 -20
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +640 -521
- data/man/man5/puppet.conf.5 +88 -9
- data/man/man8/puppet-agent.8 +6 -6
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/forge/bacula.json +76 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
- data/spec/integration/application/agent_spec.rb +394 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/http/client_spec.rb +154 -0
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +51 -0
- data/spec/integration/network/http_pool_spec.rb +76 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +20 -9
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +400 -406
- data/spec/unit/context/trusted_information_spec.rb +17 -0
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +38 -4
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +395 -27
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +81 -12
- data/spec/unit/http/response_spec.rb +69 -0
- data/spec/unit/http/service/ca_spec.rb +100 -7
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +118 -0
- data/spec/unit/http/service_spec.rb +117 -4
- data/spec/unit/http/session_spec.rb +237 -19
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/network/http/connection_spec.rb +549 -176
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkg_spec.rb +15 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +9 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +92 -12
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +21 -8
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +4 -0
- data/spec/unit/transaction_spec.rb +45 -1
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +86 -35
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +6 -35
- metadata +92 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -3,6 +3,7 @@
|
|
3
3
|
# @api private
|
4
4
|
class Puppet::Network::HTTP::NoCachePool < Puppet::Network::HTTP::BasePool
|
5
5
|
def initialize(factory = Puppet::Network::HTTP::Factory.new)
|
6
|
+
Puppet.deprecation_warning(_('Puppet::Network::HTTP::NoCachePool is deprecated.'))
|
6
7
|
@factory = factory
|
7
8
|
end
|
8
9
|
|
@@ -15,6 +16,7 @@ class Puppet::Network::HTTP::NoCachePool < Puppet::Network::HTTP::BasePool
|
|
15
16
|
begin
|
16
17
|
yield http
|
17
18
|
ensure
|
19
|
+
return unless http.started?
|
18
20
|
Puppet.debug("Closing connection for #{site}")
|
19
21
|
http.finish
|
20
22
|
end
|
@@ -9,11 +9,9 @@
|
|
9
9
|
# @api private
|
10
10
|
#
|
11
11
|
class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
|
12
|
-
|
12
|
+
attr_reader :factory, :keepalive_timeout
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
def initialize(keepalive_timeout = FIFTEEN_SECONDS)
|
14
|
+
def initialize(keepalive_timeout)
|
17
15
|
@pool = {}
|
18
16
|
@factory = Puppet::Network::HTTP::Factory.new
|
19
17
|
@keepalive_timeout = keepalive_timeout
|
@@ -33,7 +31,7 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
|
|
33
31
|
reuse = false
|
34
32
|
raise detail
|
35
33
|
ensure
|
36
|
-
if reuse
|
34
|
+
if reuse && http.started?
|
37
35
|
release(site, verifier, http)
|
38
36
|
else
|
39
37
|
close_connection(site, http)
|
@@ -56,13 +54,17 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
|
|
56
54
|
end
|
57
55
|
|
58
56
|
# Safely close a persistent connection.
|
57
|
+
# Don't try to close a connection that's already closed.
|
59
58
|
#
|
60
59
|
# @api private
|
61
60
|
def close_connection(site, http)
|
61
|
+
return false unless http.started?
|
62
62
|
Puppet.debug("Closing connection for #{site}")
|
63
63
|
http.finish
|
64
|
+
true
|
64
65
|
rescue => detail
|
65
66
|
Puppet.log_exception(detail, _("Failed to close connection for %{site}: %{detail}") % { site: site, detail: detail })
|
67
|
+
nil
|
66
68
|
end
|
67
69
|
|
68
70
|
# Borrow and take ownership of a persistent connection. If a new
|
@@ -71,9 +73,14 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
|
|
71
73
|
# @api private
|
72
74
|
def borrow(site, verifier)
|
73
75
|
@pool[site] = active_sessions(site)
|
74
|
-
index = @pool[site].index
|
76
|
+
index = @pool[site].index do |session|
|
77
|
+
(verifier.nil? && session.verifier.nil?) ||
|
78
|
+
(!verifier.nil? && verifier.reusable?(session.verifier))
|
79
|
+
end
|
75
80
|
session = index ? @pool[site].delete_at(index) : nil
|
76
81
|
if session
|
82
|
+
@pool.delete(site) if @pool[site].empty?
|
83
|
+
|
77
84
|
Puppet.debug("Using cached connection for #{site}")
|
78
85
|
session.connection
|
79
86
|
else
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'puppet/network/http/connection'
|
2
|
+
require 'puppet/network/http/connection_adapter'
|
2
3
|
require 'puppet/util/platform'
|
3
4
|
|
4
5
|
module Puppet::Network; end
|
@@ -12,7 +13,7 @@ module Puppet::Network; end
|
|
12
13
|
#
|
13
14
|
module Puppet::Network::HttpPool
|
14
15
|
|
15
|
-
@http_client_class = Puppet::Network::HTTP::
|
16
|
+
@http_client_class = Puppet::Network::HTTP::ConnectionAdapter
|
16
17
|
|
17
18
|
def self.http_client_class
|
18
19
|
@http_client_class
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'puppet/util'
|
2
2
|
require 'monitor'
|
3
3
|
require 'puppet/parser/parser_factory'
|
4
|
+
require 'puppet/concurrent/lock'
|
4
5
|
|
5
6
|
# Just define it, so this class has fewer load dependencies.
|
6
7
|
class Puppet::Node
|
@@ -70,6 +71,7 @@ class Puppet::Node::Environment
|
|
70
71
|
#
|
71
72
|
# @param name [Symbol] The environment name
|
72
73
|
def initialize(name, modulepath, manifest, config_version)
|
74
|
+
@lock = Puppet::Concurrent::Lock.new
|
73
75
|
@name = name.intern
|
74
76
|
@modulepath = self.class.expand_dirs(self.class.extralibs() + modulepath)
|
75
77
|
@manifest = manifest == NO_MANIFEST ? manifest : Puppet::FileSystem.expand_path(manifest)
|
@@ -160,6 +162,10 @@ class Puppet::Node::Environment
|
|
160
162
|
# @api private
|
161
163
|
attr_accessor :loaders
|
162
164
|
|
165
|
+
# Lock for compilation that needs exclusive access to the environment
|
166
|
+
# @api private
|
167
|
+
attr_reader :lock
|
168
|
+
|
163
169
|
# Checks to make sure that this environment did not have a manifest set in
|
164
170
|
# its original environment.conf if Puppet is configured with
|
165
171
|
# +disable_per_environment_manifest+ set true. If it did, the environment's
|
@@ -232,11 +238,13 @@ class Puppet::Node::Environment
|
|
232
238
|
# @api public
|
233
239
|
# @return [Puppet::Resource::TypeCollection] The current global TypeCollection
|
234
240
|
def known_resource_types
|
235
|
-
|
236
|
-
@known_resource_types
|
237
|
-
|
241
|
+
@lock.synchronize do
|
242
|
+
if @known_resource_types.nil?
|
243
|
+
@known_resource_types = Puppet::Resource::TypeCollection.new(self)
|
244
|
+
@known_resource_types.import_ast(perform_initial_import(), '')
|
245
|
+
end
|
246
|
+
@known_resource_types
|
238
247
|
end
|
239
|
-
@known_resource_types
|
240
248
|
end
|
241
249
|
|
242
250
|
# Yields each modules' plugin directory if the plugin directory (modulename/lib)
|
@@ -289,7 +297,13 @@ class Puppet::Node::Environment
|
|
289
297
|
def modules
|
290
298
|
if @modules.nil?
|
291
299
|
module_references = []
|
292
|
-
|
300
|
+
project = Puppet.lookup(:bolt_project) { nil }
|
301
|
+
seen_modules = if project
|
302
|
+
module_references << project.to_h
|
303
|
+
{ project.name => true }
|
304
|
+
else
|
305
|
+
{}
|
306
|
+
end
|
293
307
|
modulepath.each do |path|
|
294
308
|
Dir.entries(path).each do |name|
|
295
309
|
next unless Puppet::Module.is_module_directory?(name, path)
|
@@ -429,9 +443,11 @@ class Puppet::Node::Environment
|
|
429
443
|
# Checks if a reparse is required (cache of files is stale).
|
430
444
|
#
|
431
445
|
def check_for_reparse
|
432
|
-
|
433
|
-
@parsed_code
|
434
|
-
|
446
|
+
@lock.synchronize do
|
447
|
+
if (Puppet[:code] != @parsed_code || @known_resource_types.parse_failed?)
|
448
|
+
@parsed_code = nil
|
449
|
+
@known_resource_types = nil
|
450
|
+
end
|
435
451
|
end
|
436
452
|
end
|
437
453
|
|
@@ -97,6 +97,11 @@ module Pal
|
|
97
97
|
internal_compiler.evaluate_additions
|
98
98
|
end
|
99
99
|
|
100
|
+
# Attempts to evaluate AST for node defnintions https://puppet.com/docs/puppet/latest/lang_node_definitions.html
|
101
|
+
# if there are any.
|
102
|
+
def evaluate_ast_node
|
103
|
+
internal_compiler.evaluate_ast_node
|
104
|
+
end
|
100
105
|
end
|
101
106
|
|
102
107
|
end
|
data/lib/puppet/pal/pal_impl.rb
CHANGED
@@ -83,6 +83,8 @@ module Pal
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
previous_tasks_value = Puppet[:tasks]
|
87
|
+
previous_code_value = Puppet[:code]
|
86
88
|
Puppet[:tasks] = true
|
87
89
|
# After the assertions, if code_string is non nil - it has the highest precedence
|
88
90
|
Puppet[:code] = code_string unless code_string.nil?
|
@@ -90,6 +92,9 @@ module Pal
|
|
90
92
|
# If manifest_file is nil, the #main method will use the env configured manifest
|
91
93
|
# to do things in the block while a Script Compiler is in effect
|
92
94
|
main(manifest_file, facts, variables, :script, &block)
|
95
|
+
ensure
|
96
|
+
Puppet[:tasks] = previous_tasks_value
|
97
|
+
Puppet[:code] = previous_code_value
|
93
98
|
end
|
94
99
|
|
95
100
|
# Evaluates a Puppet Language script string.
|
@@ -417,37 +422,8 @@ module Pal
|
|
417
422
|
# TRANSLATORS, the string "For puppet PAL" is not user facing
|
418
423
|
Puppet.override({:current_environment => apply_environment}, "For puppet PAL") do
|
419
424
|
begin
|
420
|
-
# support the following features when evaluating puppet code
|
421
|
-
# * $facts with facts from host running the script
|
422
|
-
# * $settings with 'settings::*' namespace populated, and '$settings::all_local' hash
|
423
|
-
# * $trusted as setup when using puppet apply
|
424
|
-
# * an environment
|
425
|
-
#
|
426
|
-
|
427
|
-
# fixup trusted information
|
428
425
|
node.sanitize()
|
429
|
-
|
430
426
|
compiler = create_internal_compiler(internal_compiler_class, node)
|
431
|
-
# compiler = Puppet::Parser::ScriptCompiler.new(node.environment, node.name)
|
432
|
-
topscope = compiler.topscope
|
433
|
-
|
434
|
-
# When scripting the trusted data are always local, but set them anyway
|
435
|
-
# When compiling for a catalog, the catalog compiler does this
|
436
|
-
unless internal_compiler_class == :catalog
|
437
|
-
topscope.set_trusted(node.trusted_data)
|
438
|
-
|
439
|
-
# Server facts are always about the local node's version etc.
|
440
|
-
topscope.set_server_facts(node.server_facts)
|
441
|
-
|
442
|
-
# Set $facts for the node running the script
|
443
|
-
facts_hash = node.facts.nil? ? {} : node.facts.values
|
444
|
-
topscope.set_facts(facts_hash)
|
445
|
-
|
446
|
-
# create the $settings:: variables
|
447
|
-
topscope.merge_settings(node.environment.name, false)
|
448
|
-
end
|
449
|
-
|
450
|
-
add_variables(topscope, pal_variables)
|
451
427
|
|
452
428
|
case internal_compiler_class
|
453
429
|
when :script
|
@@ -463,6 +439,10 @@ module Pal
|
|
463
439
|
# TRANSLATORS: Do not translate, symbolic name
|
464
440
|
Puppet.override(overrides, "PAL::with_#{internal_compiler_class}_compiler") do
|
465
441
|
compiler.compile do | compiler_yield |
|
442
|
+
# In case the varaibles passed to the compiler are PCore types defined in modules, they
|
443
|
+
# need to be deserialized and added from within the this scope, so that loaders are
|
444
|
+
# available during deserizlization.
|
445
|
+
add_variables(compiler.topscope, Puppet::Pops::Serialization::FromDataConverter.convert(pal_variables))
|
466
446
|
# wrap the internal compiler to prevent it from leaking in the PAL API
|
467
447
|
if block_given?
|
468
448
|
yield(pal_compiler)
|
@@ -13,12 +13,6 @@ class Puppet::Parser::AST::PopsBridge
|
|
13
13
|
# expression.
|
14
14
|
#
|
15
15
|
class Expression < Puppet::Parser::AST::Leaf
|
16
|
-
|
17
|
-
def initialize args
|
18
|
-
super
|
19
|
-
@@evaluator ||= Puppet::Pops::Parser::EvaluatingParser.new()
|
20
|
-
end
|
21
|
-
|
22
16
|
def to_s
|
23
17
|
Puppet::Pops::Model::ModelTreeDumper.new.dump(@value)
|
24
18
|
end
|
@@ -29,8 +23,9 @@ class Puppet::Parser::AST::PopsBridge
|
|
29
23
|
end
|
30
24
|
|
31
25
|
def evaluate(scope)
|
32
|
-
|
33
|
-
|
26
|
+
evaluator = Puppet::Pops::Parser::EvaluatingParser.singleton
|
27
|
+
object = evaluator.evaluate(scope, @value)
|
28
|
+
evaluator.convert_to_3x(object, scope)
|
34
29
|
end
|
35
30
|
|
36
31
|
# Adapts to 3x where top level constructs needs to have each to iterate over children. Short circuit this
|
@@ -87,7 +82,6 @@ class Puppet::Parser::AST::PopsBridge
|
|
87
82
|
@program_model = program_model
|
88
83
|
@context = context
|
89
84
|
@ast_transformer ||= Puppet::Pops::Model::AstTransformer.new(@context[:file])
|
90
|
-
@@evaluator ||= Puppet::Pops::Parser::EvaluatingParser.new()
|
91
85
|
end
|
92
86
|
|
93
87
|
# This is the 3x API, the 3x AST searches through all code to find the instructions that can be instantiated.
|
@@ -122,7 +116,7 @@ class Puppet::Parser::AST::PopsBridge
|
|
122
116
|
end
|
123
117
|
|
124
118
|
def evaluate(scope)
|
125
|
-
|
119
|
+
Puppet::Pops::Parser::EvaluatingParser.singleton.evaluate(scope, program_model)
|
126
120
|
end
|
127
121
|
|
128
122
|
# Adapts to 3x where top level constructs needs to have each to iterate over children. Short circuit this
|
@@ -178,8 +172,9 @@ class Puppet::Parser::AST::PopsBridge
|
|
178
172
|
#
|
179
173
|
scope = obtain_scope
|
180
174
|
if scope
|
175
|
+
evaluator = Puppet::Pops::Parser::EvaluatingParser.singleton
|
181
176
|
typed_parameters.each do |p|
|
182
|
-
result[p.name] =
|
177
|
+
result[p.name] = evaluator.evaluate(scope, p.type_expr)
|
183
178
|
end
|
184
179
|
end
|
185
180
|
result
|
@@ -348,6 +348,34 @@ class Puppet::Parser::Compiler
|
|
348
348
|
end
|
349
349
|
end
|
350
350
|
|
351
|
+
|
352
|
+
# If ast nodes are enabled, then see if we can find and evaluate one.
|
353
|
+
#
|
354
|
+
# @api private
|
355
|
+
def evaluate_ast_node
|
356
|
+
krt = environment.known_resource_types
|
357
|
+
return unless krt.nodes? #ast_nodes?
|
358
|
+
|
359
|
+
# Now see if we can find the node.
|
360
|
+
astnode = nil
|
361
|
+
@node.names.each do |name|
|
362
|
+
astnode = krt.node(name.to_s.downcase)
|
363
|
+
break if astnode
|
364
|
+
end
|
365
|
+
|
366
|
+
unless (astnode ||= krt.node("default"))
|
367
|
+
raise Puppet::ParseError, _("Could not find node statement with name 'default' or '%{names}'") % { names: node.names.join(", ") }
|
368
|
+
end
|
369
|
+
|
370
|
+
# Create a resource to model this node, and then add it to the list
|
371
|
+
# of resources.
|
372
|
+
resource = astnode.ensure_in_catalog(topscope)
|
373
|
+
|
374
|
+
resource.evaluate
|
375
|
+
|
376
|
+
@node_scope = topscope.class_scope(astnode)
|
377
|
+
end
|
378
|
+
|
351
379
|
# Evaluates each specified class in turn. If there are any classes that
|
352
380
|
# can't be found, an error is raised. This method really just creates resource objects
|
353
381
|
# that point back to the classes, and then the resources are themselves
|
@@ -486,31 +514,6 @@ class Puppet::Parser::Compiler
|
|
486
514
|
krt.capability_mappings.clear # No longer needed
|
487
515
|
end
|
488
516
|
|
489
|
-
# If ast nodes are enabled, then see if we can find and evaluate one.
|
490
|
-
def evaluate_ast_node
|
491
|
-
krt = environment.known_resource_types
|
492
|
-
return unless krt.nodes? #ast_nodes?
|
493
|
-
|
494
|
-
# Now see if we can find the node.
|
495
|
-
astnode = nil
|
496
|
-
@node.names.each do |name|
|
497
|
-
astnode = krt.node(name.to_s.downcase)
|
498
|
-
break if astnode
|
499
|
-
end
|
500
|
-
|
501
|
-
unless (astnode ||= krt.node("default"))
|
502
|
-
raise Puppet::ParseError, _("Could not find node statement with name 'default' or '%{names}'") % { names: node.names.join(", ") }
|
503
|
-
end
|
504
|
-
|
505
|
-
# Create a resource to model this node, and then add it to the list
|
506
|
-
# of resources.
|
507
|
-
resource = astnode.ensure_in_catalog(topscope)
|
508
|
-
|
509
|
-
resource.evaluate
|
510
|
-
|
511
|
-
@node_scope = topscope.class_scope(astnode)
|
512
|
-
end
|
513
|
-
|
514
517
|
# Evaluate our collections and return true if anything returned an object.
|
515
518
|
# The 'true' is used to continue a loop, so it's important.
|
516
519
|
def evaluate_collections
|
@@ -777,13 +780,7 @@ class Puppet::Parser::Compiler
|
|
777
780
|
SETTINGS = 'settings'.freeze
|
778
781
|
|
779
782
|
def create_settings_scope
|
780
|
-
|
781
|
-
settings_type = resource_types.hostclass(SETTINGS)
|
782
|
-
if settings_type.nil?
|
783
|
-
settings_type = Puppet::Resource::Type.new(:hostclass, SETTINGS)
|
784
|
-
resource_types.add(settings_type)
|
785
|
-
end
|
786
|
-
|
783
|
+
settings_type = create_settings_type
|
787
784
|
settings_resource = Puppet::Parser::Resource.new('class', SETTINGS, :scope => @topscope)
|
788
785
|
|
789
786
|
@catalog.add_resource(settings_resource)
|
@@ -794,6 +791,19 @@ class Puppet::Parser::Compiler
|
|
794
791
|
scope.merge_settings(environment.name)
|
795
792
|
end
|
796
793
|
|
794
|
+
def create_settings_type
|
795
|
+
environment.lock.synchronize do
|
796
|
+
resource_types = environment.known_resource_types
|
797
|
+
settings_type = resource_types.hostclass(SETTINGS)
|
798
|
+
if settings_type.nil?
|
799
|
+
settings_type = Puppet::Resource::Type.new(:hostclass, SETTINGS)
|
800
|
+
resource_types.add(settings_type)
|
801
|
+
end
|
802
|
+
|
803
|
+
settings_type
|
804
|
+
end
|
805
|
+
end
|
806
|
+
|
797
807
|
# Return an array of all of the unevaluated resources. These will be definitions,
|
798
808
|
# which need to get evaluated into native resources.
|
799
809
|
def unevaluated_resources
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'puppet/util/autoload'
|
2
2
|
require 'puppet/parser/scope'
|
3
3
|
require 'puppet/pops/adaptable'
|
4
|
+
require 'puppet/concurrent/lock'
|
4
5
|
|
5
6
|
# A module for managing parser functions. Each specified function
|
6
7
|
# is added to a central module that then gets included into the Scope
|
@@ -78,28 +79,32 @@ module Puppet::Parser::Functions
|
|
78
79
|
attr_accessor :module
|
79
80
|
end
|
80
81
|
|
82
|
+
@environment_module_lock = Puppet::Concurrent::Lock.new
|
83
|
+
|
81
84
|
# Get the module that functions are mixed into corresponding to an
|
82
85
|
# environment
|
83
86
|
#
|
84
87
|
# @api private
|
85
88
|
def self.environment_module(env)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
+
@environment_module_lock.synchronize do
|
90
|
+
AnonymousModuleAdapter.adapt(env) do |a|
|
91
|
+
a.module ||= Module.new do
|
92
|
+
@metadata = {}
|
89
93
|
|
90
|
-
|
91
|
-
|
92
|
-
|
94
|
+
def self.all_function_info
|
95
|
+
@metadata
|
96
|
+
end
|
93
97
|
|
94
|
-
|
95
|
-
|
96
|
-
|
98
|
+
def self.get_function_info(name)
|
99
|
+
@metadata[name]
|
100
|
+
end
|
97
101
|
|
98
|
-
|
99
|
-
|
102
|
+
def self.add_function_info(name, info)
|
103
|
+
@metadata[name] = info
|
104
|
+
end
|
100
105
|
end
|
101
|
-
end
|
102
|
-
end
|
106
|
+
end.module
|
107
|
+
end
|
103
108
|
end
|
104
109
|
|
105
110
|
# Create a new Puppet DSL function.
|
@@ -7,12 +7,12 @@ result as a String.
|
|
7
7
|
The first argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
|
8
8
|
reference, which loads `<TEMPLATE FILE>` from `<MODULE NAME>`'s `templates`
|
9
9
|
directory. In most cases, the last argument is optional; if used, it should be a
|
10
|
-
[hash](/puppet/latest/
|
10
|
+
[hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
|
11
11
|
pass to the template.
|
12
12
|
|
13
|
-
- See the [template](/puppet/latest/
|
13
|
+
- See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
|
14
14
|
for general template usage information.
|
15
|
-
- See the [EPP syntax](/puppet/latest/
|
15
|
+
- See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
|
16
16
|
documentation for examples of EPP.
|
17
17
|
|
18
18
|
For example, to call the apache module's `templates/vhost/_docroot.epp`
|