puppet 7.10.0 → 7.11.0

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.

Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +9 -9
  4. data/lib/puppet/application/agent.rb +4 -0
  5. data/lib/puppet/application/apply.rb +20 -2
  6. data/lib/puppet/application/resource.rb +15 -13
  7. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  8. data/lib/puppet/configurer.rb +14 -4
  9. data/lib/puppet/confine/variable.rb +1 -1
  10. data/lib/puppet/defaults.rb +9 -3
  11. data/lib/puppet/facter_impl.rb +96 -0
  12. data/lib/puppet/file_serving/mount/file.rb +4 -4
  13. data/lib/puppet/file_system/file_impl.rb +3 -1
  14. data/lib/puppet/forge.rb +1 -1
  15. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  16. data/lib/puppet/indirector/facts/facter.rb +6 -6
  17. data/lib/puppet/indirector/indirection.rb +1 -1
  18. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  19. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  20. data/lib/puppet/pal/pal_impl.rb +1 -1
  21. data/lib/puppet/parser/scope.rb +8 -7
  22. data/lib/puppet/parser/templatewrapper.rb +1 -0
  23. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  24. data/lib/puppet/pops/model/ast.rb +1 -0
  25. data/lib/puppet/pops/model/factory.rb +14 -13
  26. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  27. data/lib/puppet/pops/parser/eparser.rb +752 -753
  28. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  29. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  30. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  31. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  32. data/lib/puppet/pops/types/types.rb +1 -1
  33. data/lib/puppet/provider/aix_object.rb +1 -1
  34. data/lib/puppet/provider/group/groupadd.rb +5 -2
  35. data/lib/puppet/provider/package/pkg.rb +1 -1
  36. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  37. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  38. data/lib/puppet/provider/package/yum.rb +1 -1
  39. data/lib/puppet/provider/service/base.rb +1 -1
  40. data/lib/puppet/provider/service/init.rb +5 -5
  41. data/lib/puppet/provider/service/launchd.rb +1 -1
  42. data/lib/puppet/provider/service/redhat.rb +1 -1
  43. data/lib/puppet/provider/service/smf.rb +3 -3
  44. data/lib/puppet/provider/service/systemd.rb +1 -1
  45. data/lib/puppet/provider/service/upstart.rb +5 -5
  46. data/lib/puppet/provider/user/aix.rb +44 -1
  47. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  48. data/lib/puppet/provider/user/useradd.rb +10 -7
  49. data/lib/puppet/provider.rb +1 -1
  50. data/lib/puppet/reference/providers.rb +2 -2
  51. data/lib/puppet/resource/type_collection.rb +2 -1
  52. data/lib/puppet/runtime.rb +11 -1
  53. data/lib/puppet/settings/file_setting.rb +3 -8
  54. data/lib/puppet/settings.rb +2 -2
  55. data/lib/puppet/test/test_helper.rb +4 -1
  56. data/lib/puppet/type/exec.rb +9 -1
  57. data/lib/puppet/type/group.rb +0 -1
  58. data/lib/puppet/type/resources.rb +1 -1
  59. data/lib/puppet/type/user.rb +0 -1
  60. data/lib/puppet/util/command_line.rb +1 -1
  61. data/lib/puppet/util/filetype.rb +2 -2
  62. data/lib/puppet/util/log.rb +1 -2
  63. data/lib/puppet/util/logging.rb +1 -25
  64. data/lib/puppet/util/pidlock.rb +1 -1
  65. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  66. data/lib/puppet/util/suidmanager.rb +1 -2
  67. data/lib/puppet/util/tagging.rb +1 -0
  68. data/lib/puppet/util/windows/user.rb +0 -1
  69. data/lib/puppet/util.rb +4 -3
  70. data/lib/puppet/version.rb +1 -1
  71. data/lib/puppet.rb +2 -6
  72. data/man/man5/puppet.conf.5 +10 -2
  73. data/man/man8/puppet-agent.8 +4 -1
  74. data/man/man8/puppet-apply.8 +1 -1
  75. data/man/man8/puppet-catalog.8 +1 -1
  76. data/man/man8/puppet-config.8 +1 -1
  77. data/man/man8/puppet-describe.8 +1 -1
  78. data/man/man8/puppet-device.8 +1 -1
  79. data/man/man8/puppet-doc.8 +1 -1
  80. data/man/man8/puppet-epp.8 +1 -1
  81. data/man/man8/puppet-facts.8 +1 -1
  82. data/man/man8/puppet-filebucket.8 +1 -1
  83. data/man/man8/puppet-generate.8 +1 -1
  84. data/man/man8/puppet-help.8 +1 -1
  85. data/man/man8/puppet-lookup.8 +1 -1
  86. data/man/man8/puppet-module.8 +1 -1
  87. data/man/man8/puppet-node.8 +1 -1
  88. data/man/man8/puppet-parser.8 +1 -1
  89. data/man/man8/puppet-plugin.8 +1 -1
  90. data/man/man8/puppet-report.8 +1 -1
  91. data/man/man8/puppet-resource.8 +1 -1
  92. data/man/man8/puppet-script.8 +1 -1
  93. data/man/man8/puppet-ssl.8 +1 -1
  94. data/man/man8/puppet.8 +2 -2
  95. data/spec/integration/application/agent_spec.rb +16 -0
  96. data/spec/integration/configurer_spec.rb +1 -1
  97. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  98. data/spec/integration/transaction/report_spec.rb +1 -1
  99. data/spec/integration/type/file_spec.rb +2 -2
  100. data/spec/integration/type/package_spec.rb +6 -6
  101. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  102. data/spec/integration/util/windows/process_spec.rb +1 -9
  103. data/spec/unit/application/apply_spec.rb +76 -56
  104. data/spec/unit/application/resource_spec.rb +29 -0
  105. data/spec/unit/configurer_spec.rb +13 -3
  106. data/spec/unit/facter_impl_spec.rb +31 -0
  107. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  108. data/spec/unit/file_system_spec.rb +7 -0
  109. data/spec/unit/functions/lookup_spec.rb +64 -0
  110. data/spec/unit/indirector/indirection_spec.rb +10 -3
  111. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  112. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  113. data/spec/unit/provider/package/gem_spec.rb +1 -1
  114. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  115. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  116. data/spec/unit/provider/package/pip_spec.rb +1 -1
  117. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  118. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  119. data/spec/unit/provider/user/aix_spec.rb +100 -0
  120. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  121. data/spec/unit/provider_spec.rb +4 -4
  122. data/spec/unit/puppet_spec.rb +12 -4
  123. data/spec/unit/settings/file_setting_spec.rb +10 -7
  124. data/spec/unit/type_spec.rb +2 -2
  125. data/spec/unit/util/logging_spec.rb +2 -0
  126. data/tasks/parallel.rake +3 -3
  127. metadata +5 -2
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-AGENT" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-AGENT" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-agent\fR \- The puppet agent daemon
@@ -164,6 +164,9 @@ A path ending with \'\.jsonl\' will receive structured output in JSON Lines form
164
164
  .IP "\(bu" 4
