puppet 6.13.0-x86-mingw32 → 6.18.0-x86-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
@@ -114,12 +114,31 @@ describe Puppet::Application::Filebucket do
|
|
114
114
|
@filebucket.setup
|
115
115
|
end
|
116
116
|
|
117
|
-
it "should default to the first server_list entry if set" do
|
117
|
+
it "should default to the first good server_list entry if server_list is set" do
|
118
|
+
stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 200)
|
118
119
|
Puppet[:server_list] = "foo,bar,baz"
|
119
120
|
expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "foo"))
|
120
121
|
@filebucket.setup
|
121
122
|
end
|
122
123
|
|
124
|
+
it "should walk server_list until it finds a good entry" do
|
125
|
+
stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 502)
|
126
|
+
stub_request(:get, "https://bar:8140/status/v1/simple/master").to_return(status: 200)
|
127
|
+
Puppet[:server_list] = "foo,bar,baz"
|
128
|
+
expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "bar"))
|
129
|
+
@filebucket.setup
|
130
|
+
end
|
131
|
+
|
132
|
+
# FileBucket catches any exceptions raised, logs them, then just exits
|
133
|
+
it "raises an error if there are no functional servers in server_list" do
|
134
|
+
stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 404)
|
135
|
+
stub_request(:get, "https://bar:8140/status/v1/simple/master").to_return(status: 404)
|
136
|
+
Puppet[:server] = 'horacio'
|
137
|
+
Puppet[:server_list] = "foo,bar"
|
138
|
+
|
139
|
+
expect{@filebucket.setup}.to exit_with(1)
|
140
|
+
end
|
141
|
+
|
123
142
|
it "should fall back to server if server_list is empty" do
|
124
143
|
Puppet[:server_list] = ""
|
125
144
|
expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "puppet"))
|
@@ -127,8 +146,9 @@ describe Puppet::Application::Filebucket do
|
|
127
146
|
end
|
128
147
|
|
129
148
|
it "should take both the server and port specified in server_list" do
|
149
|
+
stub_request(:get, "https://foo:632/status/v1/simple/master").to_return(status: 200)
|
130
150
|
Puppet[:server_list] = "foo:632,bar:6215,baz:351"
|
131
|
-
expect(Puppet::FileBucket::Dipper).to receive(:new).with({ :Server => "foo", :Port =>
|
151
|
+
expect(Puppet::FileBucket::Dipper).to receive(:new).with({ :Server => "foo", :Port => 632 })
|
132
152
|
@filebucket.setup
|
133
153
|
end
|
134
154
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/face'
|
3
|
+
|
4
|
+
describe Puppet::Face[:man, :current] do
|
5
|
+
let(:pager) { '/path/to/our/pager' }
|
6
|
+
|
7
|
+
around do |example|
|
8
|
+
Puppet::Util.withenv('MANPAGER' => pager) do
|
9
|
+
example.run
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'is deprecated' do
|
14
|
+
expect(subject).to be_deprecated
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'has a man action' do
|
18
|
+
expect(subject).to be_action(:man)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts a call with no arguments' do
|
22
|
+
expect { subject.man }.to output(/USAGE: puppet man <action>/).to_stdout
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'raises an ArgumentError when given too many arguments' do
|
26
|
+
expect {
|
27
|
+
subject.man(:man, 'agent', 'extra')
|
28
|
+
}.to raise_error(ArgumentError)
|
29
|
+
.and output(/USAGE: puppet man <action>/).to_stdout
|
30
|
+
end
|
31
|
+
|
32
|
+
it "exits with 0 when generating man documentation for each available application" do
|
33
|
+
# turn off deprecation warning
|
34
|
+
Puppet[:disable_warnings] = ['deprecations']
|
35
|
+
|
36
|
+
allow(Puppet::Util).to receive(:which).with('ronn').and_return(nil)
|
37
|
+
allow(Puppet::Util).to receive(:which).with(pager).and_return(pager)
|
38
|
+
|
39
|
+
Puppet::Application.available_application_names.each do |name|
|
40
|
+
next if %w{man face_base indirection_base}.include? name
|
41
|
+
|
42
|
+
app = Puppet::Application[:man]
|
43
|
+
app.command_line.args << 'man' << name
|
44
|
+
|
45
|
+
expect {
|
46
|
+
allow(IO).to receive(:popen).with(pager, 'w:UTF-8').and_yield($stdout)
|
47
|
+
app.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(/puppet-#{name}/m).to_stdout
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -51,7 +51,9 @@ describe Puppet::Application::Resource do
|
|
51
51
|
# provider is a parameter that should always be available
|
52
52
|
@resource_app.extra_params = [ :provider ]
|
53
53
|
|
54
|
-
expect {
|
54
|
+
expect {
|
55
|
+
@resource_app.main
|
56
|
+
}.to output(/provider\s+=>/).to_stdout
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
@@ -38,7 +38,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
38
38
|
def expects_command_to_pass(expected_output = nil)
|
39
39
|
expect {
|
40
40
|
ssl.run_command
|
41
|
-
}.to
|
41
|
+
}.to output(expected_output).to_stdout
|
42
42
|
end
|
43
43
|
|
44
44
|
def expects_command_to_fail(message)
|
@@ -46,7 +46,7 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
46
46
|
expect {
|
47
47
|
ssl.run_command
|
48
48
|
}.to raise_error(Puppet::Error, message)
|
49
|
-
}.to
|
49
|
+
}.to output(/.*/).to_stdout
|
50
50
|
end
|
51
51
|
|
52
52
|
shared_examples_for 'an ssl action' do
|
@@ -266,6 +266,19 @@ describe Puppet::Application::Ssl, unless: Puppet::Util::Platform.jruby? do
|
|
266
266
|
FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), Puppet[:hostprivkey])
|
267
267
|
FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'signed.pem'), Puppet[:hostcert])
|
268
268
|
|
269
|
+
# To verify the client cert we need the root and intermediate certs and crls.
|
270
|
+
# We don't need to do this with `ssl-client` cert above, because it is issued
|
271
|
+
# directly from the generated TestCa above.
|
272
|
+
File.open(Puppet[:localcacert], 'w') do |f|
|
273
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'ca.pem')))
|
274
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate.pem')))
|
275
|
+
end
|
276
|
+
|
277
|
+
File.open(Puppet[:hostcrl], 'w') do |f|
|
278
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'crl.pem')))
|
279
|
+
f.write(File.read(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'intermediate-crl.pem')))
|
280
|
+
end
|
281
|
+
|
269
282
|
Puppet[:passfile] = file_containing('passfile', '74695716c8b6')
|
270
283
|
|
271
284
|
expects_command_to_pass(%r{Verified client certificate 'CN=signed' fingerprint})
|
@@ -228,5 +228,15 @@ describe Puppet::Configurer::Downloader do
|
|
228
228
|
|
229
229
|
expect { @dler.evaluate }.not_to raise_error
|
230
230
|
end
|
231
|
+
|
232
|
+
it "raises an exception if catalog application fails" do
|
233
|
+
Puppet[:ignore_plugin_errors] = false
|
234
|
+
|
235
|
+
expect(@dler.file).to receive(:retrieve).and_raise(Puppet::Error, "testing")
|
236
|
+
|
237
|
+
expect {
|
238
|
+
@dler.evaluate
|
239
|
+
}.to raise_error(Puppet::Error, /testing/)
|
240
|
+
end
|
231
241
|
end
|
232
242
|
end
|
@@ -104,7 +104,7 @@ describe Puppet::Configurer::FactHandler do
|
|
104
104
|
expect(text).to include(test_fact[:encoded])
|
105
105
|
|
106
106
|
# this is not sufficient to test whether these values are sent via HTTP GET or HTTP POST in actual catalog request
|
107
|
-
expect(JSON.parse(
|
107
|
+
expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|
@@ -129,7 +129,7 @@ describe Puppet::Configurer::FactHandler do
|
|
129
129
|
expect(to_upload).to eq({:facts_format => 'application/json', :facts => text})
|
130
130
|
expect(text).to include(test_fact[:encoded])
|
131
131
|
|
132
|
-
expect(JSON.parse(
|
132
|
+
expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
|
133
133
|
end
|
134
134
|
end
|
135
135
|
end
|
@@ -138,9 +138,9 @@ describe Puppet::Configurer::FactHandler do
|
|
138
138
|
facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
|
139
139
|
Puppet::Node::Facts.indirection.save(facts)
|
140
140
|
|
141
|
-
# prefer
|
141
|
+
# prefer Puppet::Util.uri_unescape but validate CGI also works
|
142
142
|
encoded_facts = facthandler.facts_for_uploading[:facts]
|
143
|
-
expect(
|
143
|
+
expect(Puppet::Util.uri_unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
|
144
144
|
expect(CGI.unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
|
145
145
|
end
|
146
146
|
end
|
@@ -6,13 +6,17 @@ describe Puppet::Configurer::PluginHandler do
|
|
6
6
|
let(:pluginhandler) { Puppet::Configurer::PluginHandler.new() }
|
7
7
|
let(:environment) { Puppet::Node::Environment.create(:myenv, []) }
|
8
8
|
|
9
|
+
before :each do
|
10
|
+
# PluginHandler#load_plugin has an extra-strong rescue clause
|
11
|
+
# this mock is to make sure that we don't silently ignore errors
|
12
|
+
expect(Puppet).not_to receive(:err)
|
13
|
+
end
|
14
|
+
|
9
15
|
context "server agent version is 5.3.4" do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
# Server_agent version needs to be at 5.3.4 in order to mount locales
|
15
|
-
Puppet.push_context({:server_agent_version => "5.3.4"})
|
16
|
+
around do |example|
|
17
|
+
Puppet.override(server_agent_version: "5.3.4") do
|
18
|
+
example.run
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
it "downloads plugins, facts, and locales" do
|
@@ -43,12 +47,10 @@ describe Puppet::Configurer::PluginHandler do
|
|
43
47
|
end
|
44
48
|
|
45
49
|
context "server agent version is 5.3.3" do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
# Server_agent version needs to be at 5.3.4 in order to mount locales
|
51
|
-
Puppet.push_context({:server_agent_version => "5.3.3"})
|
50
|
+
around do |example|
|
51
|
+
Puppet.override(server_agent_version: "5.3.3") do
|
52
|
+
example.run
|
53
|
+
end
|
52
54
|
end
|
53
55
|
|
54
56
|
it "returns downloaded plugin, fact, but not locale filenames" do
|
@@ -69,15 +71,30 @@ describe Puppet::Configurer::PluginHandler do
|
|
69
71
|
end
|
70
72
|
|
71
73
|
context "blank server agent version" do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
around do |example|
|
75
|
+
Puppet.override(server_agent_version: "") do
|
76
|
+
example.run
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "returns downloaded plugin, fact, but not locale filenames" do
|
81
|
+
times_called = 0
|
82
|
+
allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
|
83
|
+
times_called += 1
|
84
|
+
|
85
|
+
if times_called == 1
|
86
|
+
%w[/a]
|
87
|
+
else
|
88
|
+
%w[/b]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
expect(pluginhandler.download_plugins(environment)).to match_array(%w[/a /b])
|
93
|
+
expect(times_called).to eq(2)
|
79
94
|
end
|
95
|
+
end
|
80
96
|
|
97
|
+
context "nil server agent version" do
|
81
98
|
it "returns downloaded plugin, fact, but not locale filenames" do
|
82
99
|
times_called = 0
|
83
100
|
allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/configurer'
|
3
|
-
require 'webmock/rspec'
|
4
3
|
|
5
4
|
describe Puppet::Configurer do
|
6
5
|
before do
|
@@ -10,11 +9,12 @@ describe Puppet::Configurer do
|
|
10
9
|
catalog.add_resource(resource)
|
11
10
|
end
|
12
11
|
|
12
|
+
let(:node_name) { Puppet[:node_name_value] }
|
13
13
|
let(:configurer) { Puppet::Configurer.new }
|
14
14
|
let(:report) { Puppet::Transaction::Report.new }
|
15
|
-
let(:catalog) { Puppet::Resource::Catalog.new(
|
15
|
+
let(:catalog) { Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
|
16
16
|
let(:resource) { Puppet::Resource.new(:notice, 'a') }
|
17
|
-
let(:facts) { Puppet::Node::Facts.new(
|
17
|
+
let(:facts) { Puppet::Node::Facts.new(node_name) }
|
18
18
|
|
19
19
|
describe "when executing a pre-run hook" do
|
20
20
|
it "should do nothing if the hook is set to an empty string" do
|
@@ -84,6 +84,26 @@ describe Puppet::Configurer do
|
|
84
84
|
expect(configurer.run).to eq(0)
|
85
85
|
end
|
86
86
|
|
87
|
+
it "fails the run if pluginsync fails when usecacheonfailure is false" do
|
88
|
+
Puppet[:ignore_plugin_errors] = false
|
89
|
+
|
90
|
+
# --test implies these, set them so we don't fall back to a cached catalog
|
91
|
+
Puppet[:use_cached_catalog] = false
|
92
|
+
Puppet[:usecacheonfailure] = false
|
93
|
+
|
94
|
+
body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
|
95
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
|
96
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
97
|
+
)
|
98
|
+
stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
|
99
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
100
|
+
)
|
101
|
+
|
102
|
+
configurer.run(pluginsync: true)
|
103
|
+
|
104
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
|
105
|
+
end
|
106
|
+
|
87
107
|
it "applies a cached catalog when it can't connect to the master" do
|
88
108
|
error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
|
89
109
|
|
@@ -95,12 +115,14 @@ describe Puppet::Configurer do
|
|
95
115
|
end
|
96
116
|
|
97
117
|
it "should initialize a transaction report if one is not provided" do
|
98
|
-
|
118
|
+
# host and settings catalogs each create a report...
|
119
|
+
expect(Puppet::Transaction::Report).to receive(:new).and_return(report).twice
|
99
120
|
|
100
121
|
configurer.run
|
101
122
|
end
|
102
123
|
|
103
124
|
it "should respect node_name_fact when setting the host on a report" do
|
125
|
+
Puppet[:node_name_value] = nil
|
104
126
|
Puppet[:node_name_fact] = 'my_name_fact'
|
105
127
|
facts.values = {'my_name_fact' => 'node_name_from_fact'}
|
106
128
|
Puppet::Node::Facts.indirection.save(facts)
|
@@ -146,7 +168,7 @@ describe Puppet::Configurer do
|
|
146
168
|
configurer = Puppet::Configurer.new("test_tuuid", "test_jid")
|
147
169
|
|
148
170
|
report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
|
149
|
-
expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid').and_return(report)
|
171
|
+
expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid', anything).and_return(report)
|
150
172
|
expect(configurer).to receive(:send_report).with(report)
|
151
173
|
|
152
174
|
configurer.run
|
@@ -190,22 +212,21 @@ describe Puppet::Configurer do
|
|
190
212
|
end
|
191
213
|
|
192
214
|
it "should remove the report as a log destination when the run is finished" do
|
193
|
-
|
194
|
-
|
195
|
-
configurer.run
|
215
|
+
configurer.run(report: report)
|
196
216
|
|
197
217
|
expect(Puppet::Util::Log.destinations).not_to include(report)
|
198
218
|
end
|
199
219
|
|
200
|
-
it "should return
|
201
|
-
|
202
|
-
|
220
|
+
it "should return an exit status of 2 due to the notify resource 'changing'" do
|
221
|
+
cat = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
|
222
|
+
cat.add_resource(Puppet::Type.type(:notify).new(:name => 'something changed'))
|
203
223
|
|
204
|
-
expect(configurer.run).to eq(
|
224
|
+
expect(configurer.run(catalog: cat, report: report)).to eq(2)
|
205
225
|
end
|
206
226
|
|
207
227
|
it "should return nil if catalog application fails" do
|
208
|
-
|
228
|
+
expect(catalog).to receive(:apply).and_raise(Puppet::Error, 'One or more resource dependency cycles detected in graph')
|
229
|
+
|
209
230
|
expect(configurer.run(catalog: catalog, report: report)).to be_nil
|
210
231
|
end
|
211
232
|
|
@@ -220,34 +241,28 @@ describe Puppet::Configurer do
|
|
220
241
|
end
|
221
242
|
|
222
243
|
it "should include the pre-run command failure in the report" do
|
223
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
224
|
-
|
225
244
|
Puppet.settings[:prerun_command] = "/my/command"
|
226
245
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
227
246
|
|
228
|
-
expect(configurer.run).to be_nil
|
247
|
+
expect(configurer.run(report: report)).to be_nil
|
229
248
|
expect(report.logs.find { |x| x.message =~ /Could not run command from prerun_command/ }).to be
|
230
249
|
end
|
231
250
|
|
232
251
|
it "should send the transaction report even if the post-run command fails" do
|
233
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
234
|
-
|
235
252
|
Puppet.settings[:postrun_command] = "/my/command"
|
236
253
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
237
254
|
expect(configurer).to receive(:send_report).with(report)
|
238
255
|
|
239
|
-
expect(configurer.run).to be_nil
|
256
|
+
expect(configurer.run(report: report)).to be_nil
|
240
257
|
end
|
241
258
|
|
242
259
|
it "should include the post-run command failure in the report" do
|
243
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
244
|
-
|
245
260
|
Puppet.settings[:postrun_command] = "/my/command"
|
246
261
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
247
262
|
|
248
263
|
expect(report).to receive(:<<) { |log, _| expect(log.message).to match(/Could not run command from postrun_command/) }.at_least(:once)
|
249
264
|
|
250
|
-
expect(configurer.run).to be_nil
|
265
|
+
expect(configurer.run(report: report)).to be_nil
|
251
266
|
end
|
252
267
|
|
253
268
|
it "should execute post-run command even if the pre-run command fails" do
|
@@ -260,34 +275,28 @@ describe Puppet::Configurer do
|
|
260
275
|
end
|
261
276
|
|
262
277
|
it "should finalize the report" do
|
263
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
264
|
-
|
265
278
|
expect(report).to receive(:finalize_report)
|
266
|
-
configurer.run
|
279
|
+
configurer.run(report: report)
|
267
280
|
end
|
268
281
|
|
269
282
|
it "should not apply the catalog if the pre-run command fails" do
|
270
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
271
|
-
|
272
283
|
Puppet.settings[:prerun_command] = "/my/command"
|
273
284
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
274
285
|
|
275
286
|
expect_any_instance_of(Puppet::Resource::Catalog).not_to receive(:apply)
|
276
287
|
expect(configurer).to receive(:send_report)
|
277
288
|
|
278
|
-
expect(configurer.run).to be_nil
|
289
|
+
expect(configurer.run(report: report)).to be_nil
|
279
290
|
end
|
280
291
|
|
281
292
|
it "should apply the catalog, send the report, and return nil if the post-run command fails" do
|
282
|
-
expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
|
283
|
-
|
284
293
|
Puppet.settings[:postrun_command] = "/my/command"
|
285
294
|
expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
|
286
295
|
|
287
296
|
expect_any_instance_of(Puppet::Resource::Catalog).to receive(:apply)
|
288
297
|
expect(configurer).to receive(:send_report)
|
289
298
|
|
290
|
-
expect(configurer.run).to be_nil
|
299
|
+
expect(configurer.run(report: report)).to be_nil
|
291
300
|
end
|
292
301
|
|
293
302
|
it 'includes total time metrics in the report after successfully applying the catalog' do
|
@@ -316,7 +325,7 @@ describe Puppet::Configurer do
|
|
316
325
|
end
|
317
326
|
|
318
327
|
it "should refetch the catalog if the server specifies a new environment in the catalog" do
|
319
|
-
catalog = Puppet::Resource::Catalog.new(
|
328
|
+
catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
|
320
329
|
expect(configurer).to receive(:retrieve_catalog).and_return(catalog).twice
|
321
330
|
|
322
331
|
configurer.run
|
@@ -544,6 +553,15 @@ describe Puppet::Configurer do
|
|
544
553
|
end
|
545
554
|
end
|
546
555
|
|
556
|
+
def expects_pluginsync
|
557
|
+
metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
558
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
|
559
|
+
|
560
|
+
# response retains owner/group/mode due to source_permissions => use
|
561
|
+
facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
562
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
|
563
|
+
end
|
564
|
+
|
547
565
|
def expects_new_catalog_only(catalog)
|
548
566
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
549
567
|
expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
|
@@ -560,6 +578,7 @@ describe Puppet::Configurer do
|
|
560
578
|
end
|
561
579
|
|
562
580
|
def expects_fallback_to_new_catalog(catalog)
|
581
|
+
expects_pluginsync
|
563
582
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
|
564
583
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
565
584
|
end
|
@@ -596,7 +615,6 @@ describe Puppet::Configurer do
|
|
596
615
|
it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
|
597
616
|
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
598
617
|
expects_fallback_to_new_catalog(catalog)
|
599
|
-
expect(configurer).to receive(:download_plugins)
|
600
618
|
|
601
619
|
configurer.run
|
602
620
|
end
|
@@ -611,7 +629,7 @@ describe Puppet::Configurer do
|
|
611
629
|
end
|
612
630
|
|
613
631
|
it "should set its cached_catalog_status to 'explicitly requested' if the cached catalog is from a different environment" do
|
614
|
-
cached_catalog = Puppet::Resource::Catalog.new(
|
632
|
+
cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
|
615
633
|
expects_cached_catalog_only(cached_catalog)
|
616
634
|
|
617
635
|
options = {}
|
@@ -634,6 +652,7 @@ describe Puppet::Configurer do
|
|
634
652
|
it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
|
635
653
|
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
636
654
|
expects_neither_new_or_cached_catalog
|
655
|
+
expects_pluginsync
|
637
656
|
|
638
657
|
# after failing to use a cached catalog, we'll need to pluginsync before getting
|
639
658
|
# a new catalog, which also fails.
|
@@ -644,7 +663,7 @@ describe Puppet::Configurer do
|
|
644
663
|
end
|
645
664
|
|
646
665
|
it "should return the cached catalog when the environment doesn't match" do
|
647
|
-
cached_catalog = Puppet::Resource::Catalog.new(
|
666
|
+
cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
|
648
667
|
expects_cached_catalog_only(cached_catalog)
|
649
668
|
|
650
669
|
allow(Puppet).to receive(:info)
|
@@ -654,8 +673,7 @@ describe Puppet::Configurer do
|
|
654
673
|
end
|
655
674
|
|
656
675
|
it "applies the catalog passed as options when the catalog cache terminus is not set" do
|
657
|
-
|
658
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
|
676
|
+
expects_pluginsync
|
659
677
|
|
660
678
|
catalog.add_resource(Puppet::Resource.new('notify', 'from apply'))
|
661
679
|
configurer.run(catalog: catalog.to_ral)
|
@@ -702,7 +720,7 @@ describe Puppet::Configurer do
|
|
702
720
|
Puppet[:environment] = 'second_env'
|
703
721
|
configurer = Puppet::Configurer.new
|
704
722
|
|
705
|
-
catalog = Puppet::Resource::Catalog.new(
|
723
|
+
catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
|
706
724
|
expects_new_catalog_only(catalog)
|
707
725
|
|
708
726
|
expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
|
@@ -724,7 +742,7 @@ describe Puppet::Configurer do
|
|
724
742
|
Puppet[:environment] = 'second_env'
|
725
743
|
configurer = Puppet::Configurer.new
|
726
744
|
|
727
|
-
catalog = Puppet::Resource::Catalog.new(
|
745
|
+
catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
|
728
746
|
expects_cached_catalog_only(catalog)
|
729
747
|
|
730
748
|
expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
|
@@ -824,7 +842,7 @@ describe Puppet::Configurer do
|
|
824
842
|
end
|
825
843
|
|
826
844
|
it "should return nil if its cached catalog environment doesn't match server-specified environment" do
|
827
|
-
cached_catalog = Puppet::Resource::Catalog.new(
|
845
|
+
cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
|
828
846
|
|
829
847
|
expects_fallback_to_cached_catalog(cached_catalog)
|
830
848
|
|
@@ -834,7 +852,7 @@ describe Puppet::Configurer do
|
|
834
852
|
end
|
835
853
|
|
836
854
|
it "should set its cached_catalog_status to 'not_used' if the cached catalog environment doesn't match server-specified environment" do
|
837
|
-
cached_catalog = Puppet::Resource::Catalog.new(
|
855
|
+
cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
|
838
856
|
|
839
857
|
expects_fallback_to_cached_catalog(cached_catalog)
|
840
858
|
|
@@ -854,7 +872,7 @@ describe Puppet::Configurer do
|
|
854
872
|
it "should not update the cached catalog in noop mode" do
|
855
873
|
Puppet[:noop] = true
|
856
874
|
|
857
|
-
stub_request(:
|
875
|
+
stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
|
858
876
|
|
859
877
|
Puppet::Resource::Catalog.indirection.cache_class = :json
|
860
878
|
path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
|
@@ -868,7 +886,7 @@ describe Puppet::Configurer do
|
|
868
886
|
Puppet[:noop] = false
|
869
887
|
Puppet[:log_level] = 'info'
|
870
888
|
|
871
|
-
stub_request(:
|
889
|
+
stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
|
872
890
|
|
873
891
|
Puppet::Resource::Catalog.indirection.cache_class = :json
|
874
892
|
cache_path = Puppet::Resource::Catalog.indirection.cache.path(Puppet[:node_name_value])
|
@@ -881,7 +899,7 @@ describe Puppet::Configurer do
|
|
881
899
|
end
|
882
900
|
|
883
901
|
it "successfully applies the catalog without a cache" do
|
884
|
-
stub_request(:
|
902
|
+
stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
|
885
903
|
|
886
904
|
Puppet::Resource::Catalog.indirection.cache_class = nil
|
887
905
|
|
@@ -996,7 +1014,7 @@ describe Puppet::Configurer do
|
|
996
1014
|
|
997
1015
|
it "should not failover during an apply run" do
|
998
1016
|
Puppet.settings[:server_list] = ["myserver:123"]
|
999
|
-
catalog = Puppet::Resource::Catalog.new(
|
1017
|
+
catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
|
1000
1018
|
configurer.run(catalog: catalog)
|
1001
1019
|
end
|
1002
1020
|
|
@@ -1041,7 +1059,7 @@ describe Puppet::Configurer do
|
|
1041
1059
|
Puppet::Resource::Catalog.indirection.terminus_class = :rest
|
1042
1060
|
|
1043
1061
|
stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
|
1044
|
-
stub_request(:
|
1062
|
+
stub_request(:post, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
|
1045
1063
|
node_request = stub_request(:get, %r{https://myserver:123/puppet/v3/node/}).to_return(status: 200)
|
1046
1064
|
|
1047
1065
|
configurer.run
|