puppet 6.23.0-x86-mingw32 → 6.26.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +4 -4
- data/Gemfile.lock +32 -25
- data/README.md +4 -4
- data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
- data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
- data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
- data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
- data/{ext → examples}/nagios/check_puppet.rb +2 -2
- data/ext/README.md +13 -0
- data/ext/project_data.yaml +1 -0
- data/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +20 -2
- data/lib/puppet/application/filebucket.rb +1 -0
- data/lib/puppet/application/lookup.rb +78 -24
- data/lib/puppet/application/resource.rb +30 -15
- data/lib/puppet/application/ssl.rb +1 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +6 -3
- data/lib/puppet/configurer.rb +134 -56
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +55 -32
- data/lib/puppet/environments.rb +75 -25
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/generate.rb +2 -0
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/node/clean.rb +11 -0
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/file_serving/configuration/parser.rb +2 -0
- data/lib/puppet/file_serving/configuration.rb +3 -0
- data/lib/puppet/file_serving/metadata.rb +3 -0
- data/lib/puppet/file_serving/mount/file.rb +4 -4
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/file_system/file_impl.rb +10 -8
- data/lib/puppet/file_system/jruby.rb +1 -1
- data/lib/puppet/file_system/windows.rb +6 -6
- data/lib/puppet/file_system.rb +1 -1
- data/lib/puppet/forge.rb +4 -4
- data/lib/puppet/functions/empty.rb +8 -0
- data/lib/puppet/functions/find_template.rb +2 -2
- data/lib/puppet/functions/strftime.rb +1 -0
- data/lib/puppet/functions/unwrap.rb +17 -2
- data/lib/puppet/functions/versioncmp.rb +6 -2
- data/lib/puppet/generate/type.rb +9 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/redirector.rb +5 -0
- data/lib/puppet/http/service/compiler.rb +6 -1
- data/lib/puppet/indirector/catalog/compiler.rb +24 -6
- data/lib/puppet/indirector/catalog/rest.rb +1 -0
- data/lib/puppet/indirector/facts/facter.rb +6 -6
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/resource/ral.rb +6 -1
- data/lib/puppet/indirector/terminus.rb +4 -0
- data/lib/puppet/interface/documentation.rb +1 -0
- data/lib/puppet/module/plan.rb +0 -1
- data/lib/puppet/module/task.rb +1 -1
- data/lib/puppet/module.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +12 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/module_tool/errors/shared.rb +17 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +1 -0
- data/lib/puppet/parser/templatewrapper.rb +1 -0
- data/lib/puppet/pops/evaluator/closure.rb +7 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
- data/lib/puppet/pops/model/ast.rb +1 -0
- data/lib/puppet/pops/model/factory.rb +2 -1
- data/lib/puppet/pops/parser/code_merger.rb +4 -4
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +1014 -995
- data/lib/puppet/pops/parser/lexer2.rb +92 -91
- data/lib/puppet/pops/parser/slurp_support.rb +1 -0
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
- data/lib/puppet/pops/types/type_formatter.rb +4 -3
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +16 -4
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/package/pip.rb +15 -3
- data/lib/puppet/provider/package/pkg.rb +19 -2
- data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +3 -0
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +10 -9
- data/lib/puppet/provider/service/launchd.rb +2 -2
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +2 -2
- data/lib/puppet/provider/service/upstart.rb +5 -5
- data/lib/puppet/provider/user/aix.rb +44 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +72 -16
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/reference/providers.rb +2 -2
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +1 -0
- data/lib/puppet/resource.rb +38 -5
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings.rb +32 -9
- data/lib/puppet/ssl/verifier.rb +6 -0
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/persistence.rb +21 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type/exec.rb +35 -5
- data/lib/puppet/type/file/data_sync.rb +1 -1
- data/lib/puppet/type/file/mode.rb +6 -0
- data/lib/puppet/type/file.rb +6 -6
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/service.rb +8 -3
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +40 -39
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/util/command_line.rb +1 -1
- data/lib/puppet/util/filetype.rb +2 -2
- data/lib/puppet/util/json.rb +20 -0
- data/lib/puppet/util/log.rb +8 -4
- data/lib/puppet/util/logging.rb +1 -25
- data/lib/puppet/util/monkey_patches.rb +6 -0
- data/lib/puppet/util/package.rb +25 -16
- data/lib/puppet/util/pidlock.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -2
- data/lib/puppet/util/symbolic_file_mode.rb +29 -17
- data/lib/puppet/util/tagging.rb +1 -0
- data/lib/puppet/util/windows/service.rb +0 -5
- data/lib/puppet/util/windows/sid.rb +3 -1
- data/lib/puppet/util/windows/user.rb +0 -2
- data/lib/puppet/util/windows.rb +3 -0
- data/lib/puppet/util/yaml.rb +21 -2
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +6 -9
- data/locales/puppet.pot +5 -10418
- data/man/man5/puppet.conf.5 +52 -25
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +9 -9
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +8 -8
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +7 -7
- data/man/man8/puppet-lookup.8 +9 -6
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +3 -3
- data/man/man8/puppet-node.8 +5 -5
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +5 -5
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +4 -4
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
- data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
- data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
- data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
- data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
- data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
- data/spec/fixtures/ssl/ca.pem +52 -52
- data/spec/fixtures/ssl/crl.pem +25 -25
- data/spec/fixtures/ssl/ec-key.pem +11 -11
- data/spec/fixtures/ssl/ec.pem +32 -32
- data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
- data/spec/fixtures/ssl/encrypted-key.pem +107 -107
- data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
- data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
- data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
- data/spec/fixtures/ssl/intermediate.pem +51 -51
- data/spec/fixtures/ssl/oid-key.pem +117 -0
- data/spec/fixtures/ssl/oid.pem +69 -0
- data/spec/fixtures/ssl/pluto-key.pem +106 -106
- data/spec/fixtures/ssl/pluto.pem +50 -50
- data/spec/fixtures/ssl/request-key.pem +106 -106
- data/spec/fixtures/ssl/request.pem +45 -45
- data/spec/fixtures/ssl/revoked-key.pem +106 -106
- data/spec/fixtures/ssl/revoked.pem +49 -49
- data/spec/fixtures/ssl/signed-key.pem +106 -106
- data/spec/fixtures/ssl/signed.pem +47 -47
- data/spec/fixtures/ssl/tampered-cert.pem +49 -49
- data/spec/fixtures/ssl/tampered-csr.pem +45 -45
- data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
- data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
- data/spec/fixtures/ssl/unknown-ca.pem +52 -52
- data/spec/fixtures/unit/forge/bacula.json +1 -1
- data/spec/integration/application/agent_spec.rb +141 -37
- data/spec/integration/application/filebucket_spec.rb +16 -0
- data/spec/integration/application/lookup_spec.rb +32 -6
- data/spec/integration/application/module_spec.rb +21 -0
- data/spec/integration/application/resource_spec.rb +35 -1
- data/spec/integration/application/ssl_spec.rb +20 -0
- data/spec/integration/configurer_spec.rb +18 -2
- data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
- data/spec/integration/indirector/facts/facter_spec.rb +93 -39
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- data/spec/integration/parser/pcore_resource_spec.rb +10 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- data/spec/integration/type/exec_spec.rb +70 -45
- data/spec/integration/type/file_spec.rb +2 -2
- data/spec/integration/type/package_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/process_spec.rb +1 -9
- data/spec/lib/puppet/test_ca.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +13 -2
- data/spec/lib/puppet_spec/puppetserver.rb +15 -0
- data/spec/lib/puppet_spec/settings.rb +1 -0
- data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
- data/spec/shared_contexts/l10n.rb +32 -0
- data/spec/spec_helper.rb +1 -10
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/lookup_spec.rb +131 -10
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
- data/spec/unit/configurer_spec.rb +265 -57
- data/spec/unit/defaults_spec.rb +1 -0
- data/spec/unit/environments_spec.rb +184 -0
- data/spec/unit/face/generate_spec.rb +64 -0
- data/spec/unit/facter_impl_spec.rb +31 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
- data/spec/unit/file_serving/configuration_spec.rb +14 -4
- data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
- data/spec/unit/file_system_spec.rb +47 -4
- data/spec/unit/forge/module_release_spec.rb +3 -3
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/empty_spec.rb +10 -0
- data/spec/unit/functions/logging_spec.rb +1 -0
- data/spec/unit/functions/lookup_spec.rb +64 -0
- data/spec/unit/functions/unwrap_spec.rb +8 -0
- data/spec/unit/functions/versioncmp_spec.rb +40 -4
- data/spec/unit/functions4_spec.rb +2 -2
- data/spec/unit/http/client_spec.rb +58 -1
- data/spec/unit/http/service/compiler_spec.rb +8 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
- data/spec/unit/indirector/indirection_spec.rb +10 -3
- data/spec/unit/indirector/resource/ral_spec.rb +40 -75
- data/spec/unit/interface/action_spec.rb +0 -9
- data/spec/unit/module_spec.rb +15 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
- data/spec/unit/network/authstore_spec.rb +0 -15
- data/spec/unit/network/formats_spec.rb +6 -0
- data/spec/unit/node_spec.rb +6 -0
- data/spec/unit/parser/templatewrapper_spec.rb +12 -2
- data/spec/unit/pops/parser/parse_containers_spec.rb +2 -13
- data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
- data/spec/unit/pops/validator/validator_spec.rb +5 -0
- data/spec/unit/provider/package/gem_spec.rb +1 -1
- data/spec/unit/provider/package/pip2_spec.rb +1 -1
- data/spec/unit/provider/package/pip3_spec.rb +1 -1
- data/spec/unit/provider/package/pip_spec.rb +38 -1
- data/spec/unit/provider/package/pkg_spec.rb +29 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
- data/spec/unit/provider/parsedfile_spec.rb +10 -0
- data/spec/unit/provider/service/gentoo_spec.rb +6 -5
- data/spec/unit/provider/service/init_spec.rb +15 -9
- data/spec/unit/provider/service/launchd_spec.rb +11 -0
- data/spec/unit/provider/service/openwrt_spec.rb +21 -29
- data/spec/unit/provider/service/redhat_spec.rb +3 -2
- data/spec/unit/provider/service/systemd_spec.rb +1 -1
- data/spec/unit/provider/user/aix_spec.rb +100 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
- data/spec/unit/provider/user/useradd_spec.rb +43 -2
- data/spec/unit/provider_spec.rb +4 -4
- data/spec/unit/puppet_spec.rb +12 -4
- data/spec/unit/resource/catalog_spec.rb +14 -1
- data/spec/unit/resource_spec.rb +58 -2
- data/spec/unit/settings_spec.rb +97 -56
- data/spec/unit/ssl/certificate_request_spec.rb +8 -14
- data/spec/unit/transaction/persistence_spec.rb +51 -0
- data/spec/unit/type/exec_spec.rb +76 -29
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/service_spec.rb +27 -0
- data/spec/unit/type/tidy_spec.rb +7 -0
- data/spec/unit/type/user_spec.rb +0 -45
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/json_spec.rb +126 -0
- data/spec/unit/util/logging_spec.rb +2 -0
- data/spec/unit/util/windows/sid_spec.rb +39 -4
- data/spec/unit/util/yaml_spec.rb +54 -29
- data/tasks/generate_cert_fixtures.rake +10 -1
- data/tasks/parallel.rake +3 -3
- metadata +52 -96
- data/ext/README.environment +0 -8
- data/ext/dbfix.sql +0 -132
- data/ext/debian/README.Debian +0 -8
- data/ext/debian/README.source +0 -2
- data/ext/debian/TODO.Debian +0 -1
- data/ext/debian/changelog.erb +0 -1122
- data/ext/debian/compat +0 -1
- data/ext/debian/control +0 -144
- data/ext/debian/copyright +0 -339
- data/ext/debian/docs +0 -1
- data/ext/debian/fileserver.conf +0 -41
- data/ext/debian/puppet-common.dirs +0 -13
- data/ext/debian/puppet-common.install +0 -3
- data/ext/debian/puppet-common.lintian-overrides +0 -5
- data/ext/debian/puppet-common.manpages +0 -28
- data/ext/debian/puppet-common.postinst +0 -35
- data/ext/debian/puppet-common.postrm +0 -33
- data/ext/debian/puppet-el.dirs +0 -1
- data/ext/debian/puppet-el.emacsen-install +0 -25
- data/ext/debian/puppet-el.emacsen-remove +0 -11
- data/ext/debian/puppet-el.emacsen-startup +0 -9
- data/ext/debian/puppet-el.install +0 -1
- data/ext/debian/puppet-testsuite.install +0 -2
- data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
- data/ext/debian/puppet.lintian-overrides +0 -3
- data/ext/debian/puppet.logrotate +0 -20
- data/ext/debian/puppet.postinst +0 -20
- data/ext/debian/puppet.postrm +0 -20
- data/ext/debian/puppet.preinst +0 -20
- data/ext/debian/puppetmaster-common.install +0 -2
- data/ext/debian/puppetmaster-common.manpages +0 -2
- data/ext/debian/puppetmaster-common.postinst +0 -6
- data/ext/debian/puppetmaster-passenger.dirs +0 -4
- data/ext/debian/puppetmaster-passenger.postinst +0 -162
- data/ext/debian/puppetmaster-passenger.postrm +0 -61
- data/ext/debian/puppetmaster.README.debian +0 -17
- data/ext/debian/puppetmaster.default +0 -14
- data/ext/debian/puppetmaster.init +0 -137
- data/ext/debian/puppetmaster.lintian-overrides +0 -3
- data/ext/debian/puppetmaster.postinst +0 -20
- data/ext/debian/puppetmaster.postrm +0 -5
- data/ext/debian/puppetmaster.preinst +0 -22
- data/ext/debian/rules +0 -132
- data/ext/debian/source/format +0 -1
- data/ext/debian/source/options +0 -1
- data/ext/debian/vim-puppet.README.Debian +0 -13
- data/ext/debian/vim-puppet.dirs +0 -5
- data/ext/debian/vim-puppet.yaml +0 -7
- data/ext/debian/watch +0 -2
- data/ext/freebsd/puppetd +0 -26
- data/ext/freebsd/puppetmasterd +0 -26
- data/ext/gentoo/conf.d/puppet +0 -5
- data/ext/gentoo/conf.d/puppetmaster +0 -12
- data/ext/gentoo/init.d/puppet +0 -38
- data/ext/gentoo/init.d/puppetmaster +0 -51
- data/ext/gentoo/puppet/fileserver.conf +0 -41
- data/ext/ips/puppet-agent +0 -44
- data/ext/ips/puppet-master +0 -44
- data/ext/ips/puppet.p5m.erb +0 -12
- data/ext/ips/puppetagent.xml +0 -42
- data/ext/ips/puppetmaster.xml +0 -42
- data/ext/ips/rules +0 -19
- data/ext/ips/transforms +0 -34
- data/ext/ldap/puppet.schema +0 -24
- data/ext/logcheck/puppet +0 -23
- data/ext/osx/file_mapping.yaml +0 -33
- data/ext/osx/postflight.erb +0 -109
- data/ext/osx/preflight.erb +0 -52
- data/ext/osx/prototype.plist.erb +0 -38
- data/ext/redhat/fileserver.conf +0 -41
- data/ext/redhat/logrotate +0 -21
- data/ext/redhat/puppet.spec.erb +0 -842
- data/ext/redhat/server.init +0 -128
- data/ext/redhat/server.sysconfig +0 -13
- data/ext/solaris/pkginfo +0 -6
- data/ext/solaris/smf/puppetd.xml +0 -77
- data/ext/solaris/smf/puppetmasterd.xml +0 -77
- data/ext/solaris/smf/svc-puppetd +0 -71
- data/ext/solaris/smf/svc-puppetmasterd +0 -67
- data/ext/suse/puppet.spec +0 -310
- data/ext/suse/server.init +0 -173
- data/ext/yaml_nodes.rb +0 -105
- data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -2,11 +2,27 @@ require 'spec_helper'
|
|
2
2
|
require 'puppet/configurer'
|
3
3
|
|
4
4
|
describe Puppet::Configurer do
|
5
|
+
include PuppetSpec::Files
|
6
|
+
|
5
7
|
before do
|
6
8
|
Puppet[:server] = "puppetmaster"
|
7
9
|
Puppet[:report] = true
|
8
10
|
|
9
11
|
catalog.add_resource(resource)
|
12
|
+
allow_any_instance_of(described_class).to(
|
13
|
+
receive(:valid_server_environment?).and_return(true)
|
14
|
+
)
|
15
|
+
|
16
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
17
|
+
---
|
18
|
+
version:
|
19
|
+
config: 1624882680
|
20
|
+
puppet: #{Puppet.version}
|
21
|
+
application:
|
22
|
+
initial_environment: #{Puppet[:environment]}
|
23
|
+
converged_environment: #{Puppet[:environment]}
|
24
|
+
run_mode: agent
|
25
|
+
SUMMARY
|
10
26
|
end
|
11
27
|
|
12
28
|
let(:node_name) { Puppet[:node_name_value] }
|
@@ -78,10 +94,10 @@ describe Puppet::Configurer do
|
|
78
94
|
configurer.run(:pluginsync => false)
|
79
95
|
end
|
80
96
|
|
81
|
-
it "
|
82
|
-
|
83
|
-
expect(
|
84
|
-
|
97
|
+
it "does not download plugins when specified environment is not vaild on server" do
|
98
|
+
expect(configurer).to receive(:valid_server_environment?).and_return(false)
|
99
|
+
expect(configurer).not_to receive(:download_plugins)
|
100
|
+
configurer.run(:pluginsync => true)
|
85
101
|
end
|
86
102
|
|
87
103
|
it "fails the run if pluginsync fails when usecacheonfailure is false" do
|
@@ -125,7 +141,6 @@ describe Puppet::Configurer do
|
|
125
141
|
it "applies a cached catalog when it can't connect to the master" do
|
126
142
|
error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
|
127
143
|
|
128
|
-
expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
|
129
144
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
|
130
145
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
|
131
146
|
|
@@ -461,7 +476,7 @@ describe Puppet::Configurer do
|
|
461
476
|
it "should save the report if reporting is enabled" do
|
462
477
|
Puppet.settings[:report] = true
|
463
478
|
|
464
|
-
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash))
|
479
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash)).twice
|
465
480
|
configurer.send_report(report)
|
466
481
|
end
|
467
482
|
|
@@ -489,12 +504,22 @@ describe Puppet::Configurer do
|
|
489
504
|
it "should log but not fail if saving the report fails" do
|
490
505
|
Puppet.settings[:report] = true
|
491
506
|
|
492
|
-
expect(Puppet::Transaction::Report.indirection).to receive(:save).and_raise("whatever")
|
507
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
|
508
|
+
expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true))
|
493
509
|
|
494
510
|
configurer.send_report(report)
|
495
511
|
|
496
512
|
expect(@logs).to include(an_object_having_attributes(level: :err, message: 'Could not send report: whatever'))
|
497
513
|
end
|
514
|
+
|
515
|
+
it "should save the cached report if fails to send the report" do
|
516
|
+
allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true)).and_call_original
|
517
|
+
allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
|
518
|
+
|
519
|
+
expect(File).to_not be_exist(Puppet[:lastrunfile])
|
520
|
+
configurer.send_report(report)
|
521
|
+
expect(File.read(Puppet[:lastrunfile])).to match(/puppet: #{Puppet::PUPPETVERSION}/)
|
522
|
+
end
|
498
523
|
end
|
499
524
|
|
500
525
|
describe "when saving the summary report file" do
|
@@ -553,24 +578,6 @@ describe Puppet::Configurer do
|
|
553
578
|
end
|
554
579
|
end
|
555
580
|
|
556
|
-
describe "when requesting a node" do
|
557
|
-
it "uses the transaction uuid in the request" do
|
558
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: anything)).twice
|
559
|
-
configurer.run
|
560
|
-
end
|
561
|
-
|
562
|
-
it "sends an explicitly configured environment request" do
|
563
|
-
expect(Puppet.settings).to receive(:set_by_config?).with(:environment).and_return(true)
|
564
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: Puppet[:environment])).twice
|
565
|
-
configurer.run
|
566
|
-
end
|
567
|
-
|
568
|
-
it "does not send a configured_environment when using the default" do
|
569
|
-
expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: nil)).twice
|
570
|
-
configurer.run
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
581
|
def expects_pluginsync
|
575
582
|
metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
|
576
583
|
stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
|
@@ -581,7 +588,7 @@ describe Puppet::Configurer do
|
|
581
588
|
end
|
582
589
|
|
583
590
|
def expects_new_catalog_only(catalog)
|
584
|
-
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
591
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
|
585
592
|
expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
|
586
593
|
end
|
587
594
|
|
@@ -598,7 +605,7 @@ describe Puppet::Configurer do
|
|
598
605
|
def expects_fallback_to_new_catalog(catalog)
|
599
606
|
expects_pluginsync
|
600
607
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
|
601
|
-
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
|
608
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
|
602
609
|
end
|
603
610
|
|
604
611
|
def expects_neither_new_or_cached_catalog
|
@@ -622,21 +629,13 @@ describe Puppet::Configurer do
|
|
622
629
|
configurer.run
|
623
630
|
end
|
624
631
|
|
625
|
-
it "should not
|
626
|
-
expect(Puppet::Node.indirection).not_to receive(:find)
|
632
|
+
it "should not pluginsync when a cached catalog is successfully retrieved" do
|
627
633
|
expects_cached_catalog_only(catalog)
|
628
634
|
expect(configurer).not_to receive(:download_plugins)
|
629
635
|
|
630
636
|
configurer.run
|
631
637
|
end
|
632
638
|
|
633
|
-
it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
|
634
|
-
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
635
|
-
expects_fallback_to_new_catalog(catalog)
|
636
|
-
|
637
|
-
configurer.run
|
638
|
-
end
|
639
|
-
|
640
639
|
it "should set its cached_catalog_status to 'explicitly_requested'" do
|
641
640
|
expects_cached_catalog_only(catalog)
|
642
641
|
|
@@ -668,7 +667,6 @@ describe Puppet::Configurer do
|
|
668
667
|
end
|
669
668
|
|
670
669
|
it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
|
671
|
-
expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
|
672
670
|
expects_neither_new_or_cached_catalog
|
673
671
|
expects_pluginsync
|
674
672
|
|
@@ -724,16 +722,6 @@ describe Puppet::Configurer do
|
|
724
722
|
Puppet.settings[:strict_environment_mode] = true
|
725
723
|
end
|
726
724
|
|
727
|
-
it "should not make a node request" do
|
728
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
|
729
|
-
stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
|
730
|
-
expects_new_catalog_only(catalog)
|
731
|
-
|
732
|
-
expect(Puppet::Node.indirection).not_to receive(:find)
|
733
|
-
|
734
|
-
configurer.run
|
735
|
-
end
|
736
|
-
|
737
725
|
it "should return nil when the catalog's environment doesn't match the agent specified environment" do
|
738
726
|
Puppet[:environment] = 'second_env'
|
739
727
|
configurer = Puppet::Configurer.new
|
@@ -767,7 +755,7 @@ describe Puppet::Configurer do
|
|
767
755
|
expect(configurer.run).to be_nil
|
768
756
|
end
|
769
757
|
|
770
|
-
it "should proceed with the cached catalog if its environment
|
758
|
+
it "should proceed with the cached catalog if its environment matches the local environment" do
|
771
759
|
expects_cached_catalog_only(catalog)
|
772
760
|
|
773
761
|
expect(configurer.run).to eq(0)
|
@@ -947,9 +935,23 @@ describe Puppet::Configurer do
|
|
947
935
|
expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
|
948
936
|
|
949
937
|
allow(Puppet).to receive(:notice)
|
938
|
+
allow(Puppet).to receive(:push_context)
|
950
939
|
expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
|
951
940
|
expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
|
952
941
|
|
942
|
+
expect(Puppet).to receive(:push_context).with(
|
943
|
+
hash_including(current_environment: an_object_having_attributes(name: :production)),
|
944
|
+
'Local node environment production for configurer transaction'
|
945
|
+
)
|
946
|
+
expect(Puppet).to receive(:push_context).with(
|
947
|
+
hash_including(current_environment: an_object_having_attributes(name: :apple)),
|
948
|
+
'Local node environment apple for configurer transaction'
|
949
|
+
)
|
950
|
+
expect(Puppet).to receive(:push_context).with(
|
951
|
+
hash_including(current_environment: an_object_having_attributes(name: :banana)),
|
952
|
+
'Local node environment banana for configurer transaction'
|
953
|
+
)
|
954
|
+
|
953
955
|
configurer.run
|
954
956
|
end
|
955
957
|
|
@@ -1107,20 +1109,226 @@ describe Puppet::Configurer do
|
|
1107
1109
|
expect(configurer.run(options)).to eq(0)
|
1108
1110
|
expect(options[:report].server_used).to be_nil
|
1109
1111
|
end
|
1112
|
+
end
|
1110
1113
|
|
1111
|
-
|
1112
|
-
|
1114
|
+
describe "when selecting an environment" do
|
1115
|
+
include PuppetSpec::Settings
|
1113
1116
|
|
1114
|
-
|
1115
|
-
|
1117
|
+
describe "when the last used environment is available" do
|
1118
|
+
let(:last_server_specified_environment) { 'development' }
|
1116
1119
|
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
+
before do
|
1121
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1122
|
+
---
|
1123
|
+
version:
|
1124
|
+
config: 1624882680
|
1125
|
+
puppet: 6.24.0
|
1126
|
+
application:
|
1127
|
+
initial_environment: #{Puppet[:environment]}
|
1128
|
+
converged_environment: #{last_server_specified_environment}
|
1129
|
+
run_mode: agent
|
1130
|
+
SUMMARY
|
1131
|
+
end
|
1120
1132
|
|
1121
|
-
|
1133
|
+
describe "when the use_last_environment is set to true" do
|
1134
|
+
before do
|
1135
|
+
expect(Puppet::Node.indirection).not_to receive(:find)
|
1136
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
it "prefers the environment set via cli" do
|
1140
|
+
Puppet.settings.handlearg('--environment', 'usethis')
|
1141
|
+
configurer.run
|
1142
|
+
|
1143
|
+
expect(configurer.environment).to eq('usethis')
|
1144
|
+
end
|
1145
|
+
|
1146
|
+
it "prefers the environment set via lastrunfile over config" do
|
1147
|
+
FileUtils.mkdir_p(Puppet[:confdir])
|
1148
|
+
set_puppet_conf(Puppet[:confdir], <<~CONF)
|
1149
|
+
[main]
|
1150
|
+
environment = usethis
|
1151
|
+
lastrunfile = #{Puppet[:lastrunfile]}
|
1152
|
+
CONF
|
1153
|
+
|
1154
|
+
Puppet.initialize_settings
|
1155
|
+
configurer.run
|
1156
|
+
|
1157
|
+
expect(configurer.environment).to eq(last_server_specified_environment)
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
it "uses the environment from Puppet[:environment] if given a catalog" do
|
1161
|
+
configurer.run(catalog: catalog)
|
1162
|
+
|
1163
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1164
|
+
end
|
1165
|
+
|
1166
|
+
it "uses the environment from Puppet[:environment] if use_cached_catalog = true" do
|
1167
|
+
Puppet[:use_cached_catalog] = true
|
1168
|
+
expects_cached_catalog_only(catalog)
|
1169
|
+
configurer.run
|
1170
|
+
|
1171
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
describe "when the environment is not set via CLI" do
|
1175
|
+
it "uses the environment found in lastrunfile if the key exists" do
|
1176
|
+
configurer.run
|
1177
|
+
|
1178
|
+
expect(configurer.environment).to eq(last_server_specified_environment)
|
1179
|
+
end
|
1180
|
+
|
1181
|
+
it "pushes the converged environment found in lastrunfile over the existing context" do
|
1182
|
+
initial_env = Puppet::Node::Environment.remote('production')
|
1183
|
+
Puppet.push_context(
|
1184
|
+
current_environment: initial_env,
|
1185
|
+
loaders: Puppet::Pops::Loaders.new(initial_env, true))
|
1186
|
+
|
1187
|
+
expect(Puppet).to receive(:push_context).with(
|
1188
|
+
hash_including(:current_environment, :loaders),
|
1189
|
+
"Local node environment #{last_server_specified_environment} for configurer transaction"
|
1190
|
+
).once.and_call_original
|
1191
|
+
|
1192
|
+
configurer.run
|
1193
|
+
end
|
1194
|
+
|
1195
|
+
it "uses the environment from Puppet[:environment] if strict_environment_mode is set" do
|
1196
|
+
Puppet[:strict_environment_mode] = true
|
1197
|
+
configurer.run
|
1198
|
+
|
1199
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1200
|
+
end
|
1201
|
+
|
1202
|
+
it "uses the environment from Puppet[:environment] if initial_environment is the same as converged_environment" do
|
1203
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1204
|
+
---
|
1205
|
+
version:
|
1206
|
+
config: 1624882680
|
1207
|
+
puppet: 6.24.0
|
1208
|
+
application:
|
1209
|
+
initial_environment: development
|
1210
|
+
converged_environment: development
|
1211
|
+
run_mode: agent
|
1212
|
+
SUMMARY
|
1213
|
+
configurer.run
|
1214
|
+
|
1215
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1216
|
+
end
|
1217
|
+
end
|
1218
|
+
end
|
1219
|
+
|
1220
|
+
describe "when the use_last_environment setting is set to false" do
|
1221
|
+
let(:node_environment) { Puppet::Node::Environment.remote(:salam) }
|
1222
|
+
let(:node) { Puppet::Node.new(Puppet[:node_name_value]) }
|
1223
|
+
|
1224
|
+
before do
|
1225
|
+
Puppet[:use_last_environment] = false
|
1226
|
+
node.environment = node_environment
|
1227
|
+
|
1228
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1229
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1230
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1231
|
+
.and_return(node)
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
it "does a node request" do
|
1235
|
+
expect(Puppet::Node.indirection).to receive(:find)
|
1236
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1237
|
+
|
1238
|
+
configurer.run
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
it "uses the node environment from the node request" do
|
1242
|
+
configurer.run
|
1243
|
+
|
1244
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1245
|
+
end
|
1246
|
+
end
|
1247
|
+
end
|
1248
|
+
|
1249
|
+
describe "when the last used environment is not available" do
|
1250
|
+
describe "when the node request succeeds" do
|
1251
|
+
let(:node_environment) { Puppet::Node::Environment.remote(:salam) }
|
1252
|
+
let(:node) { Puppet::Node.new(Puppet[:node_name_value]) }
|
1253
|
+
let(:last_server_specified_environment) { 'development' }
|
1122
1254
|
|
1123
|
-
|
1255
|
+
before do
|
1256
|
+
node.environment = node_environment
|
1257
|
+
|
1258
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1259
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1260
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1261
|
+
.and_return(node)
|
1262
|
+
end
|
1263
|
+
|
1264
|
+
it "uses the environment from the node request if the run mode doesn't match" do
|
1265
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1266
|
+
---
|
1267
|
+
version:
|
1268
|
+
config: 1624882680
|
1269
|
+
puppet: 6.24.0
|
1270
|
+
application:
|
1271
|
+
initial_environment: #{Puppet[:environment]}
|
1272
|
+
converged_environment: #{last_server_specified_environment}
|
1273
|
+
run_mode: user
|
1274
|
+
SUMMARY
|
1275
|
+
configurer.run
|
1276
|
+
|
1277
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1278
|
+
end
|
1279
|
+
|
1280
|
+
it "uses the environment from the node request if lastrunfile does not contain the expected keys" do
|
1281
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1282
|
+
---
|
1283
|
+
version:
|
1284
|
+
config: 1624882680
|
1285
|
+
puppet: 6.24.0
|
1286
|
+
SUMMARY
|
1287
|
+
configurer.run
|
1288
|
+
|
1289
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1290
|
+
end
|
1291
|
+
|
1292
|
+
it "uses the environment from the node request if lastrunfile is invalid YAML" do
|
1293
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
1294
|
+
Key: 'this is my very very very ' +
|
1295
|
+
'long string'
|
1296
|
+
SUMMARY
|
1297
|
+
configurer.run
|
1298
|
+
|
1299
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1300
|
+
end
|
1301
|
+
|
1302
|
+
it "uses the environment from the node request if lastrunfile exists but is empty" do
|
1303
|
+
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', '')
|
1304
|
+
configurer.run
|
1305
|
+
|
1306
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
it "uses the environment from the node request if the last used one cannot be found" do
|
1310
|
+
Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
|
1311
|
+
configurer.run
|
1312
|
+
|
1313
|
+
expect(configurer.environment).to eq(node_environment.name.to_s)
|
1314
|
+
end
|
1315
|
+
end
|
1316
|
+
|
1317
|
+
describe "when the node request fails" do
|
1318
|
+
before do
|
1319
|
+
allow(Puppet::Node.indirection).to receive(:find).and_call_original
|
1320
|
+
allow(Puppet::Node.indirection).to receive(:find)
|
1321
|
+
.with(anything, hash_including(:ignore_cache => true, :fail_on_404 => true))
|
1322
|
+
.and_raise(Puppet::Error)
|
1323
|
+
end
|
1324
|
+
|
1325
|
+
it "uses the environment from Puppet[:environment] if the last used one cannot be found" do
|
1326
|
+
Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
|
1327
|
+
configurer.run
|
1328
|
+
|
1329
|
+
expect(configurer.environment).to eq(Puppet[:environment])
|
1330
|
+
end
|
1331
|
+
end
|
1124
1332
|
end
|
1125
1333
|
end
|
1126
1334
|
end
|
data/spec/unit/defaults_spec.rb
CHANGED
@@ -200,6 +200,7 @@ describe "Defaults" do
|
|
200
200
|
|
201
201
|
Object.send(:remove_const, :Facter)
|
202
202
|
facter = double('facter')
|
203
|
+
allow(facter).to receive(:on_message)
|
203
204
|
allow(facter).to receive(:value).with('facterversion').and_return('3.11.4')
|
204
205
|
Object.const_set(:Facter, facter)
|
205
206
|
|
@@ -5,6 +5,14 @@ require 'puppet/file_system'
|
|
5
5
|
describe Puppet::Environments do
|
6
6
|
FS = Puppet::FileSystem
|
7
7
|
|
8
|
+
module FsRemove
|
9
|
+
def remove
|
10
|
+
@properties[:directory?] = false
|
11
|
+
@properties[:exist?] = false
|
12
|
+
@properties[:executable?] = false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
8
16
|
before(:each) do
|
9
17
|
Puppet.settings.initialize_global_settings
|
10
18
|
Puppet[:environment_timeout] = "unlimited"
|
@@ -131,6 +139,14 @@ describe Puppet::Environments do
|
|
131
139
|
end
|
132
140
|
end
|
133
141
|
|
142
|
+
it "implements guard and unguard" do
|
143
|
+
loader_from(:filesystem => [directory_tree],
|
144
|
+
:directory => directory_tree.children.first) do |loader|
|
145
|
+
expect(loader.guard('env1')).to be_nil
|
146
|
+
expect(loader.unguard('env1')).to be_nil
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
134
150
|
context "with an environment.conf" do
|
135
151
|
let(:envdir) do
|
136
152
|
FS::MemoryFile.a_directory(File.expand_path("envdir"), [
|
@@ -607,6 +623,78 @@ config_version=$vardir/random/scripts
|
|
607
623
|
cached.get(:cached)
|
608
624
|
end
|
609
625
|
|
626
|
+
it "does not list deleted environments" do
|
627
|
+
env3 = FS::MemoryFile.a_directory("env3", [
|
628
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
629
|
+
])
|
630
|
+
|
631
|
+
envdir = FS::MemoryFile.a_directory(File.expand_path("envdir"), [
|
632
|
+
FS::MemoryFile.a_directory("env1", [
|
633
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
634
|
+
]),
|
635
|
+
FS::MemoryFile.a_directory("env2", [
|
636
|
+
FS::MemoryFile.a_regular_file_containing("environment.conf", '')
|
637
|
+
]),
|
638
|
+
env3
|
639
|
+
])
|
640
|
+
|
641
|
+
loader_from(:filesystem => [envdir], :directory => envdir) do |loader|
|
642
|
+
cached = Puppet::Environments::Cached.new(loader)
|
643
|
+
cached.get(:env1)
|
644
|
+
cached.get(:env2)
|
645
|
+
cached.get(:env3)
|
646
|
+
env3.extend(FsRemove).remove
|
647
|
+
|
648
|
+
expect(cached.list).to contain_exactly(environment(:env1),environment(:env2))
|
649
|
+
expect(cached.get(:env3)).to be_nil
|
650
|
+
end
|
651
|
+
end
|
652
|
+
|
653
|
+
it "normalizes environment name to symbol" do
|
654
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
655
|
+
mocked_loader = double('loader')
|
656
|
+
|
657
|
+
expect(mocked_loader).not_to receive(:get).with('cached')
|
658
|
+
expect(mocked_loader).to receive(:get).with(:cached).and_return(env).once
|
659
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).once
|
660
|
+
|
661
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
662
|
+
cached.get('cached')
|
663
|
+
cached.get(:cached)
|
664
|
+
end
|
665
|
+
|
666
|
+
it "caches environment name as symbol and only once" do
|
667
|
+
mocked_loader = double('loader')
|
668
|
+
|
669
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
670
|
+
allow(mocked_loader).to receive(:get).with(:cached).and_return(env)
|
671
|
+
allow(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20))
|
672
|
+
|
673
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
674
|
+
cached.get(:cached)
|
675
|
+
cached.get('cached')
|
676
|
+
|
677
|
+
expect(cached.instance_variable_get(:@cache).keys).to eq([:cached])
|
678
|
+
end
|
679
|
+
|
680
|
+
it "is able to cache multiple environments" do
|
681
|
+
mocked_loader = double('loader')
|
682
|
+
|
683
|
+
env1 = Puppet::Node::Environment.create(:env1, [])
|
684
|
+
allow(mocked_loader).to receive(:get).with(:env1).and_return(env1)
|
685
|
+
allow(mocked_loader).to receive(:get_conf).with(:env1).and_return(Puppet::Settings::EnvironmentConf.static_for(env1, 20))
|
686
|
+
|
687
|
+
env2 = Puppet::Node::Environment.create(:env2, [])
|
688
|
+
allow(mocked_loader).to receive(:get).with(:env2).and_return(env2)
|
689
|
+
allow(mocked_loader).to receive(:get_conf).with(:env2).and_return(Puppet::Settings::EnvironmentConf.static_for(env2, 20))
|
690
|
+
|
691
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
692
|
+
cached.get('env1')
|
693
|
+
cached.get('env2')
|
694
|
+
|
695
|
+
expect(cached.instance_variable_get(:@cache).keys).to eq([:env1, :env2])
|
696
|
+
end
|
697
|
+
|
610
698
|
it "returns nil if env not found" do
|
611
699
|
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
612
700
|
expect(loader.get(:doesnotexist)).to be_nil
|
@@ -662,6 +750,17 @@ config_version=$vardir/random/scripts
|
|
662
750
|
cached.get_conf(:cached)
|
663
751
|
end
|
664
752
|
|
753
|
+
it "normalizes environment name to symbol" do
|
754
|
+
env = Puppet::Node::Environment.create(:cached, [])
|
755
|
+
mocked_loader = double('loader')
|
756
|
+
expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
|
757
|
+
|
758
|
+
cached = Puppet::Environments::Cached.new(mocked_loader)
|
759
|
+
|
760
|
+
cached.get_conf('cached')
|
761
|
+
cached.get_conf(:cached)
|
762
|
+
end
|
763
|
+
|
665
764
|
it "returns nil if environment is not found" do
|
666
765
|
cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
|
667
766
|
expect(loader.get_conf(:doesnotexist)).to be_nil
|
@@ -754,6 +853,83 @@ config_version=$vardir/random/scripts
|
|
754
853
|
|
755
854
|
expect(service.evicted_envs).to eq([:an_environment])
|
756
855
|
end
|
856
|
+
|
857
|
+
context "when guarding an environment" do
|
858
|
+
before :each do
|
859
|
+
Puppet[:environment_timeout] = 0
|
860
|
+
end
|
861
|
+
|
862
|
+
let(:name) { :an_environment }
|
863
|
+
|
864
|
+
def with_guard(cached, name, &block)
|
865
|
+
cached.guard(name)
|
866
|
+
begin
|
867
|
+
yield
|
868
|
+
ensure
|
869
|
+
cached.unguard(name)
|
870
|
+
end
|
871
|
+
end
|
872
|
+
|
873
|
+
it "evicts an expired and unguarded environment" do
|
874
|
+
with_environment_loaded(service) do |cached|
|
875
|
+
cached.get!(name)
|
876
|
+
end
|
877
|
+
|
878
|
+
expect(service.created_envs).to eq([name, name])
|
879
|
+
expect(service.evicted_envs).to eq([name])
|
880
|
+
end
|
881
|
+
|
882
|
+
it "does not evict an expired, but guarded environment" do
|
883
|
+
with_environment_loaded(service) do |cached|
|
884
|
+
with_guard(cached, name) do
|
885
|
+
cached.get!(name) # these shouldn't reload
|
886
|
+
cached.get!(name)
|
887
|
+
end
|
888
|
+
end
|
889
|
+
|
890
|
+
expect(service.created_envs).to eq([name])
|
891
|
+
expect(service.evicted_envs).to eq([])
|
892
|
+
end
|
893
|
+
|
894
|
+
it "does not evict an environment marked for expiration, but is guarded" do
|
895
|
+
Puppet[:environment_timeout] = 'unlimited'
|
896
|
+
|
897
|
+
expect(service).to receive(:expired?).never
|
898
|
+
|
899
|
+
with_environment_loaded(service) do |cached|
|
900
|
+
with_guard(cached, name) do
|
901
|
+
cached.get!(name)
|
902
|
+
end
|
903
|
+
end
|
904
|
+
|
905
|
+
expect(service.created_envs).to eq([name])
|
906
|
+
expect(service.evicted_envs).to eq([])
|
907
|
+
end
|
908
|
+
|
909
|
+
it "evicts an environment that is no longer guarded" do
|
910
|
+
with_environment_loaded(service) do |cached|
|
911
|
+
with_guard(cached, name) {}
|
912
|
+
|
913
|
+
cached.get!(name) # this reloads
|
914
|
+
end
|
915
|
+
|
916
|
+
expect(service.created_envs).to eq([name, name])
|
917
|
+
expect(service.evicted_envs).to eq([name])
|
918
|
+
end
|
919
|
+
|
920
|
+
it "can nest guards" do
|
921
|
+
with_environment_loaded(service) do |cached|
|
922
|
+
with_guard(cached, name) do
|
923
|
+
with_guard(cached, name) do
|
924
|
+
cached.get!(name) # doesn't reload
|
925
|
+
end
|
926
|
+
end
|
927
|
+
end
|
928
|
+
|
929
|
+
expect(service.created_envs).to eq([name])
|
930
|
+
expect(service.evicted_envs).to eq([])
|
931
|
+
end
|
932
|
+
end
|
757
933
|
end
|
758
934
|
|
759
935
|
context '#clear' do
|
@@ -766,6 +942,14 @@ config_version=$vardir/random/scripts
|
|
766
942
|
|
767
943
|
expect(service.evicted_envs).to eq([:an_environment])
|
768
944
|
end
|
945
|
+
|
946
|
+
it "normalizes environment name to symbol" do
|
947
|
+
with_environment_loaded(service) do |cached|
|
948
|
+
cached.clear('an_environment')
|
949
|
+
end
|
950
|
+
|
951
|
+
expect(service.evicted_envs).to eq([:an_environment])
|
952
|
+
end
|
769
953
|
end
|
770
954
|
|
771
955
|
context '#clear_all' do
|