165
165
  \-\-waitforcert: This option only matters for daemons that do not yet have certificates and it is enabled by default, with a value of 120 (seconds)\. This causes \'puppet agent\' to connect to the server every 2 minutes and ask it to sign a certificate request\. This is useful for the initial setup of a puppet client\. You can turn off waiting for certificates by specifying a time of 0\. (This is a Puppet setting, and can go in puppet\.conf\.)
166
166
  .
167
+ .IP "\(bu" 4
168
+ \-\-write_catalog_summary After compiling the catalog saves the resource list and classes list to the node in the state directory named classes\.txt and resources\.txt (This is a Puppet setting, and can go in puppet\.conf\.)
169
+ .
167
170
  .IP "" 0
168
171
  .
169
172
  .SH "EXAMPLE"
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-APPLY" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-APPLY" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-apply\fR \- Apply Puppet manifests locally
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-CATALOG" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-CATALOG" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-catalog\fR \- Compile, save, view, and convert catalogs\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-CONFIG" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-CONFIG" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-config\fR \- Interact with Puppet\'s settings\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-DESCRIBE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-DESCRIBE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-describe\fR \- Display help about resource types
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-DEVICE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-DEVICE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-device\fR \- Manage remote network devices
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-DOC" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-DOC" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-doc\fR \- Generate Puppet references
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-EPP" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-EPP" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-epp\fR \- Interact directly with the EPP template parser/renderer\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-FACTS" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-FACTS" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-facts\fR \- Retrieve and store facts\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-FILEBUCKET" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-FILEBUCKET" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-filebucket\fR \- Store and retrieve files in a filebucket
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-GENERATE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-GENERATE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-generate\fR \- Generates Puppet code from Ruby definitions\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-HELP" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-HELP" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-help\fR \- Display Puppet help\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-LOOKUP" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-LOOKUP" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-lookup\fR \- Interactive Hiera lookup
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-MODULE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-MODULE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-module\fR \- Creates, installs and searches for modules on the Puppet Forge\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-NODE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-NODE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-node\fR \- View and manage node definitions\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-PARSER" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-PARSER" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-parser\fR \- Interact directly with the parser\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-PLUGIN" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-PLUGIN" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-plugin\fR \- Interact with the Puppet plugin system\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-REPORT" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-REPORT" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-report\fR \- Create, display, and submit reports\.
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-RESOURCE" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-RESOURCE" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-resource\fR \- The resource abstraction layer shell
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-SCRIPT" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-SCRIPT" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-script\fR \- Run a puppet manifests as a script without compiling a catalog
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET\-SSL" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET\-SSL" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\-ssl\fR \- Manage SSL keys and certificates for puppet SSL clients
data/man/man8/puppet.8 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "PUPPET" "8" "August 2021" "Puppet, Inc." "Puppet manual"
4
+ .TH "PUPPET" "8" "September 2021" "Puppet, Inc." "Puppet manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBpuppet\fR
@@ -25,4 +25,4 @@ Specialized:
25
25
  catalog Compile, save, view, and convert catalogs\. describe Display help about resource types device Manage remote network devices doc Generate Puppet references epp Interact directly with the EPP template parser/renderer\. facts Retrieve and store facts\. filebucket Store and retrieve files in a filebucket generate Generates Puppet code from Ruby definitions\. node View and manage node definitions\. parser Interact directly with the parser\. plugin Interact with the Puppet plugin system\. script Run a puppet manifests as a script without compiling a catalog ssl Manage SSL keys and certificates for puppet SSL clients
