puppet 6.11.1-x64-mingw32 → 6.16.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 +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
@@ -43,6 +43,7 @@ as an array in the form `[key, value]` and returns a hash containing the results
|
|
43
43
|
$data = { "orange" => 0, "blueberry" => 1, "raspberry" => 2 }
|
44
44
|
$filtered_data = $data.filter |$items| { $items[0] =~ /berry$/ }
|
45
45
|
# $filtered_data = {blueberry => 1, raspberry => 2}
|
46
|
+
~~~
|
46
47
|
|
47
48
|
When the first argument is an array and the lambda has two parameters, Puppet passes the
|
48
49
|
array's indexes (enumerated from 0) in the first parameter and its values in the second
|
@@ -6,12 +6,12 @@ text result as a String.
|
|
6
6
|
|
7
7
|
The first argument to this function should be a string containing an EPP
|
8
8
|
template. In most cases, the last argument is optional; if used, it should be a
|
9
|
-
[hash](/puppet/latest/
|
9
|
+
[hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
|
10
10
|
pass to the template.
|
11
11
|
|
12
|
-
- See the [template](/puppet/latest/
|
12
|
+
- See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
|
13
13
|
for general template usage information.
|
14
|
-
- See the [EPP syntax](/puppet/latest/
|
14
|
+
- See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
|
15
15
|
documentation for examples of EPP.
|
16
16
|
|
17
17
|
For example, to evaluate an inline EPP template and pass it the `docroot` and
|
@@ -29,7 +29,7 @@ parameter tag without default values. Puppet produces an error if the
|
|
29
29
|
`inline_epp` function fails to pass any required parameter.
|
30
30
|
|
31
31
|
An inline EPP template should be written as a single-quoted string or
|
32
|
-
[heredoc](/puppet/latest/
|
32
|
+
[heredoc](https://puppet.com/docs/puppet/latest/lang_data_string.html#heredocs).
|
33
33
|
A double-quoted string is subject to expression interpolation before the string
|
34
34
|
is parsed as an EPP template.
|
35
35
|
|
@@ -45,7 +45,7 @@ END
|
|
45
45
|
~~~
|
46
46
|
|
47
47
|
- Since 3.5
|
48
|
-
- Requires [future parser](/puppet/3.8/
|
48
|
+
- Requires [future parser](https://puppet.com/docs/puppet/3.8/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
|
49
49
|
|
50
50
|
Puppet::Parser::Functions::Error.is4x('inline_epp')
|
51
51
|
end
|
@@ -20,14 +20,14 @@ class AccessOperator
|
|
20
20
|
@semantic = access_expression
|
21
21
|
end
|
22
22
|
|
23
|
-
def access
|
23
|
+
def access(o, scope, *keys)
|
24
24
|
@@access_visitor.visit_this_2(self, o, scope, keys)
|
25
25
|
end
|
26
26
|
|
27
27
|
protected
|
28
28
|
|
29
29
|
def access_Object(o, scope, keys)
|
30
|
-
type = Puppet::Pops::Types::TypeCalculator.
|
30
|
+
type = Puppet::Pops::Types::TypeCalculator.infer_callable_methods_t(o)
|
31
31
|
if type.is_a?(Puppet::Pops::Types::TypeWithMembers)
|
32
32
|
access_func = type['[]']
|
33
33
|
return access_func.invoke(o, scope, keys) unless access_func.nil?
|
@@ -959,7 +959,7 @@ class EvaluatorImpl
|
|
959
959
|
name = name.value # the string function name
|
960
960
|
|
961
961
|
obj = receiver[0]
|
962
|
-
receiver_type = Types::TypeCalculator.
|
962
|
+
receiver_type = Types::TypeCalculator.infer_callable_methods_t(obj)
|
963
963
|
if receiver_type.is_a?(Types::TypeWithMembers)
|
964
964
|
member = receiver_type[name]
|
965
965
|
unless member.nil?
|
@@ -33,7 +33,7 @@ module Runtime3Support
|
|
33
33
|
# @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
|
34
34
|
#
|
35
35
|
def optionally_fail(issue, semantic, options={}, except=nil)
|
36
|
-
if except.nil?
|
36
|
+
if except.nil? && diagnostic_producer.severity_producer[issue] == :error
|
37
37
|
# Want a stacktrace, and it must be passed as an exception
|
38
38
|
begin
|
39
39
|
raise EvaluationError.new()
|
@@ -19,8 +19,17 @@ class PuppetPlanInstantiator
|
|
19
19
|
|
20
20
|
# parse and validate
|
21
21
|
result = parser.parse_string(pp_code_string, source_ref)
|
22
|
-
|
23
|
-
|
22
|
+
|
23
|
+
# The parser attaches all definitions, including those nested in apply
|
24
|
+
# blocks, to the Program object. Node definitions in apply blocks are
|
25
|
+
# perfectly legal and don't count as the file containing multiple
|
26
|
+
# definitions for this purpose. By this point, we've already validated that
|
27
|
+
# there are no node definitions *outside* apply blocks, so we simply ignore
|
28
|
+
# them here.
|
29
|
+
definitions = result.definitions.reject { |definition| definition.is_a?(Puppet::Pops::Model::NodeDefinition) }
|
30
|
+
|
31
|
+
# Only one plan is allowed (and no other definitions)
|
32
|
+
case definitions.size
|
24
33
|
when 0
|
25
34
|
raise ArgumentError, _("The code loaded from %{source_ref} does not define the plan '%{plan_name}' - it is empty.") % { source_ref: source_ref, plan_name: typed_name.name }
|
26
35
|
when 1
|
@@ -28,7 +37,7 @@ class PuppetPlanInstantiator
|
|
28
37
|
else
|
29
38
|
raise ArgumentError, _("The code loaded from %{source_ref} must contain only the plan '%{plan_name}' - it has additional definitions.") % { source_ref: source_ref, plan_name: typed_name.name }
|
30
39
|
end
|
31
|
-
the_plan_definition =
|
40
|
+
the_plan_definition = definitions[0]
|
32
41
|
|
33
42
|
unless the_plan_definition.is_a?(Model::PlanDefinition)
|
34
43
|
raise ArgumentError, _("The code loaded from %{source_ref} does not define the plan '%{plan_name}' - no plan found.") % { source_ref: source_ref, plan_name: typed_name.name }
|
data/lib/puppet/pops/loaders.rb
CHANGED
@@ -19,12 +19,14 @@ class Loaders
|
|
19
19
|
attr_reader :environment
|
20
20
|
|
21
21
|
def self.new(environment, for_agent = false)
|
22
|
-
|
23
|
-
|
24
|
-
obj
|
25
|
-
|
22
|
+
environment.lock.synchronize do
|
23
|
+
obj = environment.loaders
|
24
|
+
if obj.nil?
|
25
|
+
obj = self.allocate
|
26
|
+
obj.send(:initialize, environment, for_agent)
|
27
|
+
end
|
28
|
+
obj
|
26
29
|
end
|
27
|
-
obj
|
28
30
|
end
|
29
31
|
|
30
32
|
def initialize(environment, for_agent)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/thread_local'
|
2
|
+
|
1
3
|
require_relative 'explainer'
|
2
4
|
|
3
5
|
module Puppet::Pops
|
@@ -7,7 +9,11 @@ class Invocation
|
|
7
9
|
attr_reader :scope, :override_values, :default_values, :explainer, :module_name, :top_key, :adapter_class
|
8
10
|
|
9
11
|
def self.current
|
10
|
-
@current
|
12
|
+
(@current ||= Puppet::ThreadLocal.new(nil)).value
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.current=(new_value)
|
16
|
+
@current.value = new_value
|
11
17
|
end
|
12
18
|
|
13
19
|
# Creates a new instance with same settings as this instance but with a new given scope
|
@@ -37,6 +43,7 @@ class Invocation
|
|
37
43
|
@default_values = default_values
|
38
44
|
|
39
45
|
parent_invocation = self.class.current
|
46
|
+
|
40
47
|
if parent_invocation && (adapter_class.nil? || adapter_class == parent_invocation.adapter_class)
|
41
48
|
# Inherit from parent invocation (track recursion)
|
42
49
|
@name_stack = parent_invocation.name_stack
|
@@ -71,10 +78,10 @@ class Invocation
|
|
71
78
|
yield
|
72
79
|
else
|
73
80
|
begin
|
74
|
-
self.class.
|
81
|
+
self.class.current = self
|
75
82
|
yield
|
76
83
|
ensure
|
77
|
-
self.class.
|
84
|
+
self.class.current = save_current
|
78
85
|
end
|
79
86
|
end
|
80
87
|
end
|
@@ -1,22 +1,18 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Model
|
3
5
|
|
4
6
|
|
5
7
|
class PNTransformer
|
6
|
-
|
7
|
-
@visitor ||= Visitor.new(nil, 'transform', 0, 0)
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.singleton
|
11
|
-
@singleton ||= new(visitor)
|
12
|
-
end
|
8
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
13
9
|
|
14
10
|
def self.transform(ast)
|
15
11
|
singleton.transform(ast)
|
16
12
|
end
|
17
13
|
|
18
|
-
def initialize
|
19
|
-
@visitor =
|
14
|
+
def initialize
|
15
|
+
@visitor = Visitor.new(nil, 'transform', 0, 0)
|
20
16
|
end
|
21
17
|
|
22
18
|
def transform(ast)
|
@@ -1,9 +1,12 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Parser
|
3
5
|
|
4
6
|
# Does not support "import" and parsing ruby files
|
5
7
|
#
|
6
8
|
class EvaluatingParser
|
9
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
7
10
|
|
8
11
|
attr_reader :parser
|
9
12
|
|
@@ -11,12 +14,7 @@ class EvaluatingParser
|
|
11
14
|
@parser = Parser.new()
|
12
15
|
end
|
13
16
|
|
14
|
-
def self.singleton
|
15
|
-
@instance ||= new
|
16
|
-
end
|
17
|
-
|
18
17
|
def parse_string(s, file_source = nil)
|
19
|
-
@file_source = file_source
|
20
18
|
clear()
|
21
19
|
# Handling of syntax error can be much improved (in general), now it bails out of the parser
|
22
20
|
# and does not have as rich information (when parsing a string), need to update it with the file source
|
@@ -25,20 +23,19 @@ class EvaluatingParser
|
|
25
23
|
# Also a possible improvement (if the YAML parser returns positions) is to provide correct output of position.
|
26
24
|
#
|
27
25
|
begin
|
28
|
-
assert_and_report(parser.parse_string(s, file_source)).model
|
26
|
+
assert_and_report(parser.parse_string(s, file_source), file_source).model
|
29
27
|
rescue Puppet::ParseErrorWithIssue => e
|
30
28
|
raise e
|
31
29
|
rescue Puppet::ParseError => e
|
32
30
|
# TODO: This is not quite right, why does not the exception have the correct file?
|
33
|
-
e.file =
|
31
|
+
e.file = file_source unless e.file.is_a?(String) && !e.file.empty?
|
34
32
|
raise e
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
38
36
|
def parse_file(file)
|
39
|
-
@file_source = file
|
40
37
|
clear()
|
41
|
-
assert_and_report(parser.parse_file(file)).model
|
38
|
+
assert_and_report(parser.parse_file(file), file).model
|
42
39
|
end
|
43
40
|
|
44
41
|
def evaluate_string(scope, s, file_source = nil)
|
@@ -97,10 +94,10 @@ class EvaluatingParser
|
|
97
94
|
Validation::ValidatorFactory_4_0.new().validator(acceptor)
|
98
95
|
end
|
99
96
|
|
100
|
-
def assert_and_report(parse_result)
|
97
|
+
def assert_and_report(parse_result, file_source)
|
101
98
|
return nil unless parse_result
|
102
99
|
if parse_result['source_ref'].nil? || parse_result['source_ref'] == ''
|
103
|
-
parse_result['source_ref'] =
|
100
|
+
parse_result['source_ref'] = file_source
|
104
101
|
end
|
105
102
|
validation_result = validate(parse_result.model)
|
106
103
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Serialization
|
3
5
|
module JsonPath
|
@@ -31,9 +33,7 @@ module JsonPath
|
|
31
33
|
#
|
32
34
|
# @api private
|
33
35
|
class Resolver
|
34
|
-
|
35
|
-
@singleton ||= self.new
|
36
|
-
end
|
36
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
37
37
|
|
38
38
|
def initialize
|
39
39
|
@parser = Parser::Parser.new
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Time
|
3
5
|
NSECS_PER_USEC = 1000
|
@@ -581,9 +583,7 @@ module Time
|
|
581
583
|
|
582
584
|
# Parses a string into a Timestamp::Format instance
|
583
585
|
class FormatParser
|
584
|
-
|
585
|
-
@singleton
|
586
|
-
end
|
586
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
587
587
|
|
588
588
|
def initialize
|
589
589
|
@formats = Hash.new { |hash, str| hash[str] = internal_parse(str) }
|
@@ -706,8 +706,6 @@ module Time
|
|
706
706
|
end
|
707
707
|
Format.new(str, bld)
|
708
708
|
end
|
709
|
-
|
710
|
-
@singleton = FormatParser.new
|
711
709
|
end
|
712
710
|
|
713
711
|
class Format
|
@@ -153,6 +153,16 @@ class PObjectTypeExtension < PAnyType
|
|
153
153
|
@base_type.simple_name
|
154
154
|
end
|
155
155
|
|
156
|
+
# @api private
|
157
|
+
def implementation_class(create = true)
|
158
|
+
@base_type.implementation_class(create)
|
159
|
+
end
|
160
|
+
|
161
|
+
# @api private
|
162
|
+
def parameter_info(impl_class)
|
163
|
+
@base_type.parameter_info(impl_class)
|
164
|
+
end
|
165
|
+
|
156
166
|
protected
|
157
167
|
|
158
168
|
# Checks that the given `param_values` hash contains all keys present in the `parameters` of
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Types
|
3
5
|
|
@@ -238,22 +240,17 @@ class StringConverter
|
|
238
240
|
end
|
239
241
|
end
|
240
242
|
|
243
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
244
|
+
|
241
245
|
# @api public
|
242
246
|
def self.convert(value, string_formats = :default)
|
243
247
|
singleton.convert(value, string_formats)
|
244
248
|
end
|
245
249
|
|
246
|
-
# @return [TypeConverter] the singleton instance
|
247
|
-
#
|
248
|
-
# @api public
|
249
|
-
def self.singleton
|
250
|
-
@tconv_instance ||= new
|
251
|
-
end
|
252
|
-
|
253
250
|
# @api private
|
254
251
|
#
|
255
252
|
def initialize
|
256
|
-
|
253
|
+
@string_visitor = Visitor.new(self, "string", 3, 3)
|
257
254
|
end
|
258
255
|
|
259
256
|
DEFAULT_INDENTATION = Indentation.new(0, true, false).freeze
|
@@ -523,7 +520,7 @@ class StringConverter
|
|
523
520
|
# end
|
524
521
|
|
525
522
|
def _convert(val_type, value, format_map, indentation)
|
526
|
-
|
523
|
+
@string_visitor.visit_this_3(self, val_type, value, format_map, indentation)
|
527
524
|
end
|
528
525
|
private :_convert
|
529
526
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Types
|
3
5
|
# The TypeCalculator can answer questions about puppet types.
|
@@ -99,6 +101,7 @@ module Types
|
|
99
101
|
# @api public
|
100
102
|
#
|
101
103
|
class TypeCalculator
|
104
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
102
105
|
|
103
106
|
# @api public
|
104
107
|
def self.assignable?(t1, t2)
|
@@ -120,6 +123,30 @@ class TypeCalculator
|
|
120
123
|
singleton.infer(o)
|
121
124
|
end
|
122
125
|
|
126
|
+
# Infers a type if given object may have callable members, else returns nil.
|
127
|
+
# Caller must check for nil or if returned type supports members.
|
128
|
+
# This is a much cheaper call than doing a call to the general infer(o) method.
|
129
|
+
#
|
130
|
+
# @api private
|
131
|
+
def self.infer_callable_methods_t(o)
|
132
|
+
# If being a value that cannot have Pcore based methods callable from Puppet Language
|
133
|
+
if (o.is_a?(String) ||
|
134
|
+
o.is_a?(Numeric) ||
|
135
|
+
o.is_a?(TrueClass) ||
|
136
|
+
o.is_a?(FalseClass) ||
|
137
|
+
o.is_a?(Regexp) ||
|
138
|
+
o.instance_of?(Array) ||
|
139
|
+
o.instance_of?(Hash) ||
|
140
|
+
Types::PUndefType::DEFAULT.instance?(o)
|
141
|
+
)
|
142
|
+
return nil
|
143
|
+
end
|
144
|
+
# For other objects (e.g. PObjectType instances, and runtime types) full inference needed, since that will
|
145
|
+
# cover looking into the runtime type registry.
|
146
|
+
#
|
147
|
+
infer(o)
|
148
|
+
end
|
149
|
+
|
123
150
|
# @api public
|
124
151
|
def self.generalize(o)
|
125
152
|
singleton.generalize(o)
|
@@ -135,18 +162,11 @@ class TypeCalculator
|
|
135
162
|
singleton.iterable(t)
|
136
163
|
end
|
137
164
|
|
138
|
-
# @return [TypeCalculator] the singleton instance
|
139
|
-
#
|
140
|
-
# @api private
|
141
|
-
def self.singleton
|
142
|
-
@tc_instance ||= new
|
143
|
-
end
|
144
|
-
|
145
165
|
# @api public
|
146
166
|
#
|
147
167
|
def initialize
|
148
|
-
|
149
|
-
|
168
|
+
@infer_visitor = Visitor.new(nil, 'infer',0,0)
|
169
|
+
@extract_visitor = Visitor.new(nil, 'extract',0,0)
|
150
170
|
end
|
151
171
|
|
152
172
|
# Answers 'can an instance of type t2 be assigned to a variable of type t'.
|
@@ -250,7 +270,7 @@ class TypeCalculator
|
|
250
270
|
elsif o.is_a?(Evaluator::PuppetProc)
|
251
271
|
infer_PuppetProc(o)
|
252
272
|
else
|
253
|
-
|
273
|
+
@infer_visitor.visit_this_0(self, o)
|
254
274
|
end
|
255
275
|
end
|
256
276
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/concurrent/thread_local_singleton'
|
2
|
+
|
1
3
|
module Puppet::Pops
|
2
4
|
module Types
|
3
5
|
# String
|
@@ -7,6 +9,8 @@ module Types
|
|
7
9
|
# @api public
|
8
10
|
#
|
9
11
|
class TypeFormatter
|
12
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
13
|
+
|
10
14
|
# Produces a String representation of the given type.
|
11
15
|
# @param t [PAnyType] the type to produce a string form
|
12
16
|
# @return [String] the type in string form
|
@@ -14,14 +18,11 @@ class TypeFormatter
|
|
14
18
|
# @api public
|
15
19
|
#
|
16
20
|
def self.string(t)
|
17
|
-
|
21
|
+
singleton.string(t)
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
# @api private
|
23
|
-
def self.singleton
|
24
|
-
@singleton
|
24
|
+
def initialize
|
25
|
+
@string_visitor = Visitor.new(nil, 'string',0,0)
|
25
26
|
end
|
26
27
|
|
27
28
|
def expanded
|
@@ -105,13 +106,13 @@ class TypeFormatter
|
|
105
106
|
@ruby = false
|
106
107
|
begin
|
107
108
|
@bld << @ref_ctor << '('
|
108
|
-
|
109
|
+
@string_visitor.visit_this_0(self, TypeFormatter.new.string(t))
|
109
110
|
@bld << ')'
|
110
111
|
ensure
|
111
112
|
@ruby = true
|
112
113
|
end
|
113
114
|
else
|
114
|
-
|
115
|
+
@string_visitor.visit_this_0(self, t)
|
115
116
|
end
|
116
117
|
end
|
117
118
|
|
@@ -794,9 +795,6 @@ class TypeFormatter
|
|
794
795
|
def chomp_list
|
795
796
|
@bld.chomp!(COMMA_SEP)
|
796
797
|
end
|
797
|
-
|
798
|
-
@singleton = new
|
799
|
-
@@string_visitor = Visitor.new(nil, 'string',0,0)
|
800
798
|
end
|
801
799
|
end
|
802
800
|
end
|