puppet 6.23.0 → 6.26.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 (397) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +4 -4
  4. data/Gemfile.lock +32 -25
  5. data/README.md +4 -4
  6. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  11. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  12. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  13. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  14. data/ext/README.md +13 -0
  15. data/ext/project_data.yaml +1 -0
  16. data/lib/puppet/application/agent.rb +4 -0
  17. data/lib/puppet/application/apply.rb +20 -2
  18. data/lib/puppet/application/filebucket.rb +1 -0
  19. data/lib/puppet/application/lookup.rb +78 -24
  20. data/lib/puppet/application/resource.rb +30 -15
  21. data/lib/puppet/application/ssl.rb +1 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +6 -3
  23. data/lib/puppet/configurer.rb +134 -56
  24. data/lib/puppet/confine/variable.rb +1 -1
  25. data/lib/puppet/defaults.rb +55 -32
  26. data/lib/puppet/environments.rb +75 -25
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/generate.rb +2 -0
  29. data/lib/puppet/face/help/action.erb +1 -0
  30. data/lib/puppet/face/help/face.erb +1 -0
  31. data/lib/puppet/face/node/clean.rb +11 -0
  32. data/lib/puppet/facter_impl.rb +96 -0
  33. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  34. data/lib/puppet/file_serving/configuration.rb +3 -0
  35. data/lib/puppet/file_serving/metadata.rb +3 -0
  36. data/lib/puppet/file_serving/mount/file.rb +4 -4
  37. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  38. data/lib/puppet/file_system/file_impl.rb +10 -8
  39. data/lib/puppet/file_system/jruby.rb +1 -1
  40. data/lib/puppet/file_system/windows.rb +6 -6
  41. data/lib/puppet/file_system.rb +1 -1
  42. data/lib/puppet/forge.rb +4 -4
  43. data/lib/puppet/functions/empty.rb +8 -0
  44. data/lib/puppet/functions/find_template.rb +2 -2
  45. data/lib/puppet/functions/strftime.rb +1 -0
  46. data/lib/puppet/functions/unwrap.rb +17 -2
  47. data/lib/puppet/functions/versioncmp.rb +6 -2
  48. data/lib/puppet/generate/type.rb +9 -0
  49. data/lib/puppet/http/client.rb +1 -1
  50. data/lib/puppet/http/redirector.rb +5 -0
  51. data/lib/puppet/http/service/compiler.rb +6 -1
  52. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  53. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  54. data/lib/puppet/indirector/facts/facter.rb +6 -6
  55. data/lib/puppet/indirector/indirection.rb +1 -1
  56. data/lib/puppet/indirector/resource/ral.rb +6 -1
  57. data/lib/puppet/indirector/terminus.rb +4 -0
  58. data/lib/puppet/interface/documentation.rb +1 -0
  59. data/lib/puppet/module/plan.rb +0 -1
  60. data/lib/puppet/module/task.rb +1 -1
  61. data/lib/puppet/module.rb +1 -0
  62. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  63. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  64. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  65. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  66. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  67. data/lib/puppet/node/environment.rb +10 -11
  68. data/lib/puppet/node.rb +1 -1
  69. data/lib/puppet/pal/pal_impl.rb +1 -1
  70. data/lib/puppet/parser/resource.rb +1 -1
  71. data/lib/puppet/parser/scope.rb +1 -0
  72. data/lib/puppet/parser/templatewrapper.rb +1 -0
  73. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  74. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -0
  75. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  76. data/lib/puppet/pops/model/ast.rb +1 -0
  77. data/lib/puppet/pops/model/factory.rb +2 -1
  78. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  79. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  80. data/lib/puppet/pops/parser/eparser.rb +1014 -995
  81. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  82. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  83. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  84. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  85. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  86. data/lib/puppet/pops/types/types.rb +1 -1
  87. data/lib/puppet/provider/aix_object.rb +1 -1
  88. data/lib/puppet/provider/exec/posix.rb +16 -4
  89. data/lib/puppet/provider/group/groupadd.rb +5 -2
  90. data/lib/puppet/provider/package/pip.rb +15 -3
  91. data/lib/puppet/provider/package/pkg.rb +19 -2
  92. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  93. data/lib/puppet/provider/package/yum.rb +1 -1
  94. data/lib/puppet/provider/parsedfile.rb +3 -0
  95. data/lib/puppet/provider/service/base.rb +1 -1
  96. data/lib/puppet/provider/service/init.rb +10 -9
  97. data/lib/puppet/provider/service/launchd.rb +2 -2
  98. data/lib/puppet/provider/service/redhat.rb +1 -1
  99. data/lib/puppet/provider/service/smf.rb +3 -3
  100. data/lib/puppet/provider/service/systemd.rb +2 -2
  101. data/lib/puppet/provider/service/upstart.rb +5 -5
  102. data/lib/puppet/provider/user/aix.rb +44 -1
  103. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  104. data/lib/puppet/provider/user/useradd.rb +72 -16
  105. data/lib/puppet/provider.rb +1 -1
  106. data/lib/puppet/reference/providers.rb +2 -2
  107. data/lib/puppet/resource/catalog.rb +1 -1
  108. data/lib/puppet/resource/type_collection.rb +1 -0
  109. data/lib/puppet/resource.rb +38 -5
  110. data/lib/puppet/runtime.rb +11 -1
  111. data/lib/puppet/settings.rb +32 -9
  112. data/lib/puppet/ssl/verifier.rb +6 -0
  113. data/lib/puppet/test/test_helper.rb +4 -1
  114. data/lib/puppet/transaction/persistence.rb +21 -1
  115. data/lib/puppet/transaction/report.rb +15 -1
  116. data/lib/puppet/type/exec.rb +35 -5
  117. data/lib/puppet/type/file/data_sync.rb +1 -1
  118. data/lib/puppet/type/file/mode.rb +6 -0
  119. data/lib/puppet/type/file.rb +6 -6
  120. data/lib/puppet/type/filebucket.rb +3 -3
  121. data/lib/puppet/type/group.rb +0 -1
  122. data/lib/puppet/type/resources.rb +1 -1
  123. data/lib/puppet/type/service.rb +8 -3
  124. data/lib/puppet/type/tidy.rb +1 -1
  125. data/lib/puppet/type/user.rb +40 -39
  126. data/lib/puppet/type.rb +1 -1
  127. data/lib/puppet/util/command_line.rb +1 -1
  128. data/lib/puppet/util/filetype.rb +2 -2
  129. data/lib/puppet/util/json.rb +20 -0
  130. data/lib/puppet/util/log.rb +8 -4
  131. data/lib/puppet/util/logging.rb +1 -25
  132. data/lib/puppet/util/monkey_patches.rb +6 -0
  133. data/lib/puppet/util/package.rb +25 -16
  134. data/lib/puppet/util/pidlock.rb +1 -1
  135. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  136. data/lib/puppet/util/suidmanager.rb +1 -2
  137. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  138. data/lib/puppet/util/tagging.rb +1 -0
  139. data/lib/puppet/util/windows/service.rb +0 -5
  140. data/lib/puppet/util/windows/sid.rb +3 -1
  141. data/lib/puppet/util/windows/user.rb +0 -2
  142. data/lib/puppet/util/windows.rb +3 -0
  143. data/lib/puppet/util/yaml.rb +21 -2
  144. data/lib/puppet/util.rb +4 -3
  145. data/lib/puppet/version.rb +1 -1
  146. data/lib/puppet.rb +6 -9
  147. data/locales/puppet.pot +5 -10418
  148. data/man/man5/puppet.conf.5 +52 -25
  149. data/man/man8/puppet-agent.8 +4 -1
  150. data/man/man8/puppet-apply.8 +1 -1
  151. data/man/man8/puppet-catalog.8 +9 -9
  152. data/man/man8/puppet-config.8 +1 -1
  153. data/man/man8/puppet-describe.8 +1 -1
  154. data/man/man8/puppet-device.8 +1 -1
  155. data/man/man8/puppet-doc.8 +1 -1
  156. data/man/man8/puppet-epp.8 +1 -1
  157. data/man/man8/puppet-facts.8 +8 -8
  158. data/man/man8/puppet-filebucket.8 +1 -1
  159. data/man/man8/puppet-generate.8 +1 -1
  160. data/man/man8/puppet-help.8 +1 -1
  161. data/man/man8/puppet-key.8 +7 -7
  162. data/man/man8/puppet-lookup.8 +9 -6
  163. data/man/man8/puppet-man.8 +1 -1
  164. data/man/man8/puppet-module.8 +3 -3
  165. data/man/man8/puppet-node.8 +5 -5
  166. data/man/man8/puppet-parser.8 +1 -1
  167. data/man/man8/puppet-plugin.8 +1 -1
  168. data/man/man8/puppet-report.8 +5 -5
  169. data/man/man8/puppet-resource.8 +1 -1
  170. data/man/man8/puppet-script.8 +1 -1
  171. data/man/man8/puppet-ssl.8 +1 -1
  172. data/man/man8/puppet-status.8 +4 -4
  173. data/man/man8/puppet.8 +2 -2
  174. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +2 -1
  175. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  176. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  177. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  178. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  179. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  180. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  181. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  182. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  183. data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
  184. data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
  185. data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
  186. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
  187. data/spec/fixtures/ssl/ca.pem +52 -52
  188. data/spec/fixtures/ssl/crl.pem +25 -25
  189. data/spec/fixtures/ssl/ec-key.pem +11 -11
  190. data/spec/fixtures/ssl/ec.pem +32 -32
  191. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  192. data/spec/fixtures/ssl/encrypted-key.pem +107 -107
  193. data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
  194. data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
  195. data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
  196. data/spec/fixtures/ssl/intermediate.pem +51 -51
  197. data/spec/fixtures/ssl/oid-key.pem +117 -0
  198. data/spec/fixtures/ssl/oid.pem +69 -0
  199. data/spec/fixtures/ssl/pluto-key.pem +106 -106
  200. data/spec/fixtures/ssl/pluto.pem +50 -50
  201. data/spec/fixtures/ssl/request-key.pem +106 -106
  202. data/spec/fixtures/ssl/request.pem +45 -45
  203. data/spec/fixtures/ssl/revoked-key.pem +106 -106
  204. data/spec/fixtures/ssl/revoked.pem +49 -49
  205. data/spec/fixtures/ssl/signed-key.pem +106 -106
  206. data/spec/fixtures/ssl/signed.pem +47 -47
  207. data/spec/fixtures/ssl/tampered-cert.pem +49 -49
  208. data/spec/fixtures/ssl/tampered-csr.pem +45 -45
  209. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  210. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
  211. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
  212. data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
  213. data/spec/fixtures/ssl/unknown-ca.pem +52 -52
  214. data/spec/fixtures/unit/forge/bacula.json +1 -1
  215. data/spec/integration/application/agent_spec.rb +141 -37
  216. data/spec/integration/application/filebucket_spec.rb +16 -0
  217. data/spec/integration/application/lookup_spec.rb +32 -6
  218. data/spec/integration/application/module_spec.rb +21 -0
  219. data/spec/integration/application/resource_spec.rb +35 -1
  220. data/spec/integration/application/ssl_spec.rb +20 -0
  221. data/spec/integration/configurer_spec.rb +18 -2
  222. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  223. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  224. data/spec/integration/l10n/compiler_spec.rb +37 -0
  225. data/spec/integration/parser/pcore_resource_spec.rb +10 -0
  226. data/spec/integration/transaction/report_spec.rb +1 -1
  227. data/spec/integration/type/exec_spec.rb +70 -45
  228. data/spec/integration/type/file_spec.rb +2 -2
  229. data/spec/integration/type/package_spec.rb +6 -6
  230. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  231. data/spec/integration/util/windows/process_spec.rb +1 -9
  232. data/spec/lib/puppet/test_ca.rb +5 -0
  233. data/spec/lib/puppet_spec/modules.rb +13 -2
  234. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  235. data/spec/lib/puppet_spec/settings.rb +1 -0
  236. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  237. data/spec/shared_contexts/l10n.rb +32 -0
  238. data/spec/spec_helper.rb +1 -10
  239. data/spec/unit/application/apply_spec.rb +76 -56
  240. data/spec/unit/application/lookup_spec.rb +131 -10
  241. data/spec/unit/application/resource_spec.rb +29 -0
  242. data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
  243. data/spec/unit/configurer_spec.rb +265 -57
  244. data/spec/unit/defaults_spec.rb +1 -0
  245. data/spec/unit/environments_spec.rb +184 -0
  246. data/spec/unit/face/generate_spec.rb +64 -0
  247. data/spec/unit/facter_impl_spec.rb +31 -0
  248. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  249. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  250. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  251. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  252. data/spec/unit/file_system_spec.rb +47 -4
  253. data/spec/unit/forge/module_release_spec.rb +3 -3
  254. data/spec/unit/functions/assert_type_spec.rb +1 -1
  255. data/spec/unit/functions/empty_spec.rb +10 -0
  256. data/spec/unit/functions/logging_spec.rb +1 -0
  257. data/spec/unit/functions/lookup_spec.rb +64 -0
  258. data/spec/unit/functions/unwrap_spec.rb +8 -0
  259. data/spec/unit/functions/versioncmp_spec.rb +40 -4
  260. data/spec/unit/functions4_spec.rb +2 -2
  261. data/spec/unit/http/client_spec.rb +58 -1
  262. data/spec/unit/http/service/compiler_spec.rb +8 -0
  263. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  264. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  265. data/spec/unit/indirector/indirection_spec.rb +10 -3
  266. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  267. data/spec/unit/interface/action_spec.rb +0 -9
  268. data/spec/unit/module_spec.rb +15 -1
  269. data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
  270. data/spec/unit/network/authstore_spec.rb +0 -15
  271. data/spec/unit/network/formats_spec.rb +6 -0
  272. data/spec/unit/node_spec.rb +6 -0
  273. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  274. data/spec/unit/pops/parser/parse_containers_spec.rb +2 -13
  275. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  276. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  277. data/spec/unit/pops/validator/validator_spec.rb +5 -0
  278. data/spec/unit/provider/package/gem_spec.rb +1 -1
  279. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  280. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  281. data/spec/unit/provider/package/pip_spec.rb +38 -1
  282. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  283. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  284. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  285. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  286. data/spec/unit/provider/service/gentoo_spec.rb +6 -5
  287. data/spec/unit/provider/service/init_spec.rb +15 -9
  288. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  289. data/spec/unit/provider/service/openwrt_spec.rb +21 -29
  290. data/spec/unit/provider/service/redhat_spec.rb +3 -2
  291. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  292. data/spec/unit/provider/user/aix_spec.rb +100 -0
  293. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  294. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  295. data/spec/unit/provider_spec.rb +4 -4
  296. data/spec/unit/puppet_spec.rb +12 -4
  297. data/spec/unit/resource/catalog_spec.rb +14 -1
  298. data/spec/unit/resource_spec.rb +58 -2
  299. data/spec/unit/settings_spec.rb +97 -56
  300. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  301. data/spec/unit/transaction/persistence_spec.rb +51 -0
  302. data/spec/unit/type/exec_spec.rb +76 -29
  303. data/spec/unit/type/file/source_spec.rb +4 -4
  304. data/spec/unit/type/service_spec.rb +27 -0
  305. data/spec/unit/type/tidy_spec.rb +7 -0
  306. data/spec/unit/type/user_spec.rb +0 -45
  307. data/spec/unit/type_spec.rb +2 -2
  308. data/spec/unit/util/json_spec.rb +126 -0
  309. data/spec/unit/util/logging_spec.rb +2 -0
  310. data/spec/unit/util/windows/sid_spec.rb +39 -4
  311. data/spec/unit/util/yaml_spec.rb +54 -29
  312. data/tasks/generate_cert_fixtures.rake +10 -1
  313. data/tasks/parallel.rake +3 -3
  314. metadata +52 -96
  315. data/ext/README.environment +0 -8
  316. data/ext/dbfix.sql +0 -132
  317. data/ext/debian/README.Debian +0 -8
  318. data/ext/debian/README.source +0 -2
  319. data/ext/debian/TODO.Debian +0 -1
  320. data/ext/debian/changelog.erb +0 -1122
  321. data/ext/debian/compat +0 -1
  322. data/ext/debian/control +0 -144
  323. data/ext/debian/copyright +0 -339
  324. data/ext/debian/docs +0 -1
  325. data/ext/debian/fileserver.conf +0 -41
  326. data/ext/debian/puppet-common.dirs +0 -13
  327. data/ext/debian/puppet-common.install +0 -3
  328. data/ext/debian/puppet-common.lintian-overrides +0 -5
  329. data/ext/debian/puppet-common.manpages +0 -28
  330. data/ext/debian/puppet-common.postinst +0 -35
  331. data/ext/debian/puppet-common.postrm +0 -33
  332. data/ext/debian/puppet-el.dirs +0 -1
  333. data/ext/debian/puppet-el.emacsen-install +0 -25
  334. data/ext/debian/puppet-el.emacsen-remove +0 -11
  335. data/ext/debian/puppet-el.emacsen-startup +0 -9
  336. data/ext/debian/puppet-el.install +0 -1
  337. data/ext/debian/puppet-testsuite.install +0 -2
  338. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  339. data/ext/debian/puppet.lintian-overrides +0 -3
  340. data/ext/debian/puppet.logrotate +0 -20
  341. data/ext/debian/puppet.postinst +0 -20
  342. data/ext/debian/puppet.postrm +0 -20
  343. data/ext/debian/puppet.preinst +0 -20
  344. data/ext/debian/puppetmaster-common.install +0 -2
  345. data/ext/debian/puppetmaster-common.manpages +0 -2
  346. data/ext/debian/puppetmaster-common.postinst +0 -6
  347. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  348. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  349. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  350. data/ext/debian/puppetmaster.README.debian +0 -17
  351. data/ext/debian/puppetmaster.default +0 -14
  352. data/ext/debian/puppetmaster.init +0 -137
  353. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  354. data/ext/debian/puppetmaster.postinst +0 -20
  355. data/ext/debian/puppetmaster.postrm +0 -5
  356. data/ext/debian/puppetmaster.preinst +0 -22
  357. data/ext/debian/rules +0 -132
  358. data/ext/debian/source/format +0 -1
  359. data/ext/debian/source/options +0 -1
  360. data/ext/debian/vim-puppet.README.Debian +0 -13
  361. data/ext/debian/vim-puppet.dirs +0 -5
  362. data/ext/debian/vim-puppet.yaml +0 -7
  363. data/ext/debian/watch +0 -2
  364. data/ext/freebsd/puppetd +0 -26
  365. data/ext/freebsd/puppetmasterd +0 -26
  366. data/ext/gentoo/conf.d/puppet +0 -5
  367. data/ext/gentoo/conf.d/puppetmaster +0 -12
  368. data/ext/gentoo/init.d/puppet +0 -38
  369. data/ext/gentoo/init.d/puppetmaster +0 -51
  370. data/ext/gentoo/puppet/fileserver.conf +0 -41
  371. data/ext/ips/puppet-agent +0 -44
  372. data/ext/ips/puppet-master +0 -44
  373. data/ext/ips/puppet.p5m.erb +0 -12
  374. data/ext/ips/puppetagent.xml +0 -42
  375. data/ext/ips/puppetmaster.xml +0 -42
  376. data/ext/ips/rules +0 -19
  377. data/ext/ips/transforms +0 -34
  378. data/ext/ldap/puppet.schema +0 -24
  379. data/ext/logcheck/puppet +0 -23
  380. data/ext/osx/file_mapping.yaml +0 -33
  381. data/ext/osx/postflight.erb +0 -109
  382. data/ext/osx/preflight.erb +0 -52
  383. data/ext/osx/prototype.plist.erb +0 -38
  384. data/ext/redhat/fileserver.conf +0 -41
  385. data/ext/redhat/logrotate +0 -21
  386. data/ext/redhat/puppet.spec.erb +0 -842
  387. data/ext/redhat/server.init +0 -128
  388. data/ext/redhat/server.sysconfig +0 -13
  389. data/ext/solaris/pkginfo +0 -6
  390. data/ext/solaris/smf/puppetd.xml +0 -77
  391. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  392. data/ext/solaris/smf/svc-puppetd +0 -71
  393. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  394. data/ext/suse/puppet.spec +0 -310
  395. data/ext/suse/server.init +0 -173
  396. data/ext/yaml_nodes.rb +0 -105
  397. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -472,67 +472,58 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