26
26
  .
27
27
  .P
28
- See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v7\.10\.0
28
+ See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v7\.11\.0
@@ -626,6 +626,22 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
626
626
  expect(report.metrics).to_not be_empty
627
627
  end
628
628
  end
629
+
630
+ it "caches a report even if the REST request fails" do
631
+ server.start_server do |port|
632
+ Puppet[:serverport] = port
633
+ Puppet[:report_port] = "-1"
634
+ expect {
635
+ agent.command_line.args << '--test'
636
+ agent.run
637
+ }.to exit_with(0)
638
+ .and output(%r{Applied catalog}).to_stdout
639
+ .and output(%r{Could not send report}).to_stderr
640
+
641
+ report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
642
+ expect(report).to be
643
+ end
644
+ end
629
645
  end
630
646
 
631
647
  context "environment convergence" do
@@ -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
 
@@ -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
- Facter.add(:downcase_test) do
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
- Facter.add(:custom) do
37
+ Puppet.runtime[:facter].add(:custom) do
38
38
  setcode do
39
- Facter.value('puppetversion')
39
+ Puppet.runtime[:facter].value('puppetversion')
40
40
  end
41
41
  end
42
42
  EOF
@@ -48,7 +48,7 @@ describe Puppet::Transaction::Report do
48
48
  expect(Puppet::Transaction::Report.indirection).to receive(:save) do |report, x|
49
49
  last_run_report = report
50
50
  true
