puppet 6.17.0-x64-mingw32 → 6.21.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +38 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +20 -21
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +88 -38
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -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_system/file_impl.rb +3 -3
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- 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 +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/file_metadata/http.rb +1 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +90 -13
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- 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/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +19 -15
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +67 -1
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +3 -3
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +55 -8
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +63 -21
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +12 -8
- data/lib/puppet/trusted_external.rb +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +28 -8
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +10 -15
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +342 -312
- data/man/man5/puppet.conf.5 +53 -18
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- 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 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- 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/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +208 -55
- data/spec/integration/application/apply_spec.rb +168 -149
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +70 -21
- 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 +53 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- 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 +0 -10
- data/spec/integration/util/windows/user_spec.rb +7 -0
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +3 -5
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +41 -10
- data/spec/unit/application/filebucket_spec.rb +0 -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/application_spec.rb +60 -13
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer_spec.rb +86 -37
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +10 -3
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- 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_helper_spec.rb +11 -4
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/client_spec.rb +0 -1
- data/spec/unit/http/resolver_spec.rb +24 -5
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +51 -3
- data/spec/unit/http/service/file_server_spec.rb +2 -3
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +1 -2
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +85 -3
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -6
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +28 -0
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +36 -3
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +49 -50
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- 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 -51
- 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/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/face/module_spec.rb +0 -3
- data/spec/unit/man_spec.rb +0 -31
@@ -0,0 +1,30 @@
|
|
1
|
+
concurrent-ruby (1.1.5)
|
2
|
+
|
3
|
+
deep_merge (1.0.1)
|
4
|
+
|
5
|
+
fast_gettext (1.1.2)
|
6
|
+
|
7
|
+
gettext (3.2.2)
|
8
|
+
|
9
|
+
hiera-eyaml (3.2.0)
|
10
|
+
|
11
|
+
highline (1.6.21)
|
12
|
+
|
13
|
+
hocon (1.3.1, 1.2.5)
|
14
|
+
|
15
|
+
locale (2.1.3, 2.1.2)
|
16
|
+
|
17
|
+
multi_json (1.14.1)
|
18
|
+
|
19
|
+
optimist (3.0.1)
|
20
|
+
|
21
|
+
puppet-resource_api (1.8.13)
|
22
|
+
|
23
|
+
puppetserver-ca (1.8.0)
|
24
|
+
|
25
|
+
semantic_puppet (1.0.2)
|
26
|
+
|
27
|
+
text (1.3.1)
|
28
|
+
|
29
|
+
world_airports (1.1.3)
|
30
|
+
|
@@ -15,21 +15,17 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
15
15
|
let(:formatter) { Puppet::Network::FormatHandler.format(:rich_data_json) }
|
16
16
|
|
17
17
|
context 'server_list' do
|
18
|
-
before :each do
|
19
|
-
Puppet[:log_level] = 'debug'
|
20
|
-
end
|
21
|
-
|
22
18
|
it "uses the first server in the list" do
|
23
19
|
Puppet[:server_list] = '127.0.0.1'
|
20
|
+
Puppet[:log_level] = 'debug'
|
24
21
|
|
25
22
|
server.start_server do |port|
|
26
|
-
Puppet[:
|
23
|
+
Puppet[:serverport] = port
|
27
24
|
expect {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
}.to output(%r{HTTP GET https://127.0.0.1:#{port}/status/v1/simple/master returned 200 OK}).to_stdout
|
25
|
+
agent.command_line.args << '--test'
|
26
|
+
agent.run
|
27
|
+
}.to exit_with(0)
|
28
|
+
.and output(%r{HTTP GET https://127.0.0.1:#{port}/status/v1/simple/master returned 200 OK}).to_stdout
|
33
29
|
end
|
34
30
|
end
|
35
31
|
|
@@ -37,16 +33,17 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
37
33
|
Puppet[:server_list] = "puppet.example.com,#{Puppet[:server]}"
|
38
34
|
|
39
35
|
server.start_server do |port|
|
40
|
-
Puppet[:
|
36
|
+
Puppet[:serverport] = port
|
41
37
|
expect {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
agent.command_line.args << '--test'
|
39
|
+
agent.run
|
40
|
+
}.to exit_with(0)
|
41
|
+
.and output(%r{Notice: Applied catalog}).to_stdout
|
42
|
+
.and output(%r{Unable to connect to server from server_list setting: Request to https://puppet.example.com:#{port}/status/v1/simple/master failed}).to_stderr
|
47
43
|
|
48
44
|
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
49
45
|
expect(report.master_used).to eq("127.0.0.1:#{port}")
|
46
|
+
expect(report.server_used).to eq("127.0.0.1:#{port}")
|
50
47
|
end
|
51
48
|
end
|
52
49
|
|
@@ -54,36 +51,37 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
54
51
|
Puppet[:server_list] = "puppet.example.com"
|
55
52
|
|
56
53
|
expect {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
}.to output(%r{Unable to connect to server from server_list setting: Could not select a functional puppet master from server_list: 'puppet.example.com'}).to_stdout
|
63
|
-
}.to output(/Error: Could not run Puppet configuration client: Could not select a functional puppet master from server_list: 'puppet.example.com'/).to_stderr
|
54
|
+
agent.command_line.args << '--test'
|
55
|
+
agent.run
|
56
|
+
}.to exit_with(1)
|
57
|
+
.and output(a_string_matching(%r{Unable to connect to server from server_list setting})
|
58
|
+
.and matching(/Error: Could not run Puppet configuration client: Could not select a functional puppet server from server_list: 'puppet.example.com'/)).to_stderr
|
64
59
|
|
65
60
|
# I'd expect puppet to update the last run report even if the server_list was
|
66
61
|
# exhausted, but it doesn't work that way currently, see PUP-6708
|
67
62
|
expect(File).to_not be_exist(Puppet[:lastrunreport])
|
68
63
|
end
|
69
64
|
|
70
|
-
it "omits
|
65
|
+
it "omits server_used when not using server_list" do
|
66
|
+
Puppet[:log_level] = 'debug'
|
67
|
+
|
71
68
|
server.start_server do |port|
|
72
|
-
Puppet[:
|
69
|
+
Puppet[:serverport] = port
|
73
70
|
expect {
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
}.to output(%r{Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
|
71
|
+
agent.command_line.args << '--test'
|
72
|
+
agent.run
|
73
|
+
}.to exit_with(0)
|
74
|
+
.and output(%r{Resolved service 'puppet' to https://127.0.0.1:#{port}/puppet/v3}).to_stdout
|
79
75
|
end
|
80
76
|
|
81
77
|
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
82
78
|
expect(report.master_used).to be_nil
|
79
|
+
expect(report.server_used).to be_nil
|
83
80
|
end
|
84
81
|
|
85
82
|
it "server_list takes precedence over server" do
|
86
83
|
Puppet[:server] = 'notvalid.example.com'
|
84
|
+
Puppet[:log_level] = 'debug'
|
87
85
|
|
88
86
|
server.start_server do |port|
|
89
87
|
Puppet[:server_list] = "127.0.0.1:#{port}"
|
@@ -96,15 +94,16 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
96
94
|
|
97
95
|
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
98
96
|
expect(report.master_used).to eq("127.0.0.1:#{port}")
|
97
|
+
expect(report.server_used).to eq("127.0.0.1:#{port}")
|
99
98
|
end
|
100
99
|
end
|
101
100
|
end
|
102
101
|
|
103
102
|
context 'rich data' do
|
104
|
-
it "
|
103
|
+
it "calls a deferred 4x function" do
|
105
104
|
catalog_handler = -> (req, res) {
|
106
105
|
catalog = compile_to_catalog(<<-MANIFEST, node)
|
107
|
-
notify { '
|
106
|
+
notify { 'deferred4x':
|
108
107
|
message => Deferred('join', [[1,2,3], ':'])
|
109
108
|
}
|
110
109
|
MANIFEST
|
@@ -114,13 +113,71 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
114
113
|
}
|
115
114
|
|
116
115
|
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
117
|
-
Puppet[:
|
116
|
+
Puppet[:serverport] = port
|
118
117
|
expect {
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
118
|
+
agent.command_line.args << '--test'
|
119
|
+
agent.run
|
120
|
+
}.to exit_with(2)
|
121
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred4x\]/message: defined 'message' as '1:2:3'}).to_stdout
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it "calls a deferred 3x function" do
|
126
|
+
catalog_handler = -> (req, res) {
|
127
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
128
|
+
notify { 'deferred3x':
|
129
|
+
message => Deferred('sprintf', ['%s', 'I am deferred'])
|
130
|
+
}
|
131
|
+
MANIFEST
|
132
|
+
|
133
|
+
res.body = formatter.render(catalog)
|
134
|
+
res['Content-Type'] = formatter.mime
|
135
|
+
}
|
136
|
+
|
137
|
+
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
138
|
+
Puppet[:serverport] = port
|
139
|
+
expect {
|
140
|
+
agent.command_line.args << '--test'
|
141
|
+
agent.run
|
142
|
+
}.to exit_with(2)
|
143
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred3x\]/message: defined 'message' as 'I am deferred'}).to_stdout
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
it "re-evaluates a deferred function in a cached catalog" do
|
148
|
+
Puppet[:report] = false
|
149
|
+
Puppet[:use_cached_catalog] = true
|
150
|
+
Puppet[:usecacheonfailure] = false
|
151
|
+
|
152
|
+
catalog_dir = File.join(Puppet[:client_datadir], 'catalog')
|
153
|
+
Puppet::FileSystem.mkpath(catalog_dir)
|
154
|
+
cached_catalog_path = "#{File.join(catalog_dir, Puppet[:certname])}.json"
|
155
|
+
|
156
|
+
# our catalog contains a deferred function that calls `binary_file`
|
157
|
+
# to read `source`. The function returns a Binary object, whose
|
158
|
+
# base64 value is printed to stdout
|
159
|
+
source = tmpfile('deferred_source')
|
160
|
+
catalog = File.read(my_fixture('cached_deferred_catalog.json'))
|
161
|
+
catalog.gsub!('__SOURCE_PATH__', source)
|
162
|
+
File.write(cached_catalog_path, catalog)
|
163
|
+
|
164
|
+
# verify we get a different result each time the deferred function
|
165
|
+
# is evaluated, and reads `source`.
|
166
|
+
{
|
167
|
+
'1234' => 'MTIzNA==',
|
168
|
+
'5678' => 'NTY3OA=='
|
169
|
+
}.each_pair do |content, base64|
|
170
|
+
File.write(source, content)
|
171
|
+
|
172
|
+
expect {
|
173
|
+
agent.command_line.args << '-t'
|
174
|
+
agent.run
|
175
|
+
|
176
|
+
}.to exit_with(2)
|
177
|
+
.and output(/Notice: #{base64}/).to_stdout
|
178
|
+
|
179
|
+
# reset state so we can run again
|
180
|
+
Puppet::Application.clear!
|
124
181
|
end
|
125
182
|
end
|
126
183
|
|
@@ -137,13 +194,12 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
137
194
|
}
|
138
195
|
|
139
196
|
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
140
|
-
Puppet[:
|
197
|
+
Puppet[:serverport] = port
|
141
198
|
expect {
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
}.to output(a_string_matching(
|
199
|
+
agent.command_line.args << '--test'
|
200
|
+
agent.run
|
201
|
+
}.to exit_with(2)
|
202
|
+
.and output(a_string_matching(
|
147
203
|
/Notice: Sensitive \[value redacted\]/
|
148
204
|
).and matching(
|
149
205
|
/Notify\[sensitive\]\/message: changed \[redacted\] to \[redacted\]/
|
@@ -202,7 +258,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
202
258
|
}
|
203
259
|
|
204
260
|
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
205
|
-
Puppet[:
|
261
|
+
Puppet[:serverport] = port
|
206
262
|
expect {
|
207
263
|
expect {
|
208
264
|
agent.command_line.args << '--test'
|
@@ -247,13 +303,12 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
247
303
|
}
|
248
304
|
|
249
305
|
server.start_server(mounts: mounts) do |port|
|
250
|
-
Puppet[:
|
306
|
+
Puppet[:serverport] = port
|
251
307
|
expect {
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
}.to output(/content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}4cf49285ae567157ebfba72bd04ccf32'/).to_stdout
|
308
|
+
agent.command_line.args << '--test'
|
309
|
+
agent.run
|
310
|
+
}.to exit_with(2)
|
311
|
+
.and output(/content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}4cf49285ae567157ebfba72bd04ccf32'/).to_stdout
|
257
312
|
|
258
313
|
# verify puppet restored binary content
|
259
314
|
expect(File.binread(path)).to eq(binary_content)
|
@@ -296,7 +351,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
296
351
|
}
|
297
352
|
|
298
353
|
server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
|
299
|
-
Puppet[:
|
354
|
+
Puppet[:serverport] = puppetserver_port
|
300
355
|
|
301
356
|
# override path to system cacert bundle, this must be done before
|
302
357
|
# the SSLContext is created and the call to X509::Store.set_default_paths
|
@@ -348,7 +403,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
348
403
|
}
|
349
404
|
|
350
405
|
server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
|
351
|
-
Puppet[:
|
406
|
+
Puppet[:serverport] = puppetserver_port
|
352
407
|
|
353
408
|
# override path to system cacert bundle, this must be done before
|
354
409
|
# the SSLContext is created and the call to X509::Store.set_default_paths
|
@@ -399,7 +454,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
399
454
|
}
|
400
455
|
|
401
456
|
server.start_server(mounts: {catalog: catalog_handler}) do |puppetserver_port|
|
402
|
-
Puppet[:
|
457
|
+
Puppet[:serverport] = puppetserver_port
|
403
458
|
|
404
459
|
# set path to external cacert bundle, this must be done before
|
405
460
|
# the SSLContext is created
|
@@ -439,7 +494,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
439
494
|
it "waits for other agent run to finish before starting" do
|
440
495
|
server.start_server do |port|
|
441
496
|
path = Puppet[:agent_catalog_run_lockfile]
|
442
|
-
Puppet[:
|
497
|
+
Puppet[:serverport] = port
|
443
498
|
Puppet[:waitforlock] = 1
|
444
499
|
|
445
500
|
th = Thread.new {
|
@@ -480,4 +535,102 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
480
535
|
th.kill # kill thread so we don't wait too much
|
481
536
|
end
|
482
537
|
end
|
538
|
+
|
539
|
+
context 'cached catalogs' do
|
540
|
+
it 'falls back to a cached catalog' do
|
541
|
+
catalog_handler = -> (req, res) {
|
542
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
543
|
+
notify { 'a message': }
|
544
|
+
MANIFEST
|
545
|
+
|
546
|
+
res.body = formatter.render(catalog)
|
547
|
+
res['Content-Type'] = formatter.mime
|
548
|
+
}
|
549
|
+
|
550
|
+
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
551
|
+
Puppet[:serverport] = port
|
552
|
+
expect {
|
553
|
+
agent.command_line.args << '--test'
|
554
|
+
agent.run
|
555
|
+
}.to exit_with(2)
|
556
|
+
.and output(%r{Caching catalog for #{Puppet[:certname]}}).to_stdout
|
557
|
+
end
|
558
|
+
|
559
|
+
# reset state so we can run again
|
560
|
+
Puppet::Application.clear!
|
561
|
+
|
562
|
+
# --test above turns off `usecacheonfailure` so re-enable here
|
563
|
+
Puppet[:usecacheonfailure] = true
|
564
|
+
|
565
|
+
# run agent without server
|
566
|
+
expect {
|
567
|
+
agent.command_line.args << '--no-daemonize' << '--onetime' << '--server' << '127.0.0.1'
|
568
|
+
agent.run
|
569
|
+
}.to exit_with(2)
|
570
|
+
.and output(a_string_matching(
|
571
|
+
/Using cached catalog from environment 'production'/
|
572
|
+
).and matching(
|
573
|
+
/Notify\[a message\]\/message:/
|
574
|
+
)).to_stdout
|
575
|
+
.and output(/the agent run will continue/).to_stderr
|
576
|
+
end
|
577
|
+
|
578
|
+
it 'preserves the old cached catalog if validation fails with the old one' do
|
579
|
+
catalog_handler = -> (req, res) {
|
580
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
581
|
+
exec { 'unqualified_command': }
|
582
|
+
MANIFEST
|
583
|
+
|
584
|
+
res.body = formatter.render(catalog)
|
585
|
+
res['Content-Type'] = formatter.mime
|
586
|
+
}
|
587
|
+
|
588
|
+
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
589
|
+
Puppet[:serverport] = port
|
590
|
+
expect {
|
591
|
+
agent.command_line.args << '--test'
|
592
|
+
agent.run
|
593
|
+
}.to exit_with(1)
|
594
|
+
.and output(/Using configured environment/).to_stdout
|
595
|
+
.and output(%r{Validation of Exec\[unqualified_command\] failed: 'unqualified_command' is not qualified and no path was specified}).to_stderr
|
596
|
+
end
|
597
|
+
|
598
|
+
# cached catalog should not be updated
|
599
|
+
cached_catalog = "#{File.join(Puppet[:client_datadir], 'catalog', Puppet[:certname])}.json"
|
600
|
+
expect(File).to_not be_exist(cached_catalog)
|
601
|
+
end
|
602
|
+
end
|
603
|
+
|
604
|
+
context "reporting" do
|
605
|
+
it "stores a finalized report" do
|
606
|
+
catalog_handler = -> (req, res) {
|
607
|
+
catalog = compile_to_catalog(<<-MANIFEST, node)
|
608
|
+
notify { 'foo':
|
609
|
+
require => Notify['bar']
|
610
|
+
}
|
611
|
+
|
612
|
+
notify { 'bar':
|
613
|
+
require => Notify['foo']
|
614
|
+
}
|
615
|
+
MANIFEST
|
616
|
+
|
617
|
+
res.body = formatter.render(catalog)
|
618
|
+
res['Content-Type'] = formatter.mime
|
619
|
+
}
|
620
|
+
|
621
|
+
server.start_server(mounts: {catalog: catalog_handler}) do |port|
|
622
|
+
Puppet[:serverport] = port
|
623
|
+
expect {
|
624
|
+
agent.command_line.args << '--test'
|
625
|
+
agent.run
|
626
|
+
}.to exit_with(1)
|
627
|
+
.and output(%r{Applying configuration}).to_stdout
|
628
|
+
.and output(%r{Found 1 dependency cycle}).to_stderr
|
629
|
+
|
630
|
+
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
631
|
+
expect(report.status).to eq("failed")
|
632
|
+
expect(report.metrics).to_not be_empty
|
633
|
+
end
|
634
|
+
end
|
635
|
+
end
|
483
636
|
end
|
@@ -6,6 +6,8 @@ require 'puppet_spec/https'
|
|
6
6
|
describe "apply", unless: Puppet::Util::Platform.jruby? do
|
7
7
|
include PuppetSpec::Files
|
8
8
|
|
9
|
+
let(:apply) { Puppet::Application[:apply] }
|
10
|
+
|
9
11
|
before :each do
|
10
12
|
Puppet[:reports] = "none"
|
11
13
|
# Let exceptions be raised instead of exiting
|
@@ -19,76 +21,51 @@ describe "apply", unless: Puppet::Util::Platform.jruby? do
|
|
19
21
|
resource = Puppet::Resource.new(:file, file_to_create, :parameters => {:content => "my stuff"})
|
20
22
|
catalog.add_resource resource
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
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
|
28
28
|
|
29
29
|
expect(Puppet::FileSystem.exist?(file_to_create)).to be_truthy
|
30
30
|
expect(File.read(file_to_create)).to eq("my stuff")
|
31
31
|
end
|
32
32
|
|
33
|
-
context '
|
34
|
-
|
35
|
-
|
36
|
-
let!(:envdir) { tmpdir('environments') }
|
33
|
+
context 'and pcore types are available' do
|
34
|
+
let(:envdir) { my_fixture('environments') }
|
37
35
|
let(:env_name) { 'spec' }
|
38
|
-
let(:dir_structure) {
|
39
|
-
{
|
40
|
-
'.resource_types' => {
|
41
|
-
'applytest.pp' => <<-CODE
|
42
|
-
Puppet::Resource::ResourceType3.new(
|
43
|
-
'applytest',
|
44
|
-
[Puppet::Resource::Param.new(String, 'message')],
|
45
|
-
[Puppet::Resource::Param.new(String, 'name', true)])
|
46
|
-
CODE
|
47
|
-
},
|
48
|
-
'modules' => {
|
49
|
-
'amod' => {
|
50
|
-
'lib' => {
|
51
|
-
'puppet' => {
|
52
|
-
'type' => { 'applytest.rb' => <<-CODE
|
53
|
-
Puppet::Type.newtype(:applytest) do
|
54
|
-
newproperty(:message) do
|
55
|
-
def sync
|
56
|
-
Puppet.send(@resource[:loglevel], self.should)
|
57
|
-
end
|
58
36
|
|
59
|
-
|
60
|
-
|
61
|
-
|
37
|
+
before(:each) do
|
38
|
+
Puppet[:environmentpath] = envdir
|
39
|
+
Puppet[:environment] = env_name
|
40
|
+
end
|
62
41
|
|
63
|
-
|
64
|
-
|
65
|
-
|
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': }" ]
|
66
45
|
|
67
|
-
|
68
|
-
|
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
|
69
56
|
|
70
|
-
|
71
|
-
|
72
|
-
Puppet.notice('the Puppet::Type says hello')
|
73
|
-
isnamevar
|
74
|
-
end
|
75
|
-
end
|
76
|
-
CODE
|
77
|
-
}
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
83
|
-
}
|
57
|
+
context 'from environment with a pcore defined resource type' do
|
58
|
+
include PuppetSpec::Compiler
|
84
59
|
|
60
|
+
let(:envdir) { my_fixture('environments') }
|
61
|
+
let(:env_name) { 'spec' }
|
85
62
|
let(:environments) { Puppet::Environments::Directories.new(envdir, []) }
|
86
63
|
let(:env) { Puppet::Node::Environment.create(:'spec', [File.join(envdir, 'spec', 'modules')]) }
|
87
64
|
let(:node) { Puppet::Node.new('test', :environment => env) }
|
65
|
+
|
88
66
|
around(:each) do |example|
|
89
67
|
Puppet::Type.rmtype(:applytest)
|
90
68
|
Puppet[:environment] = env_name
|
91
|
-
dir_contained_in(envdir, env_name => dir_structure)
|
92
69
|
Puppet.override(:environments => environments, :current_environment => env) do
|
93
70
|
example.run
|
94
71
|
end
|
@@ -96,12 +73,13 @@ end
|
|
96
73
|
|
97
74
|
it 'does not load the pcore type' do
|
98
75
|
catalog = compile_to_catalog('applytest { "applytest was here":}', node)
|
99
|
-
apply =
|
100
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
76
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
101
77
|
|
102
78
|
Puppet[:environmentpath] = envdir
|
103
79
|
expect_any_instance_of(Puppet::Pops::Loader::Runtime3TypeLoader).not_to receive(:find)
|
104
|
-
expect {
|
80
|
+
expect {
|
81
|
+
apply.run
|
82
|
+
}.to output(/the Puppet::Type says hello.*applytest was here/m).to_stdout
|
105
83
|
end
|
106
84
|
|
107
85
|
# Test just to verify that the Pcore Resource Type and not the Ruby one is produced when the catalog is produced
|
@@ -113,7 +91,9 @@ end
|
|
113
91
|
|
114
92
|
expect(compiler.loaders.runtime3_type_loader.instance_variable_get(:@resource_3x_loader)).to receive(:set_entry).once.with(tn, rt, instance_of(String))
|
115
93
|
.and_return(Puppet::Pops::Loader::Loader::NamedEntry.new(tn, rt, nil))
|
116
|
-
expect {
|
94
|
+
expect {
|
95
|
+
compiler.compile
|
96
|
+
}.not_to output(/the Puppet::Type says hello/).to_stdout
|
117
97
|
end
|
118
98
|
|
119
99
|
it "does not fail when pcore type is loaded twice" do
|
@@ -226,36 +206,36 @@ end
|
|
226
206
|
catalog = compile_to_catalog('include mod', node)
|
227
207
|
|
228
208
|
Puppet[:environment] = env_name
|
229
|
-
apply =
|
230
|
-
|
231
|
-
expect {
|
232
|
-
|
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
|
233
214
|
end
|
234
215
|
end
|
235
216
|
|
236
|
-
it "
|
217
|
+
it "raises if the environment directory does not exist" do
|
237
218
|
manifest = file_containing("manifest.pp", "notice('it was applied')")
|
219
|
+
apply.command_line.args = [manifest]
|
238
220
|
|
239
221
|
special = Puppet::Node::Environment.create(:special, [])
|
240
222
|
Puppet.override(:current_environment => special) do
|
241
223
|
Puppet[:environment] = 'special'
|
242
|
-
|
243
|
-
|
244
|
-
|
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/)
|
245
228
|
end
|
246
|
-
|
247
|
-
expect(@logs.map(&:to_s)).to include('it was applied')
|
248
229
|
end
|
249
230
|
|
250
231
|
it "adds environment to the $server_facts variable" do
|
251
232
|
manifest = file_containing("manifest.pp", "notice(\"$server_facts\")")
|
233
|
+
apply.command_line.args = [manifest]
|
252
234
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
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
|
259
239
|
end
|
260
240
|
|
261
241
|
it "applies a given file even when an ENC is configured", :unless => Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
|
@@ -271,48 +251,36 @@ end
|
|
271
251
|
Puppet[:environment] = 'special'
|
272
252
|
Puppet[:node_terminus] = 'exec'
|
273
253
|
Puppet[:external_nodes] = enc
|
274
|
-
|
275
|
-
|
276
|
-
|
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
|
277
259
|
end
|
278
|
-
|
279
|
-
expect(@logs.map(&:to_s)).to include('specific manifest applied')
|
280
260
|
end
|
281
261
|
|
282
262
|
context "handles errors" do
|
283
263
|
it "logs compile errors once" do
|
284
|
-
|
285
|
-
|
286
|
-
apply.options[:code] = '08'
|
287
|
-
|
288
|
-
msg = 'valid octal'
|
289
|
-
callback = Proc.new do |actual|
|
290
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
291
|
-
end
|
292
|
-
|
293
|
-
expect do
|
264
|
+
apply.command_line.args = ['-e', '08']
|
265
|
+
expect {
|
294
266
|
apply.run
|
295
|
-
|
267
|
+
}.to exit_with(1)
|
268
|
+
.and output(/Not a valid octal number/).to_stderr
|
296
269
|
end
|
297
270
|
|
298
271
|
it "logs compile post processing errors once" do
|
299
|
-
Puppet.initialize_settings([])
|
300
|
-
apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => []))
|
301
272
|
path = File.expand_path('/tmp/content_file_test.Q634Dlmtime')
|
302
|
-
apply.
|
273
|
+
apply.command_line.args = ['-e', "file { '#{path}':
|
303
274
|
content => 'This is the test file content',
|
304
275
|
ensure => present,
|
305
276
|
checksum => mtime
|
306
|
-
}"
|
307
|
-
|
308
|
-
msg = 'You cannot specify content when using checksum'
|
309
|
-
callback = Proc.new do |actual|
|
310
|
-
expect(actual.scan(Regexp.new(msg))).to eq([msg])
|
311
|
-
end
|
277
|
+
}"]
|
312
278
|
|
313
|
-
expect
|
279
|
+
expect {
|
314
280
|
apply.run
|
315
|
-
|
281
|
+
}.to exit_with(1)
|
282
|
+
.and output(/Compiled catalog/).to_stdout
|
283
|
+
.and output(/You cannot specify content when using checksum/).to_stderr
|
316
284
|
end
|
317
285
|
end
|
318
286
|
|
@@ -337,51 +305,42 @@ end
|
|
337
305
|
Puppet[:environmentpath] = envdir
|
338
306
|
end
|
339
307
|
|
340
|
-
|
341
|
-
|
342
|
-
puppet = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => args))
|
343
|
-
puppet.options[:code] = execute
|
344
|
-
return puppet
|
345
|
-
end
|
308
|
+
context "given a modulepath" do
|
309
|
+
let(:args) { ['-e', execute] }
|
346
310
|
|
347
|
-
|
348
|
-
|
311
|
+
before :each do
|
312
|
+
Puppet[:modulepath] = modulepath
|
349
313
|
|
350
|
-
|
351
|
-
|
314
|
+
apply.command_line.args = args
|
315
|
+
end
|
352
316
|
|
353
|
-
|
354
|
-
|
355
|
-
|
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
|
356
322
|
end
|
357
323
|
|
358
|
-
it "looks in
|
359
|
-
args << '--environment' << 'production'
|
360
|
-
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'
|
361
326
|
|
362
|
-
expect
|
363
|
-
|
364
|
-
|
327
|
+
expect {
|
328
|
+
apply.run
|
329
|
+
}.to exit_with(0)
|
330
|
+
.and output(/amod class included/).to_stdout
|
365
331
|
end
|
366
332
|
|
367
|
-
it "looks in
|
368
|
-
|
369
|
-
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)
|
370
335
|
|
371
|
-
expect
|
372
|
-
|
373
|
-
|
336
|
+
expect {
|
337
|
+
apply.run
|
338
|
+
}.to exit_with(0)
|
339
|
+
.and output(/amod class included/).to_stdout
|
374
340
|
end
|
375
341
|
end
|
376
342
|
|
377
|
-
# When executing an ENC script, output cannot be captured using
|
378
|
-
# expect { }.to have_printed(...)
|
379
|
-
# External node script execution will fail, likely due to the tampering
|
380
|
-
# with the basic file descriptors.
|
381
|
-
# Workaround: Define a log destination and merely inspect logs.
|
382
343
|
context "with an ENC" do
|
383
|
-
let(:logdest) { tmpfile('logdest') }
|
384
|
-
let(:args) { ['-e', execute, '--logdest', logdest ] }
|
385
344
|
let(:enc) do
|
386
345
|
script_containing('enc_script',
|
387
346
|
:windows => '@echo environment: spec',
|
@@ -394,17 +353,23 @@ end
|
|
394
353
|
end
|
395
354
|
|
396
355
|
it "should use the environment that the ENC mandates" do
|
397
|
-
apply =
|
398
|
-
|
399
|
-
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
|
400
363
|
end
|
401
364
|
|
402
365
|
it "should prefer the ENC environment over the configured one and emit a warning" do
|
403
|
-
apply =
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
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
|
408
373
|
end
|
409
374
|
end
|
410
375
|
end
|
@@ -475,8 +440,7 @@ class amod::bad_type {
|
|
475
440
|
context 'and the file is not serialized with rich_data' do
|
476
441
|
it 'will notify a string that is the result of Regexp#inspect (from Runtime3xConverter)' do
|
477
442
|
catalog = compile_to_catalog(execute, node)
|
478
|
-
apply =
|
479
|
-
apply.options[:catalog] = file_containing('manifest', catalog.to_json)
|
443
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', catalog.to_json)]
|
480
444
|
expect(apply).to receive(:apply_catalog) do |cat|
|
481
445
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(String)
|
482
446
|
expect(cat.resource(:notify, 'bin')['message']).to be_a(String)
|
@@ -491,8 +455,7 @@ class amod::bad_type {
|
|
491
455
|
|
492
456
|
it 'will notify a string that is the result of to_s on uknown data types' do
|
493
457
|
json = compile_to_catalog('include amod::bad_type', node).to_json
|
494
|
-
apply =
|
495
|
-
apply.options[:catalog] = file_containing('manifest', json)
|
458
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', json)]
|
496
459
|
expect(apply).to receive(:apply_catalog) do |catalog|
|
497
460
|
expect(catalog.resource(:notify, 'bogus')['message']).to be_a(String)
|
498
461
|
end
|
@@ -514,11 +477,10 @@ class amod::bad_type {
|
|
514
477
|
context 'and the file is serialized with rich_data' do
|
515
478
|
it 'will notify a regexp using Regexp#to_s' do
|
516
479
|
catalog = compile_to_catalog(execute, node)
|
517
|
-
apply = Puppet::Application[:apply]
|
518
480
|
serialized_catalog = Puppet.override(rich_data: true) do
|
519
481
|
catalog.to_json
|
520
482
|
end
|
521
|
-
apply.
|
483
|
+
apply.command_line.args = ['--catalog', file_containing('manifest', serialized_catalog)]
|
522
484
|
expect(apply).to receive(:apply_catalog) do |cat|
|
523
485
|
expect(cat.resource(:notify, 'rx')['message']).to be_a(Regexp)
|
524
486
|
# The resource return in this expect is a String, but since it was a Binary type that
|
@@ -541,7 +503,6 @@ class amod::bad_type {
|
|
541
503
|
let(:env_dir) { File.join(Puppet[:environmentpath], env_name) }
|
542
504
|
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(env_dir, 'modules')]) }
|
543
505
|
let(:node) { Puppet::Node.new(Puppet[:certname], environment: environment) }
|
544
|
-
let(:apply) { Puppet::Application[:apply] }
|
545
506
|
|
546
507
|
before :each do
|
547
508
|
Puppet[:environment] = env_name
|
@@ -564,7 +525,7 @@ class amod::bad_type {
|
|
564
525
|
|
565
526
|
expect {
|
566
527
|
apply.command_line.args << manifest
|
567
|
-
|
528
|
+
apply.run
|
568
529
|
}.to exit_with(0)
|
569
530
|
.and output(a_string_matching(
|
570
531
|
/dir1\]\/ensure: created/
|
@@ -579,6 +540,46 @@ class amod::bad_type {
|
|
579
540
|
end
|
580
541
|
end
|
581
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
|
+
|
582
583
|
context 'http report processor' do
|
583
584
|
include_context 'https client'
|
584
585
|
|
@@ -586,7 +587,6 @@ class amod::bad_type {
|
|
586
587
|
Puppet[:reports] = 'http'
|
587
588
|
end
|
588
589
|
|
589
|
-
let(:apply) { Puppet::Application[:apply] }
|
590
590
|
let(:unknown_server) do
|
591
591
|
unknown_ca_cert = cert_fixture('unknown-ca.pem')
|
592
592
|
PuppetSpec::HTTPSServer.new(
|
@@ -663,4 +663,23 @@ class amod::bad_type {
|
|
663
663
|
end
|
664
664
|
end
|
665
665
|
end
|
666
|
+
|
667
|
+
context 'rich data' do
|
668
|
+
it "calls a deferred 4x function" do
|
669
|
+
apply.command_line.args = ['-e', 'notify { "deferred3x": message => Deferred("join", [[1,2,3], ":"]) }']
|
670
|
+
|
671
|
+
expect {
|
672
|
+
apply.run
|
673
|
+
}.to exit_with(0) # for some reason apply returns 0 instead of 2
|
674
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred3x\]/message: defined 'message' as '1:2:3'}).to_stdout
|
675
|
+
end
|
676
|
+
|
677
|
+
it "calls a deferred 3x function" do
|
678
|
+
apply.command_line.args = ['-e', 'notify { "deferred4x": message => Deferred("sprintf", ["%s", "I am deferred"]) }']
|
679
|
+
expect {
|
680
|
+
apply.run
|
681
|
+
}.to exit_with(0) # for some reason apply returns 0 instead of 2
|
682
|
+
.and output(%r{Notice: /Stage\[main\]/Main/Notify\[deferred4x\]/message: defined 'message' as 'I am deferred'}).to_stdout
|
683
|
+
end
|
684
|
+
end
|
666
685
|
end
|