472
472
  end
473
473
 
474
474
  context 'multiple agents running' do
475
- it "exits if an agent is already running" do
475
+ def with_another_agent_running(&block)
476
476
  path = Puppet[:agent_catalog_run_lockfile]
477
477
 
478
478
  th = Thread.new {
479
- %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
479
+ %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(5)"}
480
480
  }
481
481
 
482
+ # ensure file is written before yielding
482
483
  until File.exists?(path) && File.size(path) > 0 do
483
484
  sleep 0.1
484
485
  end
485
486
 
486
- expect {
487
- agent.command_line.args << '--test'
488
- agent.run
489
- }.to exit_with(1).and output(/Run of Puppet configuration client already in progress; skipping/).to_stdout
487
+ begin
488
+ yield
489
+ ensure
490
+ th.kill # kill thread so we don't wait too much
491
+ end
492
+ end
490
493
 
491
- th.kill # kill thread so we don't wait too much
494
+ it "exits if an agent is already running" do
495
+ with_another_agent_running do
496
+ expect {
497
+ agent.command_line.args << '--test'
498
+ agent.run
499
+ }.to exit_with(1).and output(/Run of Puppet configuration client already in progress; skipping/).to_stdout
500
+ end
492
501
  end
493
502
 
494
503
  it "waits for other agent run to finish before starting" do