51
- end.twice
51
+ end.exactly(4)
52
52
 
53
53
  Puppet[:report] = true
54
54
  Puppet[:noop] = noop1
@@ -1710,11 +1710,11 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1710
1710
 
1711
1711
  describe "when using validate_cmd" do
1712
1712
  test_cmd = '/bin/test'
1713
- if Facter.value(:osfamily) == 'Debian'
1713
+ if Puppet.runtime[:facter].value(:osfamily) == 'Debian'
1714
1714
  test_cmd = '/usr/bin/test'
1715
1715
  end
1716
1716
 
1717
- if Facter.value(:operatingsystem) == 'Darwin'
1717
+ if Puppet.runtime[:facter].value(:operatingsystem) == 'Darwin'
1718
1718
  stat_cmd = "stat -f '%Lp'"
1719
1719
  else
1720
1720
  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(Facter.value(:kernelrelease), '5.11') >= 0
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?(Facter.value(:lsbdistrelease))
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(Facter.value(:operatingsystemmajrelease), '22') >= 0
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(Facter.value(:operatingsystemmajrelease), '10') >= 0
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(Facter.value(:operatingsystem))
58
- pending("No default provider specified in this test for #{Facter.value(:operatingsystem)}")
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
@@ -91,7 +91,7 @@ end
91
91
  File.join(modules_dir, 'a_module', 'lib', 'facter', 'a_fact.rb'),
92
92
  <<-EOF
93
93
  # The a_fact fact comment
94
- Facter.add("a_fact") do
94
+ Puppet.runtime[:facter].add("a_fact") do
95
95
  end
96
96
  EOF
97
97
  ],
@@ -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 on Vista / 2008+",
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
@@ -10,21 +10,22 @@ describe Puppet::Application::Apply do
10
10
 
11
11
  before :each do
12
12
  @apply = Puppet::Application[:apply]
13
- allow(Puppet::Util::Log).to receive(:newdestination)
14
13
  Puppet[:reports] = "none"
15
14
  end
16
15
 
17
- [:debug,:loadclasses,:test,:verbose,:use_nodes,:detailed_exitcodes,:catalog, :write_catalog_summary].each do |option|
18
- it "should declare handle_#{option} method" do
19
- expect(@apply).to respond_to("handle_#{option}".to_sym)
20
- end
21
-
16
+ [:debug,:loadclasses,:test,:verbose,:use_nodes,:detailed_exitcodes,:catalog].each do |option|
22
17
  it "should store argument value when calling handle_#{option}" do
23
18
  expect(@apply.options).to receive(:[]=).with(option, 'arg')
24
19
  @apply.send("handle_#{option}".to_sym, 'arg')
25
20
  end
26
21
  end
27
22
 
23
+ it "should handle write_catalog_summary" do
24
+ @apply.send(:handle_write_catalog_summary, true)
25
+
26
+ expect(Puppet[:write_catalog_summary]).to eq(true)
27
+ end
28
+
28
29
  it "should set the code to the provided code when :execute is used" do
29
30
  expect(@apply.options).to receive(:[]=).with(:code, 'arg')
30
31
  @apply.send("handle_execute".to_sym, 'arg')
@@ -53,23 +54,18 @@ describe Puppet::Application::Apply do
53
54
  end
54
55
 
55
56
  describe "with --test" do
56
- it "should call setup_test" do
57
- @apply.options[:test] = true
58
- expect(@apply).to receive(:setup_test)
59
-
60
- @apply.setup
61
- end
62
-
63
57
  it "should set options[:verbose] to true" do
64
58
  @apply.setup_test
65
59
 
66
60
  expect(@apply.options[:verbose]).to eq(true)
67
61
  end
62
+
68
63
  it "should set options[:show_diff] to true" do
69
64
  Puppet.settings.override_default(:show_diff, false)
70
65
  @apply.setup_test
71
66
  expect(Puppet[:show_diff]).to eq(true)
72
67
  end
68
+
73
69
  it "should set options[:detailed_exitcodes] to true" do
74
70
  @apply.setup_test
