puppet 6.13.0-universal-darwin → 6.18.0-universal-darwin
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
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet_spec/files'
|
3
3
|
require 'puppet_spec/compiler'
|
4
|
+
require 'puppet_spec/https'
|
4
5
|
|
5
|
-
describe "apply" do
|
6
|
+
describe "apply", unless: Puppet::Util::Platform.jruby? do
|
6
7
|
include PuppetSpec::Files
|
7
8
|
|
9
|
+
let(:apply) { Puppet::Application[:apply] }
|
10
|
+
|
8
11
|
before :each do
|
9
12
|
Puppet[:reports] = "none"
|
10
13
|
# Let exceptions be raised instead of exiting
|
@@ -18,76 +21,51 @@ describe "apply" do
|
|
18
21
|
resource = Puppet::Resource.new(:file, file_to_create, :parameters => {:content => "my stuff"})
|
19
22
|
catalog.add_resource resource
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
puppet.apply
|
24
|
+
apply.command_line.args = ['--catalog', file_containing("manifest", catalog.to_json)]
|
25
|
+
expect {
|
26
|
+
apply.run
|
27
|
+
}.to output(/ensure: defined content as/).to_stdout
|
27
28
|
|
28
29
|
expect(Puppet::FileSystem.exist?(file_to_create)).to be_truthy
|
29
30
|
expect(File.read(file_to_create)).to eq("my stuff")
|
30
31
|
end
|
31
32
|
|
32
|
-
context '
|
33
|
-
|
34
|
-
|
35
|
-
let!(:envdir) { tmpdir('environments') }
|
33
|
+
context 'and pcore types are available' do
|
34
|
+
let(:envdir) { my_fixture('environments') }
|
36
35
|
let(:env_name) { 'spec' }
|
37
|
-
let(:dir_structure) {
|
38
|
-
{
|
39
|
-
'.resource_types' => {
|
40
|
-
'applytest.pp' => <<-CODE
|
41
|
-
Puppet::Resource::ResourceType3.new(
|
42
|
-
'applytest',
|
43
|
-
[Puppet::Resource::Param.new(String, 'message')],
|
44
|
-
[Puppet::Resource::Param.new(String, 'name', true)])
|
45
|
-
CODE
|
46
|
-
},
|
47
|
-
'modules' => {
|
48
|
-
'amod' => {
|
49
|
-
'lib' => {
|
50
|
-
'puppet' => {
|
51
|
-
'type' => { 'applytest.rb' => <<-CODE
|
52
|
-
Puppet::Type.newtype(:applytest) do
|
53
|
-
newproperty(:message) do
|
54
|
-
def sync
|
55
|
-
Puppet.send(@resource[:loglevel], self.should)
|
56
|
-
end
|
57
|
-
|
58
|
-
def retrieve
|
59
|
-
:absent
|
60
|
-
end
|
61
36
|
|
62
|
-
|
63
|
-
|
64
|
-
|
37
|
+
before(:each) do
|
38
|
+
Puppet[:environmentpath] = envdir
|
39
|
+
Puppet[:environment] = env_name
|
40
|
+
end
|
65
41
|
|
66
|
-
|
67
|
-
|
42
|
+
it 'does not load the pcore type' do
|
43
|
+
apply = Puppet::Application[:apply]
|
44
|
+
apply.command_line.args = [ '-e', "Applytest { message => 'the default'} applytest { 'applytest was here': }" ]
|
45
|
+
|
46
|
+
expect {
|
47
|
+
apply.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(a_string_matching(
|
50
|
+
/the Puppet::Type says hello/
|
51
|
+
).and matching(
|
52
|
+
/applytest was here/
|
53
|
+
)).to_stdout
|
54
|
+
end
|
55
|
+
end
|
68
56
|
|
69
|
-
|
70
|
-
|
71
|
-
Puppet.notice('the Puppet::Type says hello')
|
72
|
-
isnamevar
|
73
|
-
end
|
74
|
-
end
|
75
|
-
CODE
|
76
|
-
}
|
77
|
-
}
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
57
|
+
context 'from environment with a pcore defined resource type' do
|
58
|
+
include PuppetSpec::Compiler
|
83
59
|
|
60
|
+
let(:envdir) { my_fixture('environments') }
|
61
|
+
let(:env_name) { 'spec' }
|
84
62
|
let(:environments) { Puppet::Environments::Directories.new(envdir, []) }
|
85
63
|
let(:env) { Puppet::Node::Environment.create(:'spec', [File.join(envdir, 'spec', 'modules')]) }
|
86
64
|
let(:node) { Puppet::Node.new('test', :environment => env) }
|
65
|
+
|
87
66
|
around(:each) do |example|
|
88
67
|
Puppet::Type.rmtype(:applytest)
|
89
68
|
Puppet[:environment] = env_name
|
90
|
-
dir_contained_in(envdir, env_name => dir_structure)
|
91
69
|
Puppet.override(:environments => environments, :current_environment => env) do
|
92
70
|
example.run
|
93
71
|
end
|
@@ -95,12 +73,13 @@ end
|
|
95
73
|
|
96
74
|
it 'does not load the pcore type' do
|
97
75
|
catalog = compile_to_catalog('applytest { "applytest was here":}', node)
|
98
|
-
apply =
|
99
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
76
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
100
77
|
|
101
78
|
Puppet[:environmentpath] = envdir
|
102
79
|
expect_any_instance_of(Puppet::Pops::Loader::Runtime3TypeLoader).not_to receive(:find)
|
103
|
-
expect {
|
80
|
+
expect {
|
81
|
+
apply.run
|
82
|
+
}.to output(/the Puppet::Type says hello.*applytest was here/m).to_stdout
|
104
83
|
end
|
105
84
|
|
106
85
|
# Test just to verify that the Pcore Resource Type and not the Ruby one is produced when the catalog is produced
|
@@ -112,7 +91,9 @@ end
|
|
112
91
|
|
113
92
|
expect(compiler.loaders.runtime3_type_loader.instance_variable_get(:@resource_3x_loader)).to receive(:set_entry).once.with(tn, rt, instance_of(String))
|
114
93
|
.and_return(Puppet::Pops::Loader::Loader::NamedEntry.new(tn, rt, nil))
|
115
|
-
expect {
|
94
|
+
expect {
|
95
|
+
compiler.compile
|
96
|
+
}.not_to output(/the Puppet::Type says hello/).to_stdout
|
116
97
|
end
|
117
98
|
|
118
99
|
it "does not fail when pcore type is loaded twice" do
|
@@ -225,39 +206,39 @@ end
|
|
225
206
|
catalog = compile_to_catalog('include mod', node)
|
226
207
|
|
227
208
|
Puppet[:environment] = env_name
|
228
|
-
apply =
|
229
|
-
|
230
|
-
expect {
|
231
|
-
|
209
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
210
|
+
|
211
|
+
expect {
|
212
|
+
apply.run
|
213
|
+
}.to output(%r{Notify\[The Street 23\]/message: defined 'message' as 'The Street 23'}).to_stdout
|
232
214
|
end
|
233
215
|
end
|
234
216
|
|
235
|
-
it "
|
217
|
+
it "raises if the environment directory does not exist" do
|
236
218
|
manifest = file_containing("manifest.pp", "notice('it was applied')")
|
219
|
+
apply.command_line.args = [manifest]
|
237
220
|
|
238
221
|
special = Puppet::Node::Environment.create(:special, [])
|
239
222
|
Puppet.override(:current_environment => special) do
|
240
223
|
Puppet[:environment] = 'special'
|
241
|
-
|
242
|
-
|
243
|
-
|
224
|
+
expect {
|
225
|
+
apply.run
|
226
|
+
}.to raise_error(Puppet::Environments::EnvironmentNotFound,
|
227
|
+
/Could not find a directory environment named 'special' anywhere in the path/)
|
244
228
|
end
|
245
|
-
|
246
|
-
expect(@logs.map(&:to_s)).to include('it was applied')
|
247
229
|
end
|
248
230
|
|
249
231
|
it "adds environment to the $server_facts variable" do
|
250
232
|
manifest = file_containing("manifest.pp", "notice(\"$server_facts\")")
|
233
|
+
apply.command_line.args = [manifest]
|
251
234
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
expect(@logs.map(&:to_s)).to include(/{environment =>.*/)
|
235
|
+
expect {
|
236
|
+
apply.run
|
237
|
+
}.to exit_with(0)
|
238
|
+
.and output(/{environment => production}/).to_stdout
|
258
239
|
end
|
259
240
|
|
260
|
-
it "applies a given file even when an ENC is configured", :unless => Puppet::Util::Platform.windows? ||
|
241
|
+
it "applies a given file even when an ENC is configured", :unless => Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
|
261
242
|
manifest = file_containing("manifest.pp", "notice('specific manifest applied')")
|
262
243
|
enc = script_containing('enc_script',
|
263
244
|
:windows => '@echo classes: []' + "\n" + '@echo environment: special',
|
@@ -270,48 +251,36 @@ end
|
|
270
251
|
Puppet[:environment] = 'special'
|
271
252
|
Puppet[:node_terminus] = 'exec'
|
272
253
|
Puppet[:external_nodes] = enc
|
273
|
-
|
274
|
-
|
275
|
-
|
254
|
+
apply.command_line.args = [manifest]
|
255
|
+
expect {
|
256
|
+
apply.run
|
257
|
+
}.to exit_with(0)
|
258
|
+
.and output(/Notice: Scope\(Class\[main\]\): specific manifest applied/).to_stdout
|
276
259
|
end
|
277
|
-
|
278
|
-
expect(@logs.map(&:to_s)).to include('specific manifest applied')
|
279
260
|
end
|
280
261
|
|
281
262
|
context "handles errors" do
|
282
263
|
it "logs compile errors once" do
|
283
|
-
|
284
|
-
|
285
|
-
apply.options[:code] = '08'
|
286
|
-
|
287
|
-
msg = 'valid octal'
|
288
|
-
callback = Proc.new do |actual|
|
289
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
290
|
-
end
|
291
|
-
|
292
|
-
expect do
|
264
|
+
apply.command_line.args = ['-e', '08']
|
265
|
+
expect {
|
293
266
|
apply.run
|
294
|
-
|
267
|
+
}.to exit_with(1)
|
268
|
+
.and output(/Not a valid octal number/).to_stderr
|
295
269
|
end
|
296
270
|
|
297
271
|
it "logs compile post processing errors once" do
|
298
|
-
Puppet.initialize_settings([])
|
299
|
-
apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => []))
|
300
272
|
path = File.expand_path('/tmp/content_file_test.Q634Dlmtime')
|
301
|
-
apply.
|
273
|
+
apply.command_line.args = ['-e', "file { '#{path}':
|
302
274
|
content => 'This is the test file content',
|
303
275
|
ensure => present,
|
304
276
|
checksum => mtime
|
305
|
-
}"
|
306
|
-
|
307
|
-
msg = 'You cannot specify content when using checksum'
|
308
|
-
callback = Proc.new do |actual|
|
309
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
310
|
-
end
|
277
|
+
}"]
|
311
278
|
|
312
|
-
expect
|
279
|
+
expect {
|
313
280
|
apply.run
|
314
|
-
|
281
|
+
}.to exit_with(1)
|
282
|
+
.and output(/Compiled catalog/).to_stdout
|
283
|
+
.and output(/You cannot specify content when using checksum/).to_stderr
|
315
284
|
end
|
316
285
|
end
|
317
286
|
|
@@ -336,51 +305,42 @@ end
|
|
336
305
|
Puppet[:environmentpath] = envdir
|
337
306
|
end
|
338
307
|
|
339
|
-
|
340
|
-
|
341
|
-
puppet = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => args))
|
342
|
-
puppet.options[:code] = execute
|
343
|
-
return puppet
|
344
|
-
end
|
308
|
+
context "given a modulepath" do
|
309
|
+
let(:args) { ['-e', execute] }
|
345
310
|
|
346
|
-
|
347
|
-
|
311
|
+
before :each do
|
312
|
+
Puppet[:modulepath] = modulepath
|
348
313
|
|
349
|
-
|
350
|
-
|
314
|
+
apply.command_line.args = args
|
315
|
+
end
|
351
316
|
|
352
|
-
|
353
|
-
|
354
|
-
|
317
|
+
it "looks in modulepath even when the default directory environment exists" do
|
318
|
+
expect {
|
319
|
+
apply.run
|
320
|
+
}.to exit_with(0)
|
321
|
+
.and output(/amod class included/).to_stdout
|
355
322
|
end
|
356
323
|
|
357
|
-
it "looks in
|
358
|
-
args << '--environment' << 'production'
|
359
|
-
apply = init_cli_args_and_apply_app(args, execute)
|
324
|
+
it "looks in modulepath even when given a specific directory --environment" do
|
325
|
+
apply.command_line.args = args << '--environment' << 'production'
|
360
326
|
|
361
|
-
expect
|
362
|
-
|
363
|
-
|
327
|
+
expect {
|
328
|
+
apply.run
|
329
|
+
}.to exit_with(0)
|
330
|
+
.and output(/amod class included/).to_stdout
|
364
331
|
end
|
365
332
|
|
366
|
-
it "looks in
|
367
|
-
|
368
|
-
apply = init_cli_args_and_apply_app(args, execute)
|
333
|
+
it "looks in modulepath when given multiple paths in modulepath" do
|
334
|
+
Puppet[:modulepath] = [tmpdir('notmodulepath'), modulepath].join(File::PATH_SEPARATOR)
|
369
335
|
|
370
|
-
expect
|
371
|
-
|
372
|
-
|
336
|
+
expect {
|
337
|
+
apply.run
|
338
|
+
}.to exit_with(0)
|
339
|
+
.and output(/amod class included/).to_stdout
|
373
340
|
end
|
374
341
|
end
|
375
342
|
|
376
|
-
|
377
|
-
# expect { }.to have_printed(...)
|
378
|
-
# External node script execution will fail, likely due to the tampering
|
379
|
-
# with the basic file descriptors.
|
380
|
-
# Workaround: Define a log destination and merely inspect logs.
|
381
|
-
context "with an ENC", :unless => RUBY_PLATFORM == 'java' do
|
382
|
-
let(:logdest) { tmpfile('logdest') }
|
383
|
-
let(:args) { ['-e', execute, '--logdest', logdest ] }
|
343
|
+
context "with an ENC" do
|
384
344
|
let(:enc) do
|
385
345
|
script_containing('enc_script',
|
386
346
|
:windows => '@echo environment: spec',
|
@@ -393,17 +353,23 @@ end
|
|
393
353
|
end
|
394
354
|
|
395
355
|
it "should use the environment that the ENC mandates" do
|
396
|
-
apply =
|
397
|
-
|
398
|
-
expect
|
356
|
+
apply.command_line.args = ['-e', execute]
|
357
|
+
|
358
|
+
expect {
|
359
|
+
apply.run
|
360
|
+
}.to exit_with(0)
|
361
|
+
.and output(a_string_matching(/amod class included/)
|
362
|
+
.and matching(/Compiled catalog for .* in environment spec/)).to_stdout
|
399
363
|
end
|
400
364
|
|
401
365
|
it "should prefer the ENC environment over the configured one and emit a warning" do
|
402
|
-
apply =
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
366
|
+
apply.command_line.args = ['-e', execute, '--environment', 'production']
|
367
|
+
|
368
|
+
expect {
|
369
|
+
apply.run
|
370
|
+
}.to exit_with(0)
|
371
|
+
.and output(a_string_matching('amod class included')
|
372
|
+
.and matching(/doesn't match server specified environment/)).to_stdout
|
407
373
|
end
|
408
374
|
end
|
409
375
|
end
|
@@ -474,8 +440,7 @@ class amod::bad_type {
|
|
474
440
|
context 'and the file is not serialized with rich_data' do
|
475
441
|
it 'will notify a string that is the result of Regexp#inspect (from Runtime3xConverter)' do
|
476
442
|
catalog = compile_to_catalog(execute, node)
|
477
|
-
apply =
|
478
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
443
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
479
444
|
expect(apply).to receive(:apply_catalog) do |cat|
|
480
445
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(String)
|
481
446
|
expect(cat.resource(:notify, 'bin')['message']).to be_a(String)
|
@@ -490,8 +455,7 @@ class amod::bad_type {
|
|
490
455
|
|
491
456
|
it 'will notify a string that is the result of to_s on uknown data types' do
|
492
457
|
json = compile_to_catalog('include amod::bad_type', node).to_json
|
493
|
-
apply =
|
494
|
-
apply.options[:catalog] = file_containing('manifest', json)
|
458
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', json)]
|
495
459
|
expect(apply).to receive(:apply_catalog) do |catalog|
|
496
460
|
expect(catalog.resource(:notify, 'bogus')['message']).to be_a(String)
|
497
461
|
end
|
@@ -513,11 +477,10 @@ class amod::bad_type {
|
|
513
477
|
context 'and the file is serialized with rich_data' do
|
514
478
|
it 'will notify a regexp using Regexp#to_s' do
|
515
479
|
catalog = compile_to_catalog(execute, node)
|
516
|
-
apply = Puppet::Application[:apply]
|
517
480
|
serialized_catalog = Puppet.override(rich_data: true) do
|
518
481
|
catalog.to_json
|
519
482
|
end
|
520
|
-
apply.
|
483
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', serialized_catalog)]
|
521
484
|
expect(apply).to receive(:apply_catalog) do |cat|
|
522
485
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(Regexp)
|
523
486
|
# The resource return in this expect is a String, but since it was a Binary type that
|
@@ -534,4 +497,170 @@ class amod::bad_type {
|
|
534
497
|
end
|
535
498
|
end
|
536
499
|
end
|
500
|
+
|
501
|
+
context 'puppet file sources' do
|
502
|
+
let(:env_name) { 'dev' }
|
503
|
+
let(:env_dir) { File.join(Puppet[:environmentpath], env_name) }
|
504
|
+
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(env_dir, 'modules')]) }
|
505
|
+
let(:node) { Puppet::Node.new(Puppet[:certname], environment: environment) }
|
506
|
+
|
507
|
+
before :each do
|
508
|
+
Puppet[:environment] = env_name
|
509
|
+
Puppet::FileSystem.mkpath(env_dir)
|
510
|
+
end
|
511
|
+
|
512
|
+
it "recursively copies a directory from a module" do
|
513
|
+
dir = File.join(env.full_modulepath, 'amod', 'files', 'dir1', 'dir2')
|
514
|
+
Puppet::FileSystem.mkpath(dir)
|
515
|
+
File.write(File.join(dir, 'file'), 'content from the module')
|
516
|
+
|
517
|
+
base_dir = tmpdir('apply_spec_base')
|
518
|
+
manifest = file_containing("manifest.pp", <<-MANIFEST)
|
519
|
+
file { "#{base_dir}/dir1":
|
520
|
+
ensure => file,
|
521
|
+
source => "puppet:///modules/amod/dir1",
|
522
|
+
recurse => true,
|
523
|
+
}
|
524
|
+
MANIFEST
|
525
|
+
|
526
|
+
expect {
|
527
|
+
apply.command_line.args << manifest
|
528
|
+
apply.run
|
529
|
+
}.to exit_with(0)
|
530
|
+
.and output(a_string_matching(
|
531
|
+
/dir1\]\/ensure: created/
|
532
|
+
).and matching(
|
533
|
+
/dir1\/dir2\]\/ensure: created/
|
534
|
+
).and matching(
|
535
|
+
/dir1\/dir2\/file\]\/ensure: defined content as '{md5}51f37efb13c3a1e486106f90db6490a5'/
|
536
|
+
)).to_stdout
|
537
|
+
|
538
|
+
dest_file = File.join(base_dir, 'dir1', 'dir2', 'file')
|
539
|
+
expect(File.read(dest_file)).to eq("content from the module")
|
540
|
+
end
|
541
|
+
end
|
542
|
+
|
543
|
+
context 'http file sources' do
|
544
|
+
include_context 'https client'
|
545
|
+
|
546
|
+
it "requires the caller to URL encode special characters in the request path and query" do
|
547
|
+
Puppet[:server] = '127.0.0.1'
|
548
|
+
request = nil
|
549
|
+
|
550
|
+
response_proc = -> (req, res) {
|
551
|
+
request = req
|
552
|
+
|
553
|
+
res['Content-Type'] = 'text/plain'
|
554
|
+
res.body = "from the server"
|
555
|
+
}
|
556
|
+
|
557
|
+
https = PuppetSpec::HTTPSServer.new
|
558
|
+
https.start_server(response_proc: response_proc) do |https_port|
|
559
|
+
dest = tmpfile('http_file_source')
|
560
|
+
|
561
|
+
# spaces in path are encoded as %20 and '[' in query is encoded as %5B,
|
562
|
+
# but ':', '=', '-' are not encoded
|
563
|
+
manifest = file_containing("manifest.pp", <<~MANIFEST)
|
564
|
+
file { "#{dest}":
|
565
|
+
ensure => file,
|
566
|
+
source => "https://#{Puppet[:server]}:#{https_port}/path%20to%20file?x=b%5Bc&sv=2019-02-02&st=2020-07-28T20:18:53Z&se=2020-07-28T21:03:00Z&sr=b&sp=r&sig=JaZhcqxT4akJcOwUdUGrQB2m1geUoh89iL8WMag8a8c=",
|
567
|
+
}
|
568
|
+
MANIFEST
|
569
|
+
|
570
|
+
expect {
|
571
|
+
apply.command_line.args << manifest
|
572
|
+
apply.run
|
573
|
+
}.to exit_with(0)
|
574
|
+
.and output(%r{Main/File\[#{dest}\]/ensure: defined content as}).to_stdout
|
575
|
+
|
576
|
+
expect(request.path).to eq('/path to file')
|
577
|
+
expect(request.query).to include('x' => 'b[c')
|
578
|
+
expect(request.query).to include('sig' => 'JaZhcqxT4akJcOwUdUGrQB2m1geUoh89iL8WMag8a8c=')
|
579
|
+
end
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
583
|
+
context 'http report processor' do
|
584
|
+
include_context 'https client'
|
585
|
+
|
586
|
+
before :each do
|
587
|
+
Puppet[:reports] = 'http'
|
588
|
+
end
|
589
|
+
|
590
|
+
let(:unknown_server) do
|
591
|
+
unknown_ca_cert = cert_fixture('unknown-ca.pem')
|
592
|
+
PuppetSpec::HTTPSServer.new(
|
593
|
+
ca_cert: unknown_ca_cert,
|
594
|
+
server_cert: cert_fixture('unknown-127.0.0.1.pem'),
|
595
|
+
server_key: key_fixture('unknown-127.0.0.1-key.pem')
|
596
|
+
)
|
597
|
+
end
|
598
|
+
|
599
|
+
it 'submits a report via reporturl' do
|
600
|
+
report = nil
|
601
|
+
|
602
|
+
response_proc = -> (req, res) {
|
603
|
+
report = Puppet::Transaction::Report.convert_from(:yaml, req.body)
|
604
|
+
}
|
605
|
+
|
606
|
+
https = PuppetSpec::HTTPSServer.new
|
607
|
+
https.start_server(response_proc: response_proc) do |https_port|
|
608
|
+
Puppet[:reporturl] = "https://127.0.0.1:#{https_port}/reports/upload"
|
609
|
+
|
610
|
+
expect {
|
611
|
+
apply.command_line.args = ['-e', 'notify { "hi": }']
|
612
|
+
apply.run
|
613
|
+
}.to exit_with(0)
|
614
|
+
.and output(/Applied catalog/).to_stdout
|
615
|
+
|
616
|
+
expect(report).to be_a(Puppet::Transaction::Report)
|
617
|
+
expect(report.resource_statuses['Notify[hi]']).to be_a(Puppet::Resource::Status)
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
621
|
+
it 'rejects an HTTPS report server whose root cert is not the puppet CA' do
|
622
|
+
unknown_server.start_server do |https_port|
|
623
|
+
Puppet[:reporturl] = "https://127.0.0.1:#{https_port}/reports/upload"
|
624
|
+
|
625
|
+
# processing the report happens after the transaction is finished,
|
626
|
+
# so we expect exit code 0, with a later failure on stderr
|
627
|
+
expect {
|
628
|
+
apply.command_line.args = ['-e', 'notify { "hi": }']
|
629
|
+
apply.run
|
630
|
+
}.to exit_with(0)
|
631
|
+
.and output(/Applied catalog/).to_stdout
|
632
|
+
.and output(/Report processor failed: certificate verify failed \[self signed certificate in certificate chain for CN=Unknown CA\]/).to_stderr
|
633
|
+
end
|
634
|
+
end
|
635
|
+
|
636
|
+
it 'accepts an HTTPS report servers whose cert is in the system CA store' do
|
637
|
+
Puppet[:report_include_system_store] = true
|
638
|
+
report = nil
|
639
|
+
|
640
|
+
response_proc = -> (req, res) {
|
641
|
+
report = Puppet::Transaction::Report.convert_from(:yaml, req.body)
|
642
|
+
}
|
643
|
+
|
644
|
+
# create a temp cacert bundle
|
645
|
+
ssl_file = tmpfile('systemstore')
|
646
|
+
File.write(ssl_file, unknown_server.ca_cert.to_pem)
|
647
|
+
|
648
|
+
unknown_server.start_server(response_proc: response_proc) do |https_port|
|
649
|
+
Puppet[:reporturl] = "https://127.0.0.1:#{https_port}/reports/upload"
|
650
|
+
|
651
|
+
# override path to system cacert bundle, this must be done before
|
652
|
+
# the SSLContext is created and the call to X509::Store.set_default_paths
|
653
|
+
Puppet::Util.withenv("SSL_CERT_FILE" => ssl_file) do
|
654
|
+
expect {
|
655
|
+
apply.command_line.args = ['-e', 'notify { "hi": }']
|
656
|
+
apply.run
|
657
|
+
}.to exit_with(0)
|
658
|
+
.and output(/Applied catalog/).to_stdout
|
659
|
+
end
|
660
|
+
|
661
|
+
expect(report).to be_a(Puppet::Transaction::Report)
|
662
|
+
expect(report.resource_statuses['Notify[hi]']).to be_a(Puppet::Resource::Status)
|
663
|
+
end
|
664
|
+
end
|
665
|
+
end
|
537
666
|
end
|