495
504
  server.start_server do |port|
496
- path = Puppet[:agent_catalog_run_lockfile]
497
505
  Puppet[:serverport] = port
498
506
  Puppet[:waitforlock] = 1
499
507
 
500
- th = Thread.new {
501
- %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
502
- }
503
-
504
- until File.exists?(path) && File.size(path) > 0 do
505
- sleep 0.1
508
+ with_another_agent_running do
509
+ expect {
510
+ agent.command_line.args << '--test'
511
+ agent.run
512
+ }.to exit_with(0).and output(/Info: Will try again in #{Puppet[:waitforlock]} seconds./).to_stdout
506
513
  end
507
-
508
- expect {
509
- agent.command_line.args << '--test'
510
- agent.run
511
- }.to exit_with(0).and output(/Info: Will try again in #{Puppet[:waitforlock]} seconds./).to_stdout
512
-
513
- th.kill # kill thread so we don't wait too much
514
514
  end
515
515
  end
516
516
 
517
517
  it "exits if maxwaitforlock is exceeded" do
518
- path = Puppet[:agent_catalog_run_lockfile]
519
518
  Puppet[:waitforlock] = 1
520
519
  Puppet[:maxwaitforlock] = 0
521
520
 
522
- th = Thread.new {
523
- %x{ruby -e "$0 = 'puppet'; File.write('#{path}', Process.pid); sleep(2)"}
524
- }
525
-
526
- until File.exists?(path) && File.size(path) > 0 do
527
- sleep 0.1
521
+ with_another_agent_running do
522
+ expect {
523
+ agent.command_line.args << '--test'
524
+ agent.run
525
+ }.to exit_with(1).and output(/Exiting now because the maxwaitforlock timeout has been exceeded./).to_stdout
528
526
  end
529
-
530
- expect {
531
- agent.command_line.args << '--test'
532
- agent.run
533
- }.to exit_with(1).and output(/Exiting now because the maxwaitforlock timeout has been exceeded./).to_stdout
534
-
535
- th.kill # kill thread so we don't wait too much
536
527
  end
537
528
  end
538
529
 
@@ -572,7 +563,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
572
563
  ).and matching(
573
564
  /Notify\[a message\]\/message:/
574
565
  )).to_stdout