75
71
 
@@ -155,7 +151,7 @@ describe Puppet::Application::Apply do
155
151
  end
156
152
 
157
153
  describe "when executing" do
158
- it "should dispatch to 'apply' if it was called with 'apply'" do
154
+ it "should dispatch to 'apply' if it was called with a catalog" do
159
155
  @apply.options[:catalog] = "foo"
160
156
 
161
157
  expect(@apply).to receive(:apply)
@@ -213,47 +209,52 @@ describe Puppet::Application::Apply do
213
209
  @apply.options[:code] = "code to run"
214
210
  expect(Puppet).to receive(:[]=).with(:code,"code to run")
215
211
 
216
- expect { @apply.main }.to exit_with 0
212
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
217
213
  end
218
214
 
219
215
  it "should set the code to run from STDIN if no arguments" do
220
- allow(@apply.command_line).to receive(:args).and_return([])
216
+ @apply.command_line.args = []
221
217
  allow(STDIN).to receive(:read).and_return("code to run")
222
218
 
223
219
  expect(Puppet).to receive(:[]=).with(:code,"code to run")
224
220
 
225
- expect { @apply.main }.to exit_with 0
221
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
226
222
  end
227
223
 
228
224
  it "should raise an error if a file is passed on command line and the file does not exist" do
229
225
  noexist = tmpfile('noexist.pp')
