puppet 6.24.0-universal-darwin → 6.25.0-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +12 -12
- 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/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +20 -2
- data/lib/puppet/application/resource.rb +15 -13
- data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
- data/lib/puppet/configurer.rb +85 -57
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +36 -30
- data/lib/puppet/environments.rb +66 -26
- data/lib/puppet/face/facts.rb +1 -1
- 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/mount/file.rb +4 -4
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/file_system/file_impl.rb +3 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/find_template.rb +2 -2
- 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/terminus.rb +4 -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 +8 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/scope.rb +1 -0
- data/lib/puppet/parser/templatewrapper.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/eparser.rb +201 -201
- 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_data_converter.rb +18 -6
- 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/types.rb +1 -1
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- 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/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +5 -5
- 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/type_collection.rb +1 -0
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/persistence.rb +11 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type/exec.rb +19 -2
- 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/user.rb +0 -1
- 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 +3 -0
- data/lib/puppet/util/log.rb +1 -2
- data/lib/puppet/util/logging.rb +1 -25
- 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/tagging.rb +1 -0
- data/lib/puppet/util/windows/user.rb +0 -2
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +2 -6
- data/locales/puppet.pot +246 -230
- data/man/man5/puppet.conf.5 +33 -25
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +3 -3
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- 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/integration/application/agent_spec.rb +113 -37
- data/spec/integration/application/filebucket_spec.rb +5 -0
- data/spec/integration/configurer_spec.rb +18 -2
- data/spec/integration/indirector/facts/facter_spec.rb +3 -3
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- 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_spec/modules.rb +13 -2
- data/spec/lib/puppet_spec/puppetserver.rb +15 -0
- data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
- data/spec/shared_contexts/l10n.rb +27 -0
- data/spec/spec_helper.rb +1 -10
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/configurer_spec.rb +171 -56
- data/spec/unit/defaults_spec.rb +1 -0
- data/spec/unit/environments_spec.rb +150 -1
- 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 +7 -0
- data/spec/unit/functions/logging_spec.rb +1 -0
- data/spec/unit/functions/lookup_spec.rb +64 -0
- 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/interface/action_spec.rb +0 -9
- data/spec/unit/module_spec.rb +15 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
- data/spec/unit/network/authstore_spec.rb +0 -15
- data/spec/unit/network/formats_spec.rb +6 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
- 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/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 +1 -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/service/launchd_spec.rb +11 -0
- 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/ssl/certificate_request_spec.rb +8 -14
- data/spec/unit/type/service_spec.rb +27 -0
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/logging_spec.rb +2 -0
- data/tasks/parallel.rake +3 -3
- metadata +37 -94
- 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
@@ -472,67 +472,58 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
472
472
|
end
|
473
473
|
|
474
474
|
context 'multiple agents running' do
|
475
|
-
|
475
|
+
def with_another_agent_running(&block)
|
476
476
|
path = Puppet[:agent_catalog_run_lockfile]
|
477
477
|
|
478
478
|
th = Thread.new {
|
479
|
-
%x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(
|
479
|
+
%x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(5)"}
|
480
480
|
}
|
481
481
|
|
482
|
+
# ensure file is written before yielding
|
482
483
|
until File.exists?(path) && File.size(path) > 0 do
|
483
484
|
sleep 0.1
|
484
485
|
end
|
485
486
|
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
487
|
+
begin
|
488
|
+
yield
|
489
|
+
ensure
|
490
|
+
th.kill # kill thread so we don't wait too much
|
491
|
+
end
|
492
|
+
end
|
490
493
|
|
491
|
-
|
494
|
+
it "exits if an agent is already running" do
|
495
|
+
with_another_agent_running do
|
496
|
+
expect {
|
497
|
+
agent.command_line.args << '--test'
|
498
|
+
agent.run
|
499
|
+
}.to exit_with(1).and output(/Run of Puppet configuration client already in progress; skipping/).to_stdout
|
500
|
+
end
|
492
501
|
end
|
493
502
|
|
494
503
|
it "waits for other agent run to finish before starting" do
|
495
504
|
server.start_server do |port|
|
496
|
-
path = Puppet[:agent_catalog_run_lockfile]
|
497
505
|
Puppet[:serverport] = port
|
498
506
|
Puppet[:waitforlock] = 1
|
499
507
|
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
sleep 0.1
|
508
|
+
with_another_agent_running do
|
509
|
+
expect {
|
510
|
+
agent.command_line.args << '--test'
|
511
|
+
agent.run
|
512
|
+
}.to exit_with(0).and output(/Info: Will try again in #{Puppet[:waitforlock]} seconds./).to_stdout
|
506
513
|
end
|
507
|
-
|
508
|
-
expect {
|
509
|
-
agent.command_line.args << '--test'
|
510
|
-
agent.run
|
511
|
-
}.to exit_with(0).and output(/Info: Will try again in #{Puppet[:waitforlock]} seconds./).to_stdout
|
512
|
-
|
513
|
-
th.kill # kill thread so we don't wait too much
|
514
514
|
end
|
515
515
|
end
|
516
516
|
|
517
517
|
it "exits if maxwaitforlock is exceeded" do
|
518
|
-
path = Puppet[:agent_catalog_run_lockfile]
|
519
518
|
Puppet[:waitforlock] = 1
|
520
519
|
Puppet[:maxwaitforlock] = 0
|
521
520
|
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
sleep 0.1
|
521
|
+
with_another_agent_running do
|
522
|
+
expect {
|
523
|
+
agent.command_line.args << '--test'
|
524
|
+
agent.run
|
525
|
+
}.to exit_with(1).and output(/Exiting now because the maxwaitforlock timeout has been exceeded./).to_stdout
|
528
526
|
end
|
529
|
-
|
530
|
-
expect {
|
531
|
-
agent.command_line.args << '--test'
|
532
|
-
agent.run
|
533
|
-
}.to exit_with(1).and output(/Exiting now because the maxwaitforlock timeout has been exceeded./).to_stdout
|
534
|
-
|
535
|
-
th.kill # kill thread so we don't wait too much
|
536
527
|
end
|
537
528
|
end
|
538
529
|
|
@@ -572,7 +563,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
572
563
|
).and matching(
|
573
564
|
/Notify\[a message\]\/message:/
|
574
565
|
)).to_stdout
|
575
|
-
.and output(/
|
566
|
+
.and output(/Could not retrieve catalog from remote server/).to_stderr
|
576
567
|
end
|
577
568
|
|
578
569
|
it 'preserves the old cached catalog if validation fails with the old one' do
|
@@ -591,7 +582,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
591
582
|
agent.command_line.args << '--test'
|
592
583
|
agent.run
|
593
584
|
}.to exit_with(1)
|
594
|
-
.and output(
|
585
|
+
.and output(%r{Retrieving plugin}).to_stdout
|
595
586
|
.and output(%r{Validation of Exec\[unqualified_command\] failed: 'unqualified_command' is not qualified and no path was specified}).to_stderr
|
596
587
|
end
|
597
588
|
|
@@ -632,5 +623,90 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
632
623
|
expect(report.metrics).to_not be_empty
|
633
624
|
end
|
634
625
|
end
|
626
|
+
|
627
|
+
it "caches a report even if the REST request fails" do
|
628
|
+
server.start_server do |port|
|
629
|
+
Puppet[:serverport] = port
|
630
|
+
Puppet[:report_port] = "-1"
|
631
|
+
expect {
|
632
|
+
agent.command_line.args << '--test'
|
633
|
+
agent.run
|
634
|
+
}.to exit_with(0)
|
635
|
+
.and output(%r{Applied catalog}).to_stdout
|
636
|
+
.and output(%r{Could not send report}).to_stderr
|
637
|
+
|
638
|
+
report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
|
639
|
+
expect(report).to be
|
640
|
+
end
|
641
|
+
end
|
642
|
+
end
|
643
|
+
|
644
|
+
context "environment convergence" do
|
645
|
+
it "switches to 'newenv' environment and retries the run" do
|
646
|
+
first_run = true
|
647
|
+
libdir = File.join(my_fixture_dir, 'lib')
|
648
|
+
|
649
|
+
# we have to use the :facter terminus to reliably test that pluginsynced
|
650
|
+
# facts are included in the catalog request
|
651
|
+
Puppet::Node::Facts.indirection.terminus_class = :facter
|
652
|
+
|
653
|
+
mounts = {}
|
654
|
+
|
655
|
+
# During the first run, only return metadata for the top-level directory.
|
656
|
+
# During the second run, include metadata for all of the 'lib' fixtures
|
657
|
+
# due to the `recurse` option.
|
658
|
+
mounts[:file_metadatas] = -> (req, res) {
|
659
|
+
request = Puppet::FileServing::Metadata.indirection.request(
|
660
|
+
:search, libdir, nil, recurse: !first_run
|
661
|
+
)
|
662
|
+
data = Puppet::FileServing::Metadata.indirection.terminus(:file).search(request)
|
663
|
+
res.body = formatter.render(data)
|
664
|
+
res['Content-Type'] = formatter.mime
|
665
|
+
}
|
666
|
+
|
667
|
+
mounts[:file_content] = -> (req, res) {
|
668
|
+
request = Puppet::FileServing::Content.indirection.request(
|
669
|
+
:find, File.join(libdir, 'facter', 'agent_spec_role.rb'), nil
|
670
|
+
)
|
671
|
+
content = Puppet::FileServing::Content.indirection.terminus(:file).find(request)
|
672
|
+
res.body = content.content
|
673
|
+
res['Content-Length'] = content.content.length
|
674
|
+
res['Content-Type'] = 'application/octet-stream'
|
675
|
+
}
|
676
|
+
|
677
|
+
# During the first run, return an empty catalog referring to the newenv.
|
678
|
+
# During the second run, compile a catalog that depends on a fact that
|
679
|
+
# only exists in the second environment. If the fact is missing/empty,
|
680
|
+
# then compilation will fail since resources can't have an empty title.
|
681
|
+
mounts[:catalog] = -> (req, res) {
|
682
|
+
node = Puppet::Node.new('test')
|
683
|
+
|
684
|
+
code = if first_run
|
685
|
+
first_run = false
|
686
|
+
''
|
687
|
+
else
|
688
|
+
data = CGI.unescape(req.query['facts'])
|
689
|
+
facts = Puppet::Node::Facts.convert_from('json', data)
|
690
|
+
node.fact_merge(facts)
|
691
|
+
'notify { $facts["agent_spec_role"]: }'
|
692
|
+
end
|
693
|
+
|
694
|
+
catalog = compile_to_catalog(code, node)
|
695
|
+
catalog.environment = 'newenv'
|
696
|
+
|
697
|
+
res.body = formatter.render(catalog)
|
698
|
+
res['Content-Type'] = formatter.mime
|
699
|
+
}
|
700
|
+
|
701
|
+
server.start_server(mounts: mounts) do |port|
|
702
|
+
Puppet[:serverport] = port
|
703
|
+
expect {
|
704
|
+
agent.command_line.args << '--test'
|
705
|
+
agent.run
|
706
|
+
}.to exit_with(2)
|
707
|
+
.and output(a_string_matching(%r{Notice: Local environment: 'production' doesn't match server specified environment 'newenv', restarting agent run with environment 'newenv'})
|
708
|
+
.and matching(%r{defined 'message' as 'web'})).to_stdout
|
709
|
+
end
|
710
|
+
end
|
635
711
|
end
|
636
712
|
end
|
@@ -18,6 +18,11 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
|
|
18
18
|
File.binwrite(backup_file, text)
|
19
19
|
end
|
20
20
|
|
21
|
+
after :each do
|
22
|
+
# mute debug messages generated during `after :each` blocks
|
23
|
+
Puppet::Util::Log.close_all
|
24
|
+
end
|
25
|
+
|
21
26
|
it "backs up to and restores from the local filebucket" do
|
22
27
|
filebucket.command_line.args = ['backup', backup_file, '--local']
|
23
28
|
expect {
|
@@ -23,7 +23,7 @@ describe Puppet::Configurer do
|
|
23
23
|
expect(Puppet::Transaction::Report.indirection).to receive(:save) do |report, x|
|
24
24
|
expect(report.time).to be_a(Time)
|
25
25
|
expect(report.logs.length).to be > 0
|
26
|
-
end
|
26
|
+
end.twice
|
27
27
|
|
28
28
|
Puppet[:report] = true
|
29
29
|
|
@@ -60,7 +60,8 @@ describe Puppet::Configurer do
|
|
60
60
|
expect(summary["time"]["last_run"]).to be_between(t1, t2)
|
61
61
|
end
|
62
62
|
|
63
|
-
it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
|
63
|
+
it "applies a cached catalog if pluginsync fails when usecacheonfailure is true and environment is valid" do
|
64
|
+
expect(@configurer).to receive(:valid_server_environment?).and_return(true)
|
64
65
|
Puppet[:ignore_plugin_errors] = false
|
65
66
|
|
66
67
|
Puppet[:use_cached_catalog] = false
|
@@ -74,6 +75,21 @@ describe Puppet::Configurer do
|
|
74
75
|
expect(report.cached_catalog_status).to eq('on_failure')
|
75
76
|
end
|
76
77
|
|
78
|
+
it "applies a cached catalog if pluginsync fails when usecacheonfailure is true and environment is invalid" do
|
79
|
+
expect(@configurer).to receive(:valid_server_environment?).and_return(false)
|
80
|
+
Puppet[:ignore_plugin_errors] = false
|
81
|
+
|
82
|
+
Puppet[:use_cached_catalog] = false
|
83
|
+
Puppet[:usecacheonfailure] = true
|
84
|
+
|
85
|
+
report = Puppet::Transaction::Report.new
|
86
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_raise(Puppet::Error, 'Cannot compile remote catalog')
|
87
|
+
expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(@catalog)
|
88
|
+
|
89
|
+
@configurer.run(pluginsync: true, report: report)
|
90
|
+
expect(report.cached_catalog_status).to eq('on_failure')
|
91
|
+
end
|
92
|
+
|
77
93
|
describe 'resubmitting facts' do
|
78
94
|
context 'when resubmit_facts is set to false' do
|
79
95
|
it 'should not send data' do
|
@@ -13,7 +13,7 @@ describe Puppet::Node::Facts::Facter do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "preserves case in fact values" do
|
16
|
-
|
16
|
+
Puppet.runtime[:facter].add(:downcase_test) do
|
17
17
|
setcode do
|
18
18
|
"AaBbCc"
|
19
19
|
end
|
@@ -34,9 +34,9 @@ describe Puppet::Node::Facts::Facter do
|
|
34
34
|
FileUtils.mkdir_p(test_module)
|
35
35
|
|
36
36
|
File.open(File.join(test_module, 'custom.rb'), 'wb') { |file| file.write(<<-EOF)}
|
37
|
-
|
37
|
+
Puppet.runtime[:facter].add(:custom) do
|
38
38
|
setcode do
|
39
|
-
|
39
|
+
Puppet.runtime[:facter].value('puppetversion')
|
40
40
|
end
|
41
41
|
end
|
42
42
|
EOF
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'compiler localization' do
|
4
|
+
include_context 'l10n', 'ja'
|
5
|
+
|
6
|
+
let(:envdir) { File.join(my_fixture_dir, '..', 'envs') }
|
7
|
+
let(:environments) do
|
8
|
+
Puppet::Environments::Cached.new(
|
9
|
+
Puppet::Environments::Directories.new(envdir, [])
|
10
|
+
)
|
11
|
+
end
|
12
|
+
let(:env) { Puppet::Node::Environment.create(:prod, [File.join(envdir, 'prod', 'modules')]) }
|
13
|
+
let(:node) { Puppet::Node.new('test', :environment => env) }
|
14
|
+
|
15
|
+
around(:each) do |example|
|
16
|
+
Puppet.override(current_environment: env,
|
17
|
+
loaders: Puppet::Pops::Loaders.new(env),
|
18
|
+
environments: environments) do
|
19
|
+
example.run
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'localizes strings in functions' do
|
24
|
+
Puppet[:code] = <<~END
|
25
|
+
notify { 'demo':
|
26
|
+
message => l10n()
|
27
|
+
}
|
28
|
+
END
|
29
|
+
|
30
|
+
Puppet::Resource::Catalog.indirection.terminus_class = :compiler
|
31
|
+
catalog = Puppet::Resource::Catalog.indirection.find(node.name)
|
32
|
+
resource = catalog.resource(:notify, 'demo')
|
33
|
+
|
34
|
+
expect(resource).to be
|
35
|
+
expect(resource[:message]).to eq("それは楽しい時間です")
|
36
|
+
end
|
37
|
+
end
|
@@ -1709,11 +1709,11 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
|
|
1709
1709
|
|
1710
1710
|
describe "when using validate_cmd" do
|
1711
1711
|
test_cmd = '/bin/test'
|
1712
|
-
if
|
1712
|
+
if Puppet.runtime[:facter].value(:osfamily) == 'Debian'
|
1713
1713
|
test_cmd = '/usr/bin/test'
|
1714
1714
|
end
|
1715
1715
|
|
1716
|
-
if
|
1716
|
+
if Puppet.runtime[:facter].value(:operatingsystem) == 'Darwin'
|
1717
1717
|
stat_cmd = "stat -f '%Lp'"
|
1718
1718
|
else
|
1719
1719
|
stat_cmd = "stat --format=%a"
|
@@ -9,7 +9,7 @@ describe Puppet::Type.type(:package), "when choosing a default package provider"
|
|
9
9
|
def provider_name(os)
|
10
10
|
case os
|
11
11
|
when 'Solaris'
|
12
|
-
if Puppet::Util::Package.versioncmp(
|
12
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:kernelrelease), '5.11') >= 0
|
13
13
|
:pkg
|
14
14
|
else
|
15
15
|
:sun
|
@@ -21,19 +21,19 @@ describe Puppet::Type.type(:package), "when choosing a default package provider"
|
|
21
21
|
when 'Darwin'
|
22
22
|
:pkgdmg
|
23
23
|
when 'RedHat'
|
24
|
-
if ['2.1', '3', '4'].include?(
|
24
|
+
if ['2.1', '3', '4'].include?(Puppet.runtime[:facter].value(:lsbdistrelease))
|
25
25
|
:up2date
|
26
26
|
else
|
27
27
|
:yum
|
28
28
|
end
|
29
29
|
when 'Fedora'
|
30
|
-
if Puppet::Util::Package.versioncmp(
|
30
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemmajrelease), '22') >= 0
|
31
31
|
:dnf
|
32
32
|
else
|
33
33
|
:yum
|
34
34
|
end
|
35
35
|
when 'Suse'
|
36
|
-
if Puppet::Util::Package.versioncmp(
|
36
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemmajrelease), '10') >= 0
|
37
37
|
:zypper
|
38
38
|
else
|
39
39
|
:rug
|
@@ -54,8 +54,8 @@ describe Puppet::Type.type(:package), "when choosing a default package provider"
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should choose the correct provider each platform" do
|
57
|
-
unless default_provider = provider_name(
|
58
|
-
pending("No default provider specified in this test for #{
|
57
|
+
unless default_provider = provider_name(Puppet.runtime[:facter].value(:operatingsystem))
|
58
|
+
pending("No default provider specified in this test for #{Puppet.runtime[:facter].value(:operatingsystem)}")
|
59
59
|
end
|
60
60
|
expect(Puppet::Type.type(:package).defaultprovider.name).to eq(default_provider)
|
61
61
|
end
|
@@ -1,22 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'facter'
|
3
2
|
|
4
3
|
describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows? do
|
5
4
|
describe "as an admin" do
|
6
|
-
it "should have the SeCreateSymbolicLinkPrivilege necessary to create symlinks
|
7
|
-
:if => Facter.value(:kernelmajversion).to_f >= 6.0 && Puppet::Util::Platform.windows? do
|
5
|
+
it "should have the SeCreateSymbolicLinkPrivilege necessary to create symlinks" do
|
8
6
|
# this is a bit of a lame duck test since it requires running user to be admin
|
9
7
|
# a better integration test would create a new user with the privilege and verify
|
10
8
|
expect(Puppet::Util::Windows::User).to be_admin
|
11
9
|
expect(Puppet::Util::Windows::Process.process_privilege_symlink?).to be_truthy
|
12
10
|
end
|
13
11
|
|
14
|
-
it "should not have the SeCreateSymbolicLinkPrivilege necessary to create symlinks on 2003 and earlier",
|
15
|
-
:if => Facter.value(:kernelmajversion).to_f < 6.0 && Puppet::Util::Platform.windows? do
|
16
|
-
expect(Puppet::Util::Windows::User).to be_admin
|
17
|
-
expect(Puppet::Util::Windows::Process.process_privilege_symlink?).to be_falsey
|
18
|
-
end
|
19
|
-
|
20
12
|
it "should be able to lookup a standard Windows process privilege" do
|
21
13
|
Puppet::Util::Windows::Process.lookup_privilege_value('SeShutdownPrivilege') do |luid|
|
22
14
|
expect(luid).not_to be_nil
|
@@ -36,7 +36,7 @@ module PuppetSpec::Modules
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
if plans = options[:plans]
|
39
|
+
if (plans = options[:plans])
|
40
40
|
plans_dir = File.join(module_dir, 'plans')
|
41
41
|
FileUtils.mkdir_p(plans_dir)
|
42
42
|
plans.each do |plan_file|
|
@@ -48,6 +48,17 @@ module PuppetSpec::Modules
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
if (scripts = options[:scripts])
|
52
|
+
scripts_dir = File.join(module_dir, 'scripts')
|
53
|
+
FileUtils.mkdir_p(scripts_dir)
|
54
|
+
scripts.each do |script_file|
|
55
|
+
if script_file.is_a?(String)
|
56
|
+
script_file = { :name => script_file, :content => "" }
|
57
|
+
end
|
58
|
+
File.write(File.join(scripts_dir, script_file[:name]), script_file[:content])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
51
62
|
(options[:files] || {}).each do |fname, content|
|
52
63
|
path = File.join(module_dir, fname)
|
53
64
|
FileUtils.mkdir_p(File.dirname(path))
|
@@ -61,7 +72,7 @@ module PuppetSpec::Modules
|
|
61
72
|
module_dir = File.join(dir, name)
|
62
73
|
FileUtils.mkdir_p(module_dir)
|
63
74
|
|
64
|
-
if metadata = options[:metadata]
|
75
|
+
if (metadata = options[:metadata])
|
65
76
|
File.open(File.join(module_dir, 'metadata.json'), 'w') do |f|
|
66
77
|
f.write(metadata.to_json)
|
67
78
|
end
|
@@ -31,6 +31,19 @@ class PuppetSpec::Puppetserver
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
class FileMetadataServlet < WEBrick::HTTPServlet::AbstractServlet
|
35
|
+
def do_GET request, response
|
36
|
+
response['Content-Type'] = 'application/json'
|
37
|
+
response.body = "{\"path\":\"/etc/puppetlabs/code/environments/production/modules\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-03-06 20:14:25 UTC\"},\"type\":\"directory\",\"destination\":null}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class FileContentServlet < WEBrick::HTTPServlet::AbstractServlet
|
42
|
+
def do_GET request, response
|
43
|
+
response.status = 404
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
34
47
|
class ReportServlet < WEBrick::HTTPServlet::AbstractServlet
|
35
48
|
def do_PUT request, response
|
36
49
|
response['Content-Type'] = 'application/json'
|
@@ -106,7 +119,9 @@ class PuppetSpec::Puppetserver
|
|
106
119
|
register_mount('/status/v1/simple/master', proc { |req, res| }, nil)
|
107
120
|
register_mount('/puppet/v3/node', mounts[:node], NodeServlet)
|
108
121
|
register_mount('/puppet/v3/catalog', mounts[:catalog], CatalogServlet)
|
122
|
+
register_mount('/puppet/v3/file_metadata', mounts[:file_metadata], FileMetadataServlet)
|
109
123
|
register_mount('/puppet/v3/file_metadatas', mounts[:file_metadatas], FileMetadatasServlet)
|
124
|
+
register_mount('/puppet/v3/file_content', mounts[:file_content], FileContentServlet)
|
110
125
|
register_mount('/puppet/v3/static_file_content', mounts[:static_file_content], StaticFileContentServlet)
|
111
126
|
register_mount('/puppet/v3/report', mounts[:report], ReportServlet)
|
112
127
|
register_mount('/puppet/v3/file_bucket_file', mounts[:filebucket], FilebucketServlet)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.shared_context('l10n') do |locale|
|
4
|
+
before :all do
|
5
|
+
@old_locale = Locale.current
|
6
|
+
Locale.current = locale
|
7
|
+
Puppet::GettextConfig.setup_locale
|
8
|
+
|
9
|
+
# overwrite stubs with real implementation
|
10
|
+
::Object.send(:remove_method, :_)
|
11
|
+
::Object.send(:remove_method, :n_)
|
12
|
+
class ::Object
|
13
|
+
include FastGettext::Translation
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after :all do
|
18
|
+
Locale.current = @old_locale
|
19
|
+
|
20
|
+
# restore stubs
|
21
|
+
load File.expand_path(File.join(__dir__, '../../lib/puppet/gettext/stubs.rb'))
|
22
|
+
end
|
23
|
+
|
24
|
+
before :each do
|
25
|
+
Puppet[:disable_i18n] = false
|
26
|
+
end
|
27
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -68,16 +68,7 @@ VCR.turn_off!
|
|
68
68
|
RSpec.configure do |config|
|
69
69
|
include PuppetSpec::Fixtures
|
70
70
|
|
71
|
-
|
72
|
-
# For example;
|
73
|
-
#
|
74
|
-
# rbv = "#{RUBY_VERSION}-p#{RbConfig::CONFIG['PATCHLEVEL']}"
|
75
|
-
# describe "mostly working", :broken => false unless rbv == "1.9.3-p327" do
|
76
|
-
# it "parses a valid IP" do
|
77
|
-
# IPAddr.new("::2:3:4:5:6:7:8")
|
78
|
-
# end
|
79
|
-
# end
|
80
|
-
exclude_filters = {:broken => true}
|
71
|
+
exclude_filters = {}
|
81
72
|
exclude_filters[:benchmark] = true unless ENV['BENCHMARK']
|
82
73
|
config.filter_run_excluding exclude_filters
|
83
74
|
|