575
- .and output(/the agent run will continue/).to_stderr
566
+ .and output(/Could not retrieve catalog from remote server/).to_stderr
576
567
  end
577
568
 
578
569
  it 'preserves the old cached catalog if validation fails with the old one' do
@@ -591,7 +582,7 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
591
582
  agent.command_line.args << '--test'
592
583
  agent.run
593
584
  }.to exit_with(1)
594
- .and output(/Using configured environment/).to_stdout
585
+ .and output(%r{Retrieving plugin}).to_stdout
595
586
  .and output(%r{Validation of Exec\[unqualified_command\] failed: 'unqualified_command' is not qualified and no path was specified}).to_stderr
596
587
  end
597
588
 
@@ -632,5 +623,118 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
632
623
  expect(report.metrics).to_not be_empty
633
624
  end
634
625
  end
626
+
627
+ it "caches a report even if the REST request fails" do
628
+ server.start_server do |port|
629
+ Puppet[:serverport] = port
630
+ Puppet[:report_port] = "-1"
631
+ expect {
632
+ agent.command_line.args << '--test'
633
+ agent.run
634
+ }.to exit_with(0)
635
+ .and output(%r{Applied catalog}).to_stdout
636
+ .and output(%r{Could not send report}).to_stderr
637
+
638
+ report = Puppet::Transaction::Report.convert_from(:yaml, File.read(Puppet[:lastrunreport]))
639
+ expect(report).to be
640
+ end
641
+ end
642
+ end
643
+
644
+ context "environment convergence" do
645
+ it "falls back to making a node request if the last server-specified environment cannot be loaded" do
646
+ mounts = {}
647
+ mounts[:node] = -> (req, res) {
648
+ node = Puppet::Node.new('test', environment: Puppet::Node::Environment.remote('doesnotexistonagent'))
649
+ res.body = formatter.render(node)
650
+ res['Content-Type'] = formatter.mime
651
+ }
652
+
653
+ server.start_server(mounts: mounts) do |port|
654
+ Puppet[:serverport] = port
655
+ Puppet[:log_level] = 'debug'
656
+
657
+ expect {
658
+ agent.command_line.args << '--test'
659
+ agent.run
660
+ }.to exit_with(0)
661
+ .and output(a_string_matching(%r{Debug: Requesting environment from the server})).to_stdout
662
+
663
+ Puppet::Application.clear!
664
+
665
+ expect {
666
+ agent.command_line.args << '--test'
667
+ agent.run
668
+ }.to exit_with(0)
669
+ .and output(a_string_matching(%r{Debug: Successfully loaded last environment from the lastrunfile})).to_stdout
670
+ end
671
+ end
672
+
673
+ it "switches to 'newenv' environment and retries the run" do
674
+ first_run = true
675
+ libdir = File.join(my_fixture_dir, 'lib')
676
+
677
+ # we have to use the :facter terminus to reliably test that pluginsynced
678
+ # facts are included in the catalog request
679
+ Puppet::Node::Facts.indirection.terminus_class = :facter
680
+
681
+ mounts = {}
682
+
683
+ # During the first run, only return metadata for the top-level directory.
684
+ # During the second run, include metadata for all of the 'lib' fixtures
685
+ # due to the `recurse` option.
686
+ mounts[:file_metadatas] = -> (req, res) {
687
+ request = Puppet::FileServing::Metadata.indirection.request(
688
+ :search, libdir, nil, recurse: !first_run
689
+ )
690
+ data = Puppet::FileServing::Metadata.indirection.terminus(:file).search(request)
691
+ res.body = formatter.render(data)
692
+ res['Content-Type'] = formatter.mime
693
+ }
694
+
695
+ mounts[:file_content] = -> (req, res) {
696
+ request = Puppet::FileServing::Content.indirection.request(
697
+ :find, File.join(libdir, 'facter', 'agent_spec_role.rb'), nil
698
+ )
699
+ content = Puppet::FileServing::Content.indirection.terminus(:file).find(request)
700
+ res.body = content.content
701
+ res['Content-Length'] = content.content.length
702
+ res['Content-Type'] = 'application/octet-stream'
703
+ }
704
+
705
+ # During the first run, return an empty catalog referring to the newenv.
706
+ # During the second run, compile a catalog that depends on a fact that
707
+ # only exists in the second environment. If the fact is missing/empty,
708
+ # then compilation will fail since resources can't have an empty title.
709
+ mounts[:catalog] = -> (req, res) {
710
+ node = Puppet::Node.new('test')
711
+
712
+ code = if first_run
713
+ first_run = false
714
+ ''
715
+ else
716
+ data = CGI.unescape(req.query['facts'])
717
+ facts = Puppet::Node::Facts.convert_from('json', data)
718
+ node.fact_merge(facts)
719
+ 'notify { $facts["agent_spec_role"]: }'
720
+ end
721
+
722
+ catalog = compile_to_catalog(code, node)
723
+ catalog.environment = 'newenv'
724
+
725
+ res.body = formatter.render(catalog)
726
+ res['Content-Type'] = formatter.mime
727
+ }
728
+
729
+ server.start_server(mounts: mounts) do |port|
730
+ Puppet[:serverport] = port
731
+ expect {
732
+ agent.command_line.args << '--test'
733
+ agent.run
734
+ }.to exit_with(2)
735
+ .and output(a_string_matching(%r{Notice: Local environment: 'production' doesn't match server specified environment 'newenv', restarting agent run with environment 'newenv'})
736
+ .and matching(%r{defined 'message' as 'web'})).to_stdout
737
+ end
738
+ end
635
739
  end
636
740
  end
@@ -18,6 +18,11 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
18
18
  File.binwrite(backup_file, text)
19
19
  end
20
20
 
21
+ after :each do
22
+ # mute debug messages generated during `after :each` blocks
23
+ Puppet::Util::Log.close_all
24
+ end
25
+
21
26
  it "backs up to and restores from the local filebucket" do
22
27
  filebucket.command_line.args = ['backup', backup_file, '--local']
23
28
  expect {
@@ -126,6 +131,17 @@ describe "puppet filebucket", unless: Puppet::Util::Platform.jruby? do
126
131
  end
127
132
  end
128
133
 
134
+ it "lists the local filebucket even if the environment doesn't exist locally" do
135
+ Puppet[:environment] = 'doesnotexist'
136
+ Puppet::FileSystem.mkpath(Puppet[:clientbucketdir])
137
+
138
+ filebucket.command_line.args = ['backup', '--local', backup_file]
139
+ expect {
140
+ result = filebucket.run
141
+ expect(result).to eq([backup_file])
142
+ }.to output(/Computing checksum on file/).to_stdout
143
+ end
144
+
129
145
  context 'diff', unless: Puppet::Util::Platform.windows? || Puppet::Util::Platform.jruby? do
130
146
  context 'using a remote bucket' do
131
147
  it 'outputs a diff between a local and remote file' do
@@ -7,6 +7,7 @@ describe 'lookup' do
7
7
  include PuppetSpec::Files
8
8
 
9
9
  context 'with an environment' do
10
+ let(:fqdn) { Puppet.runtime[:facter].value(:fqdn) }
10
11
  let(:env_name) { 'spec' }
11
12
  let(:env_dir) { tmpdir('environments') }
12
13
  let(:environment_files) do
@@ -44,12 +45,20 @@ describe 'lookup' do
44
45
  let(:app) { Puppet::Application[:lookup] }
45
46
  let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
46
47
  let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
48
+ let(:facts) { Puppet::Node::Facts.new("facts", {'my_fact' => 'my_fact_value'}) }
49
+ let(:cert) { pem_content('oid.pem') }
47
50
 
51
+ let(:node) { Puppet::Node.new('testnode', :facts => facts, :environment => env) }
48
52
  let(:populated_env_dir) do
49
53
  dir_contained_in(env_dir, environment_files)
50
54
  env_dir
51
55
  end
52
56
 
57
+ before do
58
+ stub_request(:get, "https://puppet:8140/puppet-ca/v1/certificate/#{fqdn}").to_return(body: cert)
59
+ allow(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
60
+ end
61
+
53
62
  def lookup(key, options = {}, explain = false)
54
63
  key = [key] unless key.is_a?(Array)
55
64
  allow(app.command_line).to receive(:args).and_return(key)
@@ -90,24 +99,41 @@ describe 'lookup' do
90
99
  expect(lookup('a')).to eql('value a')
91
100
  end
92
101
 
102
+ it 'loads trusted information from the node certificate' do
103
+ allow(Puppet).to receive(:override).and_call_original
104
+ expect(Puppet).to receive(:override).with(trusted_information: an_object_having_attributes(
105
+ certname: fqdn,
106
+ extensions: { "1.3.6.1.4.1.34380.1.2.1.1" => "somevalue" }))
107
+
108
+ Puppet.settings[:node_terminus] = 'exec'
109
+ expect_any_instance_of(Puppet::Node::Exec).to receive(:find).and_return(node)
110
+ lookup('a', :compile => true)
111
+ end
112
+
93
113
  it 'loads external facts when running without --node' do
94
114
  expect(Puppet::Util).not_to receive(:skip_external_facts)
95
115
  expect(Facter).not_to receive(:load_external)
96
116
  lookup('a')
97
117
  end
98
118
 
99
- it 'skip loading of external facts when run with --node' do
100
- app.options[:node] = "random_node"
101
- expect(Facter).to receive(:load_external).once.with(false)
102
- expect(Facter).to receive(:load_external).once.with(true)
103
- lookup('a')
119
+ describe 'when using --node' do
120
+ let(:fqdn) { 'random_node' }
121
+
122
+ it 'skips loading of external facts' do
123
+ app.options[:node] = fqdn
124
+
125
+ expect(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
126
+ expect(Facter).to receive(:load_external).once.with(false)
127
+ expect(Facter).to receive(:load_external).once.with(true)
128
+ lookup('a')
129
+ end
104
130
  end
105
131
 
106
132
  context 'uses node_terminus' do
107
133
  require 'puppet/indirector/node/exec'
108
134
  require 'puppet/indirector/node/plain'
109
135
 
110
- let(:node) { Puppet::Node.new('testnode', :environment => env) }
136
+ let(:node) { Puppet::Node.new('testnode', :facts => facts, :environment => env) }
111
137
 
112
138
  it ':plain without --compile' do
113
139
  Puppet.settings[:node_terminus] = 'exec'
@@ -65,4 +65,25 @@ describe 'puppet module', unless: Puppet::Util::Platform.jruby? do
65
65
  .and output(%r{Unable to verify the SSL certificate}).to_stderr
66
66
  end
67
67
  end
68
+
69
+ it 'prints the complete URL it tried to connect to' do
70
+ response_proc = -> (req, res) { res.status = 404 }
71
+
72
+ # create a temp cacert bundle
73
+ ssl_file = tmpfile('systemstore')
74
+ File.write(ssl_file, server.ca_cert)
75
+
76
+ Puppet::Util.withenv("SSL_CERT_FILE" => ssl_file) do
77
+ server.start_server(response_proc: response_proc) do |port|
78
+ Puppet[:module_repository] = "https://127.0.0.1:#{port}/bogus_test/puppet"
79
+
80
+ expect {
81
+ app.command_line.args = ['install', 'puppetlabs-bacula']
82
+ app.run
83
+ }.to exit_with(1)
84
+ .and output(%r{Notice: Downloading from https://127.0.0.1:#{port}}).to_stdout
85
+ .and output(%r{https://127.0.0.1:#{port}/bogus_test/puppet/v3/releases}).to_stderr
86
+ end
87
+ end
88
+ end
68
89
  end
@@ -6,7 +6,41 @@ describe "puppet resource", unless: Puppet::Util::Platform.jruby? do
6
6
 
7
7
  let(:resource) { Puppet::Application[:resource] }
8
8
 
9
- describe "when handling file and tidy types" do
9
+ context 'when given an invalid environment' do
10
+ before { Puppet[:environment] = 'badenv' }
11
+
12
+ it 'falls back to the default environment' do
13
+ Puppet[:log_level] = 'debug'
14
+
15
+ expect {
16
+ resource.run
17
+ }.to exit_with(1)
18
+ .and output(/Debug: Specified environment 'badenv' does not exist on the filesystem, defaulting to 'production'/).to_stdout
19
+ .and output(/Error: Could not run: You must specify the type to display/).to_stderr
20
+ end
21
+
22
+ it 'lists resources' do
23
+ resource.command_line.args = ['file', Puppet[:confdir]]
24
+
25
+ expect {
26
+ resource.run
27
+ }.to output(/file { '#{Puppet[:confdir]}':/).to_stdout
28
+ end
29
+
30
+ it 'lists types from the default environment' do
31
+ modulepath = File.join(Puppet[:codedir], 'modules', 'test', 'lib', 'puppet', 'type')
32
+ FileUtils.mkdir_p(modulepath)
33
+ File.write(File.join(modulepath, 'test.rb'), 'Puppet::Type.newtype(:test)')
34
+ resource.command_line.args = ['--types']
35
+
36
+ expect {
37
+ resource.run
38
+ }.to exit_with(0).and output(/test/).to_stdout
39
+ end
40
+ end
41
+
42
+
43
+ context 'when handling file and tidy types' do
10
44
  let!(:dir) { dir_containing('testdir', 'testfile' => 'contents') }
11
45
 
12
46
  it 'does not raise when generating file resources' do
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe "puppet ssl", unless: Puppet::Util::Platform.jruby? do
4
+ context "print" do
5
+ it 'translates custom oids to their long name' do
6
+ basedir = File.expand_path("#{__FILE__}/../../../fixtures/ssl")
7
+ # registering custom oids changes global state, so shell out
8
+ output =
9
+ %x{puppet ssl show \
10
+ --certname oid \
11
+ --localcacert #{basedir}/ca.pem \
12
+ --hostcrl #{basedir}/crl.pem \
13
+ --hostprivkey #{basedir}/oid-key.pem \
14
+ --hostcert #{basedir}/oid.pem \
15
+ --trusted_oid_mapping_file #{basedir}/trusted_oid_mapping.yaml 2>&1
16
+ }
17
+ expect(output).to match(/Long name:/)
18
+ end
19
+ end
20
+ end
@@ -23,7 +23,7 @@ describe Puppet::Configurer do
23
23
  expect(Puppet::Transaction::Report.indirection).to receive(:save) do |report, x|
24
24
  expect(report.time).to be_a(Time)
25
25
  expect(report.logs.length).to be > 0
26
- end
26
+ end.twice
27
27
 
28
28
  Puppet[:report] = true
29
29
 
@@ -60,7 +60,8 @@ describe Puppet::Configurer do
60
60
  expect(summary["time"]["last_run"]).to be_between(t1, t2)
61
61
  end
62
62
 
63
- it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
63
+ it "applies a cached catalog if pluginsync fails when usecacheonfailure is true and environment is valid" do
64
+ expect(@configurer).to receive(:valid_server_environment?).and_return(true)
64
65
  Puppet[:ignore_plugin_errors] = false
65
66
 
66
67
  Puppet[:use_cached_catalog] = false
@@ -74,6 +75,21 @@ describe Puppet::Configurer do
74
75
  expect(report.cached_catalog_status).to eq('on_failure')
75
76
  end
76
77
 
78
+ it "applies a cached catalog if pluginsync fails when usecacheonfailure is true and environment is invalid" do
79
+ expect(@configurer).to receive(:valid_server_environment?).and_return(false)
80
+ Puppet[:ignore_plugin_errors] = false
81
+
82
+ Puppet[:use_cached_catalog] = false
83
+ Puppet[:usecacheonfailure] = true
84
+
85
+ report = Puppet::Transaction::Report.new
86
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_raise(Puppet::Error, 'Cannot compile remote catalog')
87
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(@catalog)
88
+
89
+ @configurer.run(pluginsync: true, report: report)
90
+ expect(report.cached_catalog_status).to eq('on_failure')
91
+ end
92
+
77
93
  describe 'resubmitting facts' do
78
94
  context 'when resubmit_facts is set to false' do
79
95
  it 'should not send data' do
@@ -9,10 +9,6 @@ describe "interpolating $environment" do
9
9
  let(:confdir) { Puppet[:confdir] }
10
10
  let(:cmdline_args) { ['--confdir', confdir, '--vardir', Puppet[:vardir], '--hiera_config', Puppet[:hiera_config]] }
11
11
 
12
- before(:each) do
13
- FileUtils.mkdir_p(confdir)
14
- end
15
-
16
12
  shared_examples_for "a setting that does not interpolate $environment" do
17
13
 
18
14
  before(:each) do
@@ -6,13 +6,14 @@ require 'puppet/indirector/facts/facter'
6
6
  describe Puppet::Node::Facts::Facter do
7
7
  include PuppetSpec::Files
8
8
  include PuppetSpec::Compiler
9
+ include PuppetSpec::Settings
9
10
 
10
11
  before :each do
11
12
  Puppet::Node::Facts.indirection.terminus_class = :facter
12
13
  end
13
14
 
14
15
  it "preserves case in fact values" do
15
- Facter.add(:downcase_test) do
16
+ Puppet.runtime[:facter].add(:downcase_test) do
16
17
  setcode do
17
18
  "AaBbCc"
18
19
  end
@@ -33,9 +34,9 @@ describe Puppet::Node::Facts::Facter do
33
34
  FileUtils.mkdir_p(test_module)
34
35
 
35
36
  File.open(File.join(test_module, 'custom.rb'), 'wb') { |file| file.write(<<-EOF)}
36
- Facter.add(:custom) do
37
+ Puppet.runtime[:facter].add(:custom) do
37
38
  setcode do
38
- Facter.value('puppetversion')
39
+ Puppet.runtime[:facter].value('puppetversion')
39
40
  end
40
41
  end
41
42
  EOF
@@ -66,49 +67,102 @@ describe Puppet::Node::Facts::Facter do
66
67
  end
67
68
  end
68
69
 
69
- it "adds the puppetversion fact" do
70
- allow(Facter).to receive(:reset)
71
-
72
- cat = compile_to_catalog('notify { $::puppetversion: }',
73
- Puppet::Node.indirection.find('foo'))
74
- expect(cat.resource("Notify[#{Puppet.version.to_s}]")).to be
75
- end
70
+ context "adding facts" do
71
+ it "adds the puppetversion fact" do
72
+ allow(Facter).to receive(:reset)
76
73
 
77
- it "the agent_specified_environment fact is nil when not set" do
78
- expect do
79
- compile_to_catalog('notify { $::agent_specified_environment: }',
80
- Puppet::Node.indirection.find('foo'))
81
- end.to raise_error(Puppet::PreformattedError)
82
- end
83
-
84
- it "adds the agent_specified_environment fact when set in puppet.conf" do
85
- FileUtils.mkdir_p(Puppet[:confdir])
86
- File.open(File.join(Puppet[:confdir], 'puppet.conf'), 'w') do |f|
87
- f.puts("environment=bar")
74
+ cat = compile_to_catalog('notify { $::puppetversion: }',
75
+ Puppet::Node.indirection.find('foo'))
76
+ expect(cat.resource("Notify[#{Puppet.version.to_s}]")).to be
88
77
  end
89
78
 
90
- Puppet.initialize_settings
91
- cat = compile_to_catalog('notify { $::agent_specified_environment: }',
79
+ context "when adding the agent_specified_environment fact" do
80
+ it "does not add the fact if the agent environment is not set" do
81
+ expect do
82
+ compile_to_catalog('notify { $::agent_specified_environment: }',
92
83
  Puppet::Node.indirection.find('foo'))
93
- expect(cat.resource("Notify[bar]")).to be
94
- end
84
+ end.to raise_error(Puppet::PreformattedError)
85
+ end
95
86
 
96
- it "adds the agent_specified_environment fact when set via command-line" do
97
- Puppet.initialize_settings(['--environment', 'bar'])
98
- cat = compile_to_catalog('notify { $::agent_specified_environment: }',
87
+ it "does not add the fact if the agent environment is set in sections other than agent or main" do
88
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
89
+ [user]
90
+ environment=bar
91
+ CONF
92
+
93
+ Puppet.initialize_settings
94
+ expect do
95
+ compile_to_catalog('notify { $::agent_specified_environment: }',
99
96
  Puppet::Node.indirection.find('foo'))
100
- expect(cat.resource("Notify[bar]")).to be
101
- end
97
+ end.to raise_error(Puppet::PreformattedError)
98
+ end
102
99
 
103
- it "adds the agent_specified_environment fact, preferring cli, when set in puppet.conf and via command-line" do
104
- FileUtils.mkdir_p(Puppet[:confdir])
105
- File.open(File.join(Puppet[:confdir], 'puppet.conf'), 'w') do |f|
106
- f.puts("environment=bar")
107
- end
100
+ it "adds the agent_specified_environment fact when set in the agent section in puppet.conf" do
101
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
102
+ [agent]
103
+ environment=bar
104
+ CONF
108
105
 
109
- Puppet.initialize_settings(['--environment', 'baz'])
110
- cat = compile_to_catalog('notify { $::agent_specified_environment: }',
111
- Puppet::Node.indirection.find('foo'))
112
- expect(cat.resource("Notify[baz]")).to be
106
+ Puppet.initialize_settings
107
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
108
+ Puppet::Node.indirection.find('foo'))
109
+ expect(cat.resource("Notify[bar]")).to be
110
+ end
111
+
112
+ it "prefers agent_specified_environment from main if set in section other than agent" do
113
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
114
+ [main]
115
+ environment=baz
116
+
117
+ [user]
118
+ environment=bar
119
+ CONF
120
+
121
+ Puppet.initialize_settings
122
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
123
+ Puppet::Node.indirection.find('foo'))
124
+ expect(cat.resource("Notify[baz]")).to be
125
+ end
126
+
127
+ it "prefers agent_specified_environment from agent if set in multiple sections" do
128
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
129
+ [main]
130
+ environment=baz
131
+
132
+ [agent]
133
+ environment=bar
134
+ CONF
135
+
136
+ Puppet.initialize_settings
137
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
138
+ Puppet::Node.indirection.find('foo'))
139
+ expect(cat.resource("Notify[bar]")).to be
140
+ end
141
+
142
+ it "adds the agent_specified_environment fact when set in puppet.conf" do
143
+ set_puppet_conf(Puppet[:confdir], 'environment=bar')
144
+
145
+ Puppet.initialize_settings
146
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
147
+ Puppet::Node.indirection.find('foo'))
148
+ expect(cat.resource("Notify[bar]")).to be
149
+ end
150
+
151
+ it "adds the agent_specified_environment fact when set via command-line" do
152
+ Puppet.initialize_settings(['--environment', 'bar'])
153
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
154
+ Puppet::Node.indirection.find('foo'))
155
+ expect(cat.resource("Notify[bar]")).to be
156
+ end
157
+
158
+ it "adds the agent_specified_environment fact, preferring cli, when set in puppet.conf and via command-line" do
159
+ set_puppet_conf(Puppet[:confdir], 'environment=bar')
160
+
161
+ Puppet.initialize_settings(['--environment', 'baz'])
162
+ cat = compile_to_catalog('notify { $::agent_specified_environment: }',
163
+ Puppet::Node.indirection.find('foo'))
164
+ expect(cat.resource("Notify[baz]")).to be
165
+ end
166
+ end
113
167
  end
114
168
  end