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.

Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +12 -12
  4. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  5. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  6. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  11. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  12. data/ext/README.md +13 -0
  13. data/lib/puppet/application/agent.rb +4 -0
  14. data/lib/puppet/application/apply.rb +20 -2
  15. data/lib/puppet/application/resource.rb +15 -13
  16. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  17. data/lib/puppet/configurer.rb +85 -57
  18. data/lib/puppet/confine/variable.rb +1 -1
  19. data/lib/puppet/defaults.rb +36 -30
  20. data/lib/puppet/environments.rb +66 -26
  21. data/lib/puppet/face/facts.rb +1 -1
  22. data/lib/puppet/facter_impl.rb +96 -0
  23. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  24. data/lib/puppet/file_serving/configuration.rb +3 -0
  25. data/lib/puppet/file_serving/mount/file.rb +4 -4
  26. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  27. data/lib/puppet/file_system/file_impl.rb +3 -1
  28. data/lib/puppet/forge.rb +1 -1
  29. data/lib/puppet/functions/find_template.rb +2 -2
  30. data/lib/puppet/http/service/compiler.rb +6 -1
  31. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  32. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  33. data/lib/puppet/indirector/facts/facter.rb +6 -6
  34. data/lib/puppet/indirector/indirection.rb +1 -1
  35. data/lib/puppet/indirector/terminus.rb +4 -0
  36. data/lib/puppet/module/plan.rb +0 -1
  37. data/lib/puppet/module/task.rb +1 -1
  38. data/lib/puppet/module.rb +1 -0
  39. data/lib/puppet/module_tool/applications/installer.rb +8 -4
  40. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  41. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  42. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  43. data/lib/puppet/node/environment.rb +10 -11
  44. data/lib/puppet/pal/pal_impl.rb +1 -1
  45. data/lib/puppet/parser/scope.rb +1 -0
  46. data/lib/puppet/parser/templatewrapper.rb +1 -0
  47. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  48. data/lib/puppet/pops/model/ast.rb +1 -0
  49. data/lib/puppet/pops/model/factory.rb +2 -1
  50. data/lib/puppet/pops/parser/eparser.rb +201 -201
  51. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  52. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  53. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  54. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  55. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  56. data/lib/puppet/pops/types/types.rb +1 -1
  57. data/lib/puppet/provider/aix_object.rb +1 -1
  58. data/lib/puppet/provider/group/groupadd.rb +5 -2
  59. data/lib/puppet/provider/package/pkg.rb +19 -2
  60. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  61. data/lib/puppet/provider/package/yum.rb +1 -1
  62. data/lib/puppet/provider/service/base.rb +1 -1
  63. data/lib/puppet/provider/service/init.rb +5 -5
  64. data/lib/puppet/provider/service/launchd.rb +2 -2
  65. data/lib/puppet/provider/service/redhat.rb +1 -1
  66. data/lib/puppet/provider/service/smf.rb +3 -3
  67. data/lib/puppet/provider/service/systemd.rb +2 -2
  68. data/lib/puppet/provider/service/upstart.rb +5 -5
  69. data/lib/puppet/provider/user/aix.rb +44 -1
  70. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  71. data/lib/puppet/provider/user/useradd.rb +72 -16
  72. data/lib/puppet/provider.rb +1 -1
  73. data/lib/puppet/reference/providers.rb +2 -2
  74. data/lib/puppet/resource/type_collection.rb +1 -0
  75. data/lib/puppet/runtime.rb +11 -1
  76. data/lib/puppet/settings.rb +2 -2
  77. data/lib/puppet/test/test_helper.rb +4 -1
  78. data/lib/puppet/transaction/persistence.rb +11 -1
  79. data/lib/puppet/transaction/report.rb +15 -1
  80. data/lib/puppet/type/exec.rb +19 -2
  81. data/lib/puppet/type/file.rb +6 -6
  82. data/lib/puppet/type/filebucket.rb +3 -3
  83. data/lib/puppet/type/group.rb +0 -1
  84. data/lib/puppet/type/resources.rb +1 -1
  85. data/lib/puppet/type/service.rb +8 -3
  86. data/lib/puppet/type/user.rb +0 -1
  87. data/lib/puppet/type.rb +1 -1
  88. data/lib/puppet/util/command_line.rb +1 -1
  89. data/lib/puppet/util/filetype.rb +2 -2
  90. data/lib/puppet/util/json.rb +3 -0
  91. data/lib/puppet/util/log.rb +1 -2
  92. data/lib/puppet/util/logging.rb +1 -25
  93. data/lib/puppet/util/pidlock.rb +1 -1
  94. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  95. data/lib/puppet/util/suidmanager.rb +1 -2
  96. data/lib/puppet/util/tagging.rb +1 -0
  97. data/lib/puppet/util/windows/user.rb +0 -2
  98. data/lib/puppet/util.rb +4 -3
  99. data/lib/puppet/version.rb +1 -1
  100. data/lib/puppet.rb +2 -6
  101. data/locales/puppet.pot +246 -230
  102. data/man/man5/puppet.conf.5 +33 -25
  103. data/man/man8/puppet-agent.8 +4 -1
  104. data/man/man8/puppet-apply.8 +1 -1
  105. data/man/man8/puppet-catalog.8 +1 -1
  106. data/man/man8/puppet-config.8 +1 -1
  107. data/man/man8/puppet-describe.8 +1 -1
  108. data/man/man8/puppet-device.8 +1 -1
  109. data/man/man8/puppet-doc.8 +1 -1
  110. data/man/man8/puppet-epp.8 +1 -1
  111. data/man/man8/puppet-facts.8 +1 -1
  112. data/man/man8/puppet-filebucket.8 +1 -1
  113. data/man/man8/puppet-generate.8 +1 -1
  114. data/man/man8/puppet-help.8 +1 -1
  115. data/man/man8/puppet-key.8 +1 -1
  116. data/man/man8/puppet-lookup.8 +1 -1
  117. data/man/man8/puppet-man.8 +1 -1
  118. data/man/man8/puppet-module.8 +3 -3
  119. data/man/man8/puppet-node.8 +1 -1
  120. data/man/man8/puppet-parser.8 +1 -1
  121. data/man/man8/puppet-plugin.8 +1 -1
  122. data/man/man8/puppet-report.8 +1 -1
  123. data/man/man8/puppet-resource.8 +1 -1
  124. data/man/man8/puppet-script.8 +1 -1
  125. data/man/man8/puppet-ssl.8 +1 -1
  126. data/man/man8/puppet-status.8 +1 -1
  127. data/man/man8/puppet.8 +2 -2
  128. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  129. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  130. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  131. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  132. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  133. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  134. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  135. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  136. data/spec/integration/application/agent_spec.rb +113 -37
  137. data/spec/integration/application/filebucket_spec.rb +5 -0
  138. data/spec/integration/configurer_spec.rb +18 -2
  139. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  140. data/spec/integration/l10n/compiler_spec.rb +37 -0
  141. data/spec/integration/transaction/report_spec.rb +1 -1
  142. data/spec/integration/type/file_spec.rb +2 -2
  143. data/spec/integration/type/package_spec.rb +6 -6
  144. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  145. data/spec/integration/util/windows/process_spec.rb +1 -9
  146. data/spec/lib/puppet_spec/modules.rb +13 -2
  147. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  148. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  149. data/spec/shared_contexts/l10n.rb +27 -0
  150. data/spec/spec_helper.rb +1 -10
  151. data/spec/unit/application/apply_spec.rb +76 -56
  152. data/spec/unit/application/resource_spec.rb +29 -0
  153. data/spec/unit/configurer_spec.rb +171 -56
  154. data/spec/unit/defaults_spec.rb +1 -0
  155. data/spec/unit/environments_spec.rb +150 -1
  156. data/spec/unit/facter_impl_spec.rb +31 -0
  157. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  158. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  159. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  160. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  161. data/spec/unit/file_system_spec.rb +7 -0
  162. data/spec/unit/functions/logging_spec.rb +1 -0
  163. data/spec/unit/functions/lookup_spec.rb +64 -0
  164. data/spec/unit/http/service/compiler_spec.rb +8 -0
  165. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  166. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  167. data/spec/unit/indirector/indirection_spec.rb +10 -3
  168. data/spec/unit/interface/action_spec.rb +0 -9
  169. data/spec/unit/module_spec.rb +15 -1
  170. data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
  171. data/spec/unit/network/authstore_spec.rb +0 -15
  172. data/spec/unit/network/formats_spec.rb +6 -0
  173. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  174. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  175. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  176. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  177. data/spec/unit/provider/package/gem_spec.rb +1 -1
  178. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  179. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  180. data/spec/unit/provider/package/pip_spec.rb +1 -1
  181. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  182. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  183. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  184. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  185. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  186. data/spec/unit/provider/user/aix_spec.rb +100 -0
  187. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  188. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  189. data/spec/unit/provider_spec.rb +4 -4
  190. data/spec/unit/puppet_spec.rb +12 -4
  191. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  192. data/spec/unit/type/service_spec.rb +27 -0
  193. data/spec/unit/type_spec.rb +2 -2
  194. data/spec/unit/util/logging_spec.rb +2 -0
  195. data/tasks/parallel.rake +3 -3
  196. metadata +37 -94
  197. data/ext/README.environment +0 -8
  198. data/ext/dbfix.sql +0 -132
  199. data/ext/debian/README.Debian +0 -8
  200. data/ext/debian/README.source +0 -2
  201. data/ext/debian/TODO.Debian +0 -1
  202. data/ext/debian/changelog.erb +0 -1122
  203. data/ext/debian/compat +0 -1
  204. data/ext/debian/control +0 -144
  205. data/ext/debian/copyright +0 -339
  206. data/ext/debian/docs +0 -1
  207. data/ext/debian/fileserver.conf +0 -41
  208. data/ext/debian/puppet-common.dirs +0 -13
  209. data/ext/debian/puppet-common.install +0 -3
  210. data/ext/debian/puppet-common.lintian-overrides +0 -5
  211. data/ext/debian/puppet-common.manpages +0 -28
  212. data/ext/debian/puppet-common.postinst +0 -35
  213. data/ext/debian/puppet-common.postrm +0 -33
  214. data/ext/debian/puppet-el.dirs +0 -1
  215. data/ext/debian/puppet-el.emacsen-install +0 -25
  216. data/ext/debian/puppet-el.emacsen-remove +0 -11
  217. data/ext/debian/puppet-el.emacsen-startup +0 -9
  218. data/ext/debian/puppet-el.install +0 -1
  219. data/ext/debian/puppet-testsuite.install +0 -2
  220. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  221. data/ext/debian/puppet.lintian-overrides +0 -3
  222. data/ext/debian/puppet.logrotate +0 -20
  223. data/ext/debian/puppet.postinst +0 -20
  224. data/ext/debian/puppet.postrm +0 -20
  225. data/ext/debian/puppet.preinst +0 -20
  226. data/ext/debian/puppetmaster-common.install +0 -2
  227. data/ext/debian/puppetmaster-common.manpages +0 -2
  228. data/ext/debian/puppetmaster-common.postinst +0 -6
  229. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  230. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  231. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  232. data/ext/debian/puppetmaster.README.debian +0 -17
  233. data/ext/debian/puppetmaster.default +0 -14
  234. data/ext/debian/puppetmaster.init +0 -137
  235. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  236. data/ext/debian/puppetmaster.postinst +0 -20
  237. data/ext/debian/puppetmaster.postrm +0 -5
  238. data/ext/debian/puppetmaster.preinst +0 -22
  239. data/ext/debian/rules +0 -132
  240. data/ext/debian/source/format +0 -1
  241. data/ext/debian/source/options +0 -1
  242. data/ext/debian/vim-puppet.README.Debian +0 -13
  243. data/ext/debian/vim-puppet.dirs +0 -5
  244. data/ext/debian/vim-puppet.yaml +0 -7
  245. data/ext/debian/watch +0 -2
  246. data/ext/freebsd/puppetd +0 -26
  247. data/ext/freebsd/puppetmasterd +0 -26
  248. data/ext/gentoo/conf.d/puppet +0 -5
  249. data/ext/gentoo/conf.d/puppetmaster +0 -12
  250. data/ext/gentoo/init.d/puppet +0 -38
  251. data/ext/gentoo/init.d/puppetmaster +0 -51
  252. data/ext/gentoo/puppet/fileserver.conf +0 -41
  253. data/ext/ips/puppet-agent +0 -44
  254. data/ext/ips/puppet-master +0 -44
  255. data/ext/ips/puppet.p5m.erb +0 -12
  256. data/ext/ips/puppetagent.xml +0 -42
  257. data/ext/ips/puppetmaster.xml +0 -42
  258. data/ext/ips/rules +0 -19
  259. data/ext/ips/transforms +0 -34
  260. data/ext/ldap/puppet.schema +0 -24
  261. data/ext/logcheck/puppet +0 -23
  262. data/ext/osx/file_mapping.yaml +0 -33
  263. data/ext/osx/postflight.erb +0 -109
  264. data/ext/osx/preflight.erb +0 -52
  265. data/ext/osx/prototype.plist.erb +0 -38
  266. data/ext/redhat/fileserver.conf +0 -41
  267. data/ext/redhat/logrotate +0 -21
  268. data/ext/redhat/puppet.spec.erb +0 -842
  269. data/ext/redhat/server.init +0 -128
  270. data/ext/redhat/server.sysconfig +0 -13
  271. data/ext/solaris/pkginfo +0 -6
  272. data/ext/solaris/smf/puppetd.xml +0 -77
  273. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  274. data/ext/solaris/smf/svc-puppetd +0 -71
  275. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  276. data/ext/suse/puppet.spec +0 -310
  277. data/ext/suse/server.init +0 -173
  278. data/ext/yaml_nodes.rb +0 -105
  279. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -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/)
