puppet 6.24.0-x64-mingw32 → 6.25.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/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
@@ -352,12 +352,15 @@ describe Puppet::Type.type(:package).provider(:pkg), unless: Puppet::Util::Platf
|
|
352
352
|
resource[:ensure] = '1.0-0.151006'
|
353
353
|
is = :absent
|
354
354
|
expect(provider).to receive(:query).with(no_args).and_return({:ensure => is})
|
355
|
-
expect(provider).to receive(:properties).and_return({:mark => :hold})
|
355
|
+
expect(provider).to receive(:properties).and_return({:mark => :hold}).exactly(3).times
|
356
|
+
|
356
357
|
expect(described_class).to receive(:pkg)
|
357
358
|
.with(:list, '-Hvfa', 'dummy@1.0-0.151006')
|
358
359
|
.and_return(Puppet::Util::Execution::ProcessOutput.new(File.read(my_fixture('dummy_implicit_version')), 0))
|
359
360
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'install', '-n', 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
360
|
-
expect(provider).to receive(:unhold).with(no_args)
|
361
|
+
expect(provider).to receive(:unhold).with(no_args).twice
|
362
|
+
expect(described_class).to receive(:pkg)
|
363
|
+
.with(:freeze, 'dummy')
|
361
364
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'install', *hash[:flags], 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
362
365
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
|
363
366
|
provider.insync?(is)
|
@@ -368,10 +371,14 @@ describe Puppet::Type.type(:package).provider(:pkg), unless: Puppet::Util::Platf
|
|
368
371
|
resource[:ensure] = '1.0-0.151006'
|
369
372
|
is = '1.0,5.11-0.151006:20140219T191204Z'
|
370
373
|
expect(provider).to receive(:query).with(no_args).and_return({:ensure => is})
|
371
|
-
expect(provider).to receive(:properties).and_return({:mark => :hold})
|
374
|
+
expect(provider).to receive(:properties).and_return({:mark => :hold}).exactly(3).times
|
375
|
+
|
372
376
|
expect(described_class).to receive(:pkg).with(:list, '-Hvfa', 'dummy@1.0-0.151006').and_return(File.read(my_fixture('dummy_implicit_version')))
|
377
|
+
expect(described_class).to receive(:pkg)
|
378
|
+
.with(:freeze, 'dummy')
|
373
379
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'update', '-n', 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
374
|
-
|
380
|
+
.and_return(File.read(my_fixture('dummy_implicit_version')))
|
381
|
+
expect(provider).to receive(:unhold).with(no_args).twice
|
375
382
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'update', *hash[:flags], 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
376
383
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
|
377
384
|
provider.insync?(is)
|
@@ -385,6 +392,8 @@ describe Puppet::Type.type(:package).provider(:pkg), unless: Puppet::Util::Platf
|
|
385
392
|
expect(described_class).to receive(:pkg)
|
386
393
|
.with(:list, '-Hvfa', 'dummy@1.0-0.151006')
|
387
394
|
.and_return(Puppet::Util::Execution::ProcessOutput.new(File.read(my_fixture('dummy_implicit_version')), 0))
|
395
|
+
expect(Puppet::Util::Execution).to receive(:execute).with(["/bin/pkg", "list", "-Hv", "dummy"], {:failonfail => false, :combine => true})
|
396
|
+
.and_return(File.read(my_fixture('dummy_implicit_version')))
|
388
397
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'update', '-n', 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
389
398
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(4)
|
390
399
|
provider.insync?(is)
|
@@ -396,10 +405,26 @@ describe Puppet::Type.type(:package).provider(:pkg), unless: Puppet::Util::Platf
|
|
396
405
|
expect(provider).to receive(:warning).with("Implicit version 1.0-0.151006 has 3 possible matches")
|
397
406
|
expect(provider).to receive(:warning).with("Selecting version '1.0,5.11-0.151006:20140220T084443Z' for implicit '1.0-0.151006'")
|
398
407
|
expect(described_class).to receive(:pkg).with(:list, '-Hvfa', 'dummy@1.0-0.151006').and_return(File.read(my_fixture('dummy_implicit_version')))
|
408
|
+
expect(Puppet::Util::Execution).to receive(:execute).with(["/bin/pkg", "list", "-Hv", "dummy"], {:failonfail => false, :combine => true})
|
409
|
+
.and_return(File.read(my_fixture('dummy_implicit_version')))
|
399
410
|
expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'install', '-n', 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
|
400
411
|
allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
|
401
412
|
provider.insync?(is)
|
402
413
|
end
|
414
|
+
|
415
|
+
it "should try 5 times to install and fail when all tries failed" do
|
416
|
+
allow_any_instance_of(Kernel).to receive(:sleep)
|
417
|
+
|
418
|
+
expect(provider).to receive(:query).and_return({:ensure => :absent})
|
419
|
+
expect(provider).to receive(:properties).and_return({:mark => :hold})
|
420
|
+
expect(provider).to receive(:unhold)
|
421
|
+
expect(Puppet::Util::Execution).to receive(:execute)
|
422
|
+
.with(['/bin/pkg', 'install', *hash[:flags], 'dummy'], {:failonfail => false, :combine => true}).exactly(5).times
|
423
|
+
allow($CHILD_STATUS).to receive(:exitstatus).and_return(7)
|
424
|
+
expect {
|
425
|
+
provider.update
|
426
|
+
}.to raise_error(Puppet::Error, /Pkg could not install dummy after 5 tries. Aborting run/)
|
427
|
+
end
|
403
428
|
end
|
404
429
|
end
|
405
430
|
end
|
@@ -87,7 +87,7 @@ describe Puppet::Type.type(:package).provider(:puppet_gem) do
|
|
87
87
|
end
|
88
88
|
|
89
89
|
context 'when is defaultfor' do
|
90
|
-
let(:os) {
|
90
|
+
let(:os) { Puppet.runtime[:facter].value(:operatingsystem) }
|
91
91
|
subject do
|
92
92
|
described_class.defaultfor(operatingsystem: os)
|
93
93
|
described_class.specificity
|
@@ -125,7 +125,7 @@ describe Puppet::Type.type(:package).provider(:puppetserver_gem) do
|
|
125
125
|
end
|
126
126
|
|
127
127
|
context 'when is defaultfor' do
|
128
|
-
let(:os) {
|
128
|
+
let(:os) { Puppet.runtime[:facter].value(:operatingsystem) }
|
129
129
|
subject do
|
130
130
|
described_class.defaultfor(operatingsystem: os)
|
131
131
|
described_class.specificity
|
@@ -327,6 +327,7 @@ describe 'Puppet::Type::Service::Provider::Launchd',
|
|
327
327
|
'LimitLoadToSessionType' => 'Aqua'
|
328
328
|
}
|
329
329
|
end
|
330
|
+
let(:plist_without_label_not_hash) { 'just a string' }
|
330
331
|
let(:busted_plist_path) { '/Library/LaunchAgents/org.busted.plist' }
|
331
332
|
let(:binary_plist_path) { '/Library/LaunchAgents/org.binary.plist' }
|
332
333
|
|
@@ -338,6 +339,16 @@ describe 'Puppet::Type::Service::Provider::Launchd',
|
|
338
339
|
expect(Puppet).to receive(:debug).with("The #{busted_plist_path} plist does not contain a 'label' key; Puppet is skipping it")
|
339
340
|
provider.make_label_to_path_map
|
340
341
|
end
|
342
|
+
|
343
|
+
it "it should warn that the malformed plist in question is being skipped" do
|
344
|
+
expect(provider).to receive(:launchd_paths).and_return(['/Library/LaunchAgents'])
|
345
|
+
expect(provider).to receive(:return_globbed_list_of_file_paths).with('/Library/LaunchAgents').and_return([busted_plist_path])
|
346
|
+
expect(plistlib).to receive(:read_plist_file).with(busted_plist_path).and_return(plist_without_label_not_hash)
|
347
|
+
expect(Puppet).to receive(:debug).with("Reading launchd plist #{busted_plist_path}")
|
348
|
+
expect(Puppet).to receive(:debug).with("The #{busted_plist_path} plist does not contain a 'label' key; Puppet is skipping it")
|
349
|
+
provider.make_label_to_path_map
|
350
|
+
end
|
351
|
+
|
341
352
|
end
|
342
353
|
|
343
354
|
it "should return the cached value when available" do
|
@@ -34,7 +34,7 @@ describe 'Puppet::Type::Service::Provider::Systemd',
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
[7, 8].each do |ver|
|
37
|
+
[7, 8, 9].each do |ver|
|
38
38
|
it "should be the default provider on rhel#{ver}" do
|
39
39
|
allow(Facter).to receive(:value).with(:osfamily).and_return(:redhat)
|
40
40
|
allow(Facter).to receive(:value).with(:operatingsystem).and_return(:redhat)
|
@@ -217,4 +217,104 @@ describe 'Puppet::Type::User::Provider::Aix' do
|
|
217
217
|
provider.create
|
218
218
|
end
|
219
219
|
end
|
220
|
+
|
221
|
+
describe '#list_all_homes' do
|
222
|
+
it "should return empty array and output debug on failure" do
|
223
|
+
allow(Puppet::Util::Execution).to receive(:execute).and_raise(Puppet::ExecutionFailure, 'Execution failed')
|
224
|
+
expect(Puppet).to receive(:debug).with('Could not list home of all users: Execution failed')
|
225
|
+
expect(provider.list_all_homes).to eql({})
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe '#delete' do
|
230
|
+
before(:each) do
|
231
|
+
allow(File).to receive(:realpath).and_call_original
|
232
|
+
allow(FileUtils).to receive(:remove_entry_secure).and_call_original
|
233
|
+
|
234
|
+
allow(provider.resource).to receive(:should).with(anything).and_return(nil)
|
235
|
+
allow(provider).to receive(:home).and_return(Dir.tmpdir)
|
236
|
+
allow(provider).to receive(:execute).and_return(nil)
|
237
|
+
allow(provider).to receive(:object_info).and_return(nil)
|
238
|
+
allow(FileUtils).to receive(:remove_entry_secure).with(Dir.tmpdir, true).and_return(nil)
|
239
|
+
end
|
240
|
+
|
241
|
+
context 'with managehome true' do
|
242
|
+
before(:each) do
|
243
|
+
allow(provider.resource).to receive(:managehome?).and_return(true)
|
244
|
+
allow(provider).to receive(:list_all_homes).and_return([])
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'should delete the user without error' do
|
248
|
+
expect{ provider.delete }.not_to raise_error
|
249
|
+
end
|
250
|
+
|
251
|
+
it "should not remove home when relative" do
|
252
|
+
allow(provider).to receive(:home).and_return('relative_path')
|
253
|
+
|
254
|
+
expect(Puppet).to receive(:debug).with(/Please make sure the path is not relative, symlink or '\/'./)
|
255
|
+
provider.delete
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should not remove home when '/'" do
|
259
|
+
allow(provider).to receive(:home).and_return('/')
|
260
|
+
|
261
|
+
expect(Puppet).to receive(:debug).with(/Please make sure the path is not relative, symlink or '\/'./)
|
262
|
+
provider.delete
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should not remove home when symlink" do
|
266
|
+
allow(Puppet::FileSystem).to receive(:symlink?).with(Dir.tmpdir).and_return(true)
|
267
|
+
|
268
|
+
expect(Puppet).to receive(:debug).with(/Please make sure the path is not relative, symlink or '\/'./)
|
269
|
+
provider.delete
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should not remove home when other users would be affected" do
|
273
|
+
allow(provider).to receive(:home).and_return('/special')
|
274
|
+
allow(File).to receive(:realpath).with('/special').and_return('/special')
|
275
|
+
allow(Puppet::Util).to receive(:absolute_path?).with('/special').and_return(true)
|
276
|
+
allow(provider).to receive(:list_all_homes).and_return([{:name => 'other_user', :home => '/special/other_user'}])
|
277
|
+
|
278
|
+
expect(Puppet).to receive(:debug).with(/it would remove the home directory '\/special\/other_user' of user 'other_user' also./)
|
279
|
+
provider.delete
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'should remove homedir' do
|
283
|
+
expect(FileUtils).to receive(:remove_entry_secure).with(Dir.tmpdir, true)
|
284
|
+
provider.delete
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
context 'with managehome false' do
|
289
|
+
before(:each) do
|
290
|
+
allow(provider.resource).to receive(:managehome?).and_return(false)
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'should delete the user without error' do
|
294
|
+
expect{ provider.delete }.not_to raise_error
|
295
|
+
end
|
296
|
+
|
297
|
+
it 'should not remove homedir' do
|
298
|
+
expect(FileUtils).not_to receive(:remove_entry_secure).with(Dir.tmpdir, true)
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'should not print manage home debug messages' do
|
302
|
+
expect(Puppet).not_to receive(:debug).with(/Please make sure the path is not relative, symlink or '\/'./)
|
303
|
+
expect(Puppet).not_to receive(:debug).with(/it would remove the home directory '\/special\/other_user' of user 'other_user' also./)
|
304
|
+
|
305
|
+
provider.delete
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
describe '#deletecmd' do
|
311
|
+
it 'uses the -p flag when removing the user' do
|
312
|
+
allow(provider.class).to receive(:command).with(:delete).and_return('delete')
|
313
|
+
allow(provider).to receive(:ia_module_args).and_return(['ia_module_args'])
|
314
|
+
|
315
|
+
expect(provider.deletecmd).to eql(
|
316
|
+
['delete', '-p', 'ia_module_args', provider.resource.name]
|
317
|
+
)
|
318
|
+
end
|
319
|
+
end
|
220
320
|
end
|
@@ -1142,7 +1142,7 @@ end
|
|
1142
1142
|
provider.class.instance_variable_set(:@os_version, nil) if provider.class.instance_variable_defined? :@os_version
|
1143
1143
|
end
|
1144
1144
|
|
1145
|
-
it 'should call
|
1145
|
+
it 'should call Puppet.runtime[:facter].value(:macosx_productversion_major) ONLY ONCE no matter how ' +
|
1146
1146
|
'many times get_os_version() is called' do
|
1147
1147
|
expect(Facter).to receive(:value).with(:macosx_productversion_major).once.and_return('10.8')
|
1148
1148
|
expect(provider.class.get_os_version).to eq('10.8')
|
@@ -13,6 +13,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
|
|
13
13
|
allow(described_class).to receive(:command).with(:localmodify).and_return('/usr/sbin/lusermod')
|
14
14
|
allow(described_class).to receive(:command).with(:delete).and_return('/usr/sbin/userdel')
|
15
15
|
allow(described_class).to receive(:command).with(:localdelete).and_return('/usr/sbin/luserdel')
|
16
|
+
allow(described_class).to receive(:command).with(:chpasswd).and_return('/usr/sbin/chpasswd')
|
16
17
|
end
|
17
18
|
|
18
19
|
let(:resource) do
|
@@ -62,7 +63,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
|
|
62
63
|
:provider => provider,
|
63
64
|
)
|
64
65
|
resource2[:ensure] = :present
|
65
|
-
expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true))
|
66
|
+
expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true)).twice
|
66
67
|
provider.create
|
67
68
|
end
|
68
69
|
|
@@ -208,7 +209,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
|
|
208
209
|
end
|
209
210
|
|
210
211
|
it "should call execute with sensitive if sensitive data is changed" do
|
211
|
-
expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true))
|
212
|
+
expect(provider).to receive(:execute).with(kind_of(Array), hash_including(sensitive: true)).and_return('')
|
212
213
|
provider.password = 'bird bird bird'
|
213
214
|
end
|
214
215
|
end
|
@@ -351,6 +352,46 @@ describe Puppet::Type.type(:user).provider(:useradd) do
|
|
351
352
|
end
|
352
353
|
end
|
353
354
|
|
355
|
+
describe "#shell" do
|
356
|
+
before { described_class.has_feature :manages_local_users_and_groups }
|
357
|
+
|
358
|
+
let(:content) { "myuser:x:x:x:x:x:/bin/local_shell" }
|
359
|
+
|
360
|
+
it "should return the local shell string when forcelocal is true" do
|
361
|
+
resource[:forcelocal] = true
|
362
|
+
allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
|
363
|
+
allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
|
364
|
+
expect(provider.shell).to eq('/bin/local_shell')
|
365
|
+
end
|
366
|
+
|
367
|
+
it "should fall back to nameservice shell string when forcelocal is false" do
|
368
|
+
resource[:forcelocal] = false
|
369
|
+
allow(provider).to receive(:get).with(:shell).and_return('/bin/remote_shell')
|
370
|
+
expect(provider).not_to receive(:localshell)
|
371
|
+
expect(provider.shell).to eq('/bin/remote_shell')
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe "#home" do
|
376
|
+
before { described_class.has_feature :manages_local_users_and_groups }
|
377
|
+
|
378
|
+
let(:content) { "myuser:x:x:x:x:/opt/local_home:x" }
|
379
|
+
|
380
|
+
it "should return the local home string when forcelocal is true" do
|
381
|
+
resource[:forcelocal] = true
|
382
|
+
allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
|
383
|
+
allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
|
384
|
+
expect(provider.home).to eq('/opt/local_home')
|
385
|
+
end
|
386
|
+
|
387
|
+
it "should fall back to nameservice home string when forcelocal is false" do
|
388
|
+
resource[:forcelocal] = false
|
389
|
+
allow(provider).to receive(:get).with(:home).and_return('/opt/remote_home')
|
390
|
+
expect(provider).not_to receive(:localhome)
|
391
|
+
expect(provider.home).to eq('/opt/remote_home')
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
354
395
|
describe "#gid" do
|
355
396
|
before { described_class.has_feature :manages_local_users_and_groups }
|
356
397
|
|
data/spec/unit/provider_spec.rb
CHANGED
@@ -222,18 +222,18 @@ describe Puppet::Provider do
|
|
222
222
|
{ :true => false } => false,
|
223
223
|
{ :false => false } => true,
|
224
224
|
{ :false => true } => false,
|
225
|
-
{ :operatingsystem =>
|
225
|
+
{ :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem) } => true,
|
226
226
|
{ :operatingsystem => :yayness } => false,
|
227
227
|
{ :nothing => :yayness } => false,
|
228
228
|
{ :exists => Puppet::Util.which(existing_command) } => true,
|
229
229
|
{ :exists => "/this/file/does/not/exist" } => false,
|
230
230
|
{ :true => true, :exists => Puppet::Util.which(existing_command) } => true,
|
231
231
|
{ :true => true, :exists => "/this/file/does/not/exist" } => false,
|
232
|
-
{ :operatingsystem =>
|
232
|
+
{ :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem),
|
233
233
|
:exists => Puppet::Util.which(existing_command) } => true,
|
234
234
|
{ :operatingsystem => :yayness,
|
235
235
|
:exists => Puppet::Util.which(existing_command) } => false,
|
236
|
-
{ :operatingsystem =>
|
236
|
+
{ :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem),
|
237
237
|
:exists => "/this/file/does/not/exist" } => false,
|
238
238
|
{ :operatingsystem => :yayness,
|
239
239
|
:exists => "/this/file/does/not/exist" } => false,
|
@@ -269,7 +269,7 @@ describe Puppet::Provider do
|
|
269
269
|
end
|
270
270
|
|
271
271
|
context "default providers" do
|
272
|
-
let :os do
|
272
|
+
let :os do Puppet.runtime[:facter].value(:operatingsystem) end
|
273
273
|
|
274
274
|
it { is_expected.to respond_to :specificity }
|
275
275
|
|
data/spec/unit/puppet_spec.rb
CHANGED
@@ -91,12 +91,20 @@ describe Puppet do
|
|
91
91
|
expect(Puppet.runtime[:http]).to be_an_instance_of(Puppet::HTTP::Client)
|
92
92
|
end
|
93
93
|
|
94
|
-
it 'allows
|
95
|
-
|
96
|
-
Puppet.initialize_settings([], true, true, http:
|
94
|
+
it 'allows a http implementation to be registered' do
|
95
|
+
http_impl = double('http')
|
96
|
+
Puppet.initialize_settings([], true, true, http: http_impl)
|
97
97
|
|
98
98
|
|
99
|
-
expect(Puppet.runtime[:http]).to eq(
|
99
|
+
expect(Puppet.runtime[:http]).to eq(http_impl)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'allows a facter implementation to be registered' do
|
103
|
+
facter_impl = double('facter')
|
104
|
+
Puppet.initialize_settings([], true, true, facter: facter_impl)
|
105
|
+
|
106
|
+
|
107
|
+
expect(Puppet.runtime[:facter]).to eq(facter_impl)
|
100
108
|
end
|
101
109
|
end
|
102
110
|
|
@@ -338,33 +338,27 @@ describe Puppet::SSL::CertificateRequest do
|
|
338
338
|
expect(csr.verify(key.content)).to be_truthy
|
339
339
|
end
|
340
340
|
|
341
|
-
|
342
|
-
|
343
|
-
# The problem seems to be with the ability to sign a CSR when using either of
|
344
|
-
# these hash algorithms
|
345
|
-
pending "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
|
341
|
+
it "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
|
342
|
+
key = OpenSSL::PKey::RSA.new(2048)
|
346
343
|
csr = OpenSSL::X509::Request.new
|
347
344
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
|
348
345
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
|
349
346
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA512").and_return(true)
|
350
347
|
signer = Puppet::SSL::CertificateSigner.new
|
351
|
-
signer.sign(csr, key
|
352
|
-
expect(csr.verify(key
|
348
|
+
signer.sign(csr, key)
|
349
|
+
expect(csr.verify(key)).to be_truthy
|
353
350
|
end
|
354
351
|
|
355
|
-
|
356
|
-
|
357
|
-
# The problem seems to be with the ability to sign a CSR when using either of
|
358
|
-
# these hash algorithms
|
359
|
-
pending "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
|
352
|
+
it "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
|
353
|
+
key = OpenSSL::PKey::RSA.new(2048)
|
360
354
|
csr = OpenSSL::X509::Request.new
|
361
355
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
|
362
356
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
|
363
357
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA512").and_return(false)
|
364
358
|
expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA384").and_return(true)
|
365
359
|
signer = Puppet::SSL::CertificateSigner.new
|
366
|
-
signer.sign(csr, key
|
367
|
-
expect(csr.verify(key
|
360
|
+
signer.sign(csr, key)
|
361
|
+
expect(csr.verify(key)).to be_truthy
|
368
362
|
end
|
369
363
|
|
370
364
|
it "should use SHA224 to sign the csr when SHA256/SHA1/SHA512/SHA384 aren't available" do
|
@@ -158,6 +158,33 @@ describe test_title, "when validating attribute values" do
|
|
158
158
|
expect(srv[:timeout]).to eq(int)
|
159
159
|
end
|
160
160
|
end
|
161
|
+
|
162
|
+
it "should default :timeout to 10 when provider has no default value" do
|
163
|
+
srv = Puppet::Type.type(:service).new(:name => "yay")
|
164
|
+
expect(srv[:timeout]).to eq(10)
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should default :timeout to provider given default time when it has one" do
|
168
|
+
provider_class_with_timeout = Puppet::Type.type(:service).provide(:simple) do
|
169
|
+
has_features :configurable_timeout
|
170
|
+
def default_timeout
|
171
|
+
30
|
172
|
+
end
|
173
|
+
end
|
174
|
+
allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider_class_with_timeout)
|
175
|
+
|
176
|
+
srv = Puppet::Type.type(:service).new(:name => "yay")
|
177
|
+
expect(srv[:timeout]).to eq(30)
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should accept string as value" do
|
181
|
+
srv = Puppet::Type.type(:service).new(:name => "yay", :timeout => "25")
|
182
|
+
expect(srv[:timeout]).to eq(25)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should not support values that cannot be converted to Integer such as Array" do
|
186
|
+
expect { Puppet::Type.type(:service).new(:name => "yay", :timeout => [25]) }.to raise_error(Puppet::Error)
|
187
|
+
end
|
161
188
|
end
|
162
189
|
|
163
190
|
describe "the service logon credentials" do
|
data/spec/unit/type_spec.rb
CHANGED
@@ -1122,7 +1122,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
|
|
1122
1122
|
|
1123
1123
|
before :each do
|
1124
1124
|
type.provide(:default) do
|
1125
|
-
defaultfor :operatingsystem =>
|
1125
|
+
defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
|
1126
1126
|
mk_resource_methods
|
1127
1127
|
class << self
|
1128
1128
|
attr_accessor :params
|
@@ -1152,7 +1152,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
|
|
1152
1152
|
context "with a default provider" do
|
1153
1153
|
before :each do
|
1154
1154
|
type.provide(:default) do
|
1155
|
-
defaultfor :operatingsystem =>
|
1155
|
+
defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
|
1156
1156
|
mk_resource_methods
|
1157
1157
|
class << self
|
1158
1158
|
attr_accessor :names
|
@@ -552,6 +552,7 @@ original
|
|
552
552
|
|
553
553
|
describe 'does support debugging' do
|
554
554
|
before :each do
|
555
|
+
allow(Facter).to receive(:respond_to?).with(:on_message).and_return(true)
|
555
556
|
allow(Facter).to receive(:respond_to?).with(:debugging, any_args).and_return(true)
|
556
557
|
end
|
557
558
|
|
@@ -568,6 +569,7 @@ original
|
|
568
569
|
|
569
570
|
describe 'does support trace' do
|
570
571
|
before :each do
|
572
|
+
allow(Facter).to receive(:respond_to?).with(:on_message)
|
571
573
|
allow(Facter).to receive(:respond_to?).with(:trace, any_args).and_return(true)
|
572
574
|
end
|
573
575
|
|
data/tasks/parallel.rake
CHANGED
@@ -5,9 +5,9 @@ require 'thread'
|
|
5
5
|
begin
|
6
6
|
require 'rspec'
|
7
7
|
require 'rspec/core/formatters/helpers'
|
8
|
-
require '
|
8
|
+
require 'etc'
|
9
9
|
rescue LoadError
|
10
|
-
# Don't define the task if we don't have rspec
|
10
|
+
# Don't define the task if we don't have rspec present
|
11
11
|
else
|
12
12
|
module Parallel
|
13
13
|
module RSpec
|
@@ -401,7 +401,7 @@ else
|
|
401
401
|
# Default group size in rspec examples
|
402
402
|
DEFAULT_GROUP_SIZE = 1000
|
403
403
|
|
404
|
-
process_count = [(args[:process_count] ||
|
404
|
+
process_count = [(args[:process_count] || Etc.nprocessors).to_i, 1].max
|
405
405
|
group_size = [(args[:group_size] || DEFAULT_GROUP_SIZE).to_i, 1].max
|
406
406
|
|
407
407
|
abort unless Parallel::RSpec::Parallelizer.new(process_count, group_size, color_output?, args.extras).run
|