230
- allow(@apply.command_line).to receive(:args).and_return([noexist])
231
- expect { @apply.main }.to raise_error(RuntimeError, "Could not find file #{noexist}")
226
+ @apply.command_line.args << noexist
227
+ expect {
228
+ @apply.run
229
+ }.to exit_with(1)
230
+ .and output(anything).to_stdout
231
+ .and output(/Could not find file #{noexist}/).to_stderr
232
232
  end
233
233
 
234
234
  it "should set the manifest to the first file and warn other files will be skipped" do
235
235
  manifest = tmpfile('starwarsIV')
236
236
  FileUtils.touch(manifest)
237
237
 
238
- allow(@apply.command_line).to receive(:args).and_return([manifest, 'starwarsI', 'starwarsII'])
239
-
240
- expect { @apply.main }.to exit_with 0
241
-
242
- msg = @logs.find {|m| m.message =~ /Only one file can be applied per run/ }
243
- expect(msg.message).to eq('Only one file can be applied per run. Skipping starwarsI, starwarsII')
244
- expect(msg.level).to eq(:warning)
238
+ @apply.command_line.args << manifest << 'starwarsI' << 'starwarsII'
239
+ expect {
240
+ @apply.run
241
+ }.to exit_with(0)
242
+ .and output(anything).to_stdout
243
+ .and output(/Warning: Only one file can be applied per run. Skipping starwarsI, starwarsII/).to_stderr
245
244
  end
246
245
 
247
246
  it "should splay" do
248
247
  expect(@apply).to receive(:splay)
249
248
 
250
- expect { @apply.main }.to exit_with 0
249
+ expect {
250
+ @apply.run
251
+ }.to exit_with(0).and output(anything).to_stdout
251
252
  end
252
253
 
253
- it "should raise an error if we can't find the node" do
254
+ it "should exit with 1 if we can't find the node" do
254
255
  expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
255
256
 
256
- expect { @apply.main }.to raise_error(RuntimeError, /Could not find node/)
257
+ expect { @apply.run }.to exit_with(1).and output(/Could not find node/).to_stderr
257
258
  end
258
259
 
259
260
  it "should load custom classes if loadclasses" do
@@ -264,18 +265,18 @@ describe Puppet::Application::Apply do
264
265
 
265
266
  expect(@node).to receive(:classes=).with(['class'])
266
267
 
267
- expect { @apply.main }.to exit_with 0
268
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
268
269
  end
269
270
 
270
271
  it "should compile the catalog" do
271
272
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(@catalog)
272
273
 
273
- expect { @apply.main }.to exit_with 0
274
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
274
275
  end
275
276
 
276
277
  it 'should called the DeferredResolver to resolve any Deferred values' do
277
278
  expect(Puppet::Pops::Evaluator::DeferredResolver).to receive(:resolve_and_replace).with(any_args)
278
- expect { @apply.main }.to exit_with 0
279
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
279
280
  end
280
281
 
281
282
  it 'should make the Puppet::Pops::Loaders available when applying the compiled catalog' do
@@ -285,47 +286,67 @@ describe Puppet::Application::Apply do
285
286
  fail('Loaders not found') unless Puppet.lookup(:loaders) { nil }.is_a?(Puppet::Pops::Loaders)
286
287
  true
287
288
  end.and_return(0)
288
- expect { @apply.main }.to exit_with 0
289
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
289
290
  end
290
291
 
291
292
  it "should transform the catalog to ral" do
292
293
  expect(@catalog).to receive(:to_ral).and_return(@catalog)
293
294
 
294
- expect { @apply.main }.to exit_with 0
295
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
295
296
  end
296
297
 
297
298
  it "should finalize the catalog" do
298
299
  expect(@catalog).to receive(:finalize)
299
300
 
300
- expect { @apply.main }.to exit_with 0
301
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
301
302
  end
302
303
 
303
304
  it "should not save the classes or resource file by default" do
304
305
  expect(@catalog).not_to receive(:write_class_file)
305
306
  expect(@catalog).not_to receive(:write_resource_file)
306
- expect { @apply.main }.to exit_with 0
307
+
308
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
307
309
  end
308
310
 
309
- it "should save the classes and resources files when requested" do
310
- @apply.options[:write_catalog_summary] = true
311
+ it "should save the classes and resources files when requested on the command line using dashes" do
312
+ expect(@catalog).to receive(:write_class_file).once
313
+ expect(@catalog).to receive(:write_resource_file).once
314
+
315
+ # dashes are parsed by the application's OptionParser
316
+ @apply.command_line.args = ['--write-catalog-summary']
317
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
318
+ end
319
+
320
+ it "should save the classes and resources files when requested on the command line using underscores" do
321
+ expect(@catalog).to receive(:write_class_file).once
322
+ expect(@catalog).to receive(:write_resource_file).once
323
+
324
+ # underscores are parsed by the settings PuppetOptionParser
325
+ @apply.command_line.args = ['--write_catalog_summary']
326
+ Puppet.initialize_settings(['--write_catalog_summary'])
327
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
328
+ end
329
+
330
+ it "should save the classes and resources files when specified as a setting" do
331
+ Puppet[:write_catalog_summary] = true
311
332
 
312
333
  expect(@catalog).to receive(:write_class_file).once
313
334
  expect(@catalog).to receive(:write_resource_file).once
314
335
 
315
- expect { @apply.main }.to exit_with 0
336
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
316
337
  end
317
338
 
318
339
  it "should call the prerun and postrun commands on a Configurer instance" do
319
340
  expect_any_instance_of(Puppet::Configurer).to receive(:execute_prerun_command).and_return(true)
320
341
  expect_any_instance_of(Puppet::Configurer).to receive(:execute_postrun_command).and_return(true)
321
342
 
322
- expect { @apply.main }.to exit_with 0
343
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
323
344
  end
324
345
 
325
346
  it "should apply the catalog" do
326
347
  expect(@catalog).to receive(:apply).and_return(double('transaction'))
327
348
 
328
- expect { @apply.main }.to exit_with 0
349
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
329
350
  end
330
351
 
331
352
  it "should save the last run summary" do
@@ -334,7 +355,7 @@ describe Puppet::Application::Apply do
334
355
  allow(Puppet::Transaction::Report).to receive(:new).and_return(report)
335
356
 
336
357
  expect_any_instance_of(Puppet::Configurer).to receive(:save_last_run_summary).with(report)
337
- expect { @apply.main }.to exit_with 0
358
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
338
359
  end
339
360
 
340
361
  describe "when using node_name_fact" do
@@ -347,27 +368,27 @@ describe Puppet::Application::Apply do
347
368
  end
348
369
 
349
370
  it "should set the facts name based on the node_name_fact" do
350
- expect { @apply.main }.to exit_with 0
371
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
351
372
  expect(@facts.name).to eq('other_node_name')
352
373
  end
353
374
 
354
375
  it "should set the node_name_value based on the node_name_fact" do
355
- expect { @apply.main }.to exit_with 0
376
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
356
377
  expect(Puppet[:node_name_value]).to eq('other_node_name')
357
378
  end
358
379
 
359
380
  it "should merge in our node the loaded facts" do
360
381
  @facts.values.merge!('key' => 'value')
361
382
 
362
- expect { @apply.main }.to exit_with 0
383
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
363
384
 
364
385
  expect(@node.parameters['key']).to eq('value')
365
386
  end
366
387
 
367
- it "should raise an error if we can't find the facts" do
388
+ it "should exit if we can't find the facts" do
368
389
  expect(Puppet::Node::Facts.indirection).to receive(:find).and_return(nil)
369
390
 
370
- expect { @apply.main }.to raise_error(RuntimeError, /Could not find facts/)
391
+ expect { @apply.run }.to exit_with(1).and output(/Could not find facts/).to_stderr
371
392
  end
372
393
  end
373
394
 
@@ -380,14 +401,14 @@ describe Puppet::Application::Apply do
380
401
  Puppet[:noop] = false
381
402
  allow_any_instance_of(Puppet::Transaction::Report).to receive(:exit_status).and_return(666)
382
403
 
383
- expect { @apply.main }.to exit_with 666
404
+ expect { @apply.run }.to exit_with(666).and output(anything).to_stdout
384
405
  end
385
406
 
386
407
  it "should exit with report's computed exit status, even if --noop is set" do
387
408
  Puppet[:noop] = true
388
409
  allow_any_instance_of(Puppet::Transaction::Report).to receive(:exit_status).and_return(666)
389
410
 
390
- expect { @apply.main }.to exit_with 666
411
+ expect { @apply.run }.to exit_with(666).and output(anything).to_stdout
391
412
  end
392
413
 
393
414
  it "should always exit with 0 if option is disabled" do
@@ -395,7 +416,7 @@ describe Puppet::Application::Apply do
395
416
  report = double('report', :exit_status => 666)
396
417
  allow(@transaction).to receive(:report).and_return(report)
397
418
 
398
- expect { @apply.main }.to exit_with 0
419
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
399
420
  end
400
421
 
401
422
  it "should always exit with 0 if --noop" do
@@ -403,7 +424,7 @@ describe Puppet::Application::Apply do
403
424
  report = double('report', :exit_status => 666)
404
425
  allow(@transaction).to receive(:report).and_return(report)
405
426
 
406
- expect { @apply.main }.to exit_with 0
427
+ expect { @apply.run }.to exit_with(0).and output(anything).to_stdout
407
428
  end
408
429
  end
409
430
  end
@@ -503,16 +524,15 @@ describe Puppet::Application::Apply do
503
524
  }
504
525
  CODE
505
526
 
506
- @apply.options[:write_catalog_summary] = true
507
-
527
+ Puppet.settings[:write_catalog_summary] = true
508
528
  Puppet.settings[:resourcefile] = resourcefile
509
529
  Puppet.settings[:classfile] = classfile
510
530
 
511
531
  #We don't actually need the resource to do anything, we are using it's properties in other parts of the workflow.
512
- allow(Puppet::Util::Execution).to receive(:execute)
513
-
514
- expect { @apply.main }.to exit_with 0
532
+ allow_any_instance_of(Puppet::Type.type(:exec).defaultprovider).to receive(:which).and_return('cat')
533
+ allow(Puppet::Util::Execution).to receive(:execute).and_return(double(exitstatus: 0, output: ''))
515
534
 
535
+ expect { @apply.run }.to exit_with(0).and output(%r{Exec\[do it\]/returns: executed successfully}).to_stdout
516
536
  result = File.read(resourcefile)
517
537
 
518
538
  expect(result).not_to match(/secret_file_name/)