@@ -129,6 +129,35 @@ describe Puppet::Application::Resource do
129
129
  end
130
130
 
131
131
  describe "when printing output" do
132
+ it "should not emit puppet class tags when printing yaml" do
133
+ Puppet::Type.newtype(:stringify) do
134
+ ensurable
135
+ newparam(:name, isnamevar: true)
136
+ newproperty(:string)
137
+ end
138
+
139
+ Puppet::Type.type(:stringify).provide(:stringify) do
140
+ def exists?
141
+ true
142
+ end
143
+
144
+ def string
145
+ Puppet::Util::Execution::ProcessOutput.new('test', 0)
146
+ end
147
+ end
148
+
149
+ @resource_app.options[:to_yaml] = true
150
+ allow(@resource_app.command_line).to receive(:args).and_return(['stringify', 'hello', 'ensure=present', 'string=asd'])
151
+ expect(@resource_app).to receive(:puts).with(<<~YAML)
152
+ ---
153
+ stringify:
154
+ hello:
155
+ ensure: present
156
+ string: test
157
+ YAML
158
+ expect { @resource_app.main }.not_to raise_error
159
+ end
160
+
132
161
  it "should ensure all values to be printed are in the external encoding" do
133
162
  resources = [
134
163
  Puppet::Type.type(:user).new(:name => "\u2603".force_encoding(Encoding::UTF_8)).to_resource,