puppet 6.23.0-x86-mingw32 → 6.26.0-x86-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 (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
@@ -91,12 +91,20 @@ describe Puppet do
91
91
  expect(Puppet.runtime[:http]).to be_an_instance_of(Puppet::HTTP::Client)
92
92
  end
93
93
 
94
- it 'allows an implementation to be registered' do
95
- impl = double('http')
96
- Puppet.initialize_settings([], true, true, http: impl)
94
+ it 'allows a http implementation to be registered' do
95
+ http_impl = double('http')
96
+ Puppet.initialize_settings([], true, true, http: http_impl)
97
97
 
98
98
 
99
- expect(Puppet.runtime[:http]).to eq(impl)
99
+ expect(Puppet.runtime[:http]).to eq(http_impl)
100
+ end
101
+
102
+ it 'allows a facter implementation to be registered' do
103
+ facter_impl = double('facter')
104
+ Puppet.initialize_settings([], true, true, facter: facter_impl)
105
+
106
+
107
+ expect(Puppet.runtime[:facter]).to eq(facter_impl)
100
108
  end
101
109
  end
102
110
 
@@ -104,7 +104,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
104
104
 
105
105
  it "should include the current catalog_format" do
106
106
  catalog = Puppet::Resource::Catalog.new("host")
107
- expect(catalog.catalog_format).to eq(1)
107
+ expect(catalog.catalog_format).to eq(2)
108
108
  end
109
109
 
110
110
  describe "when compiling" do
@@ -178,6 +178,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
178
178
  @original.add_edge(@middle, @bottom)
179
179
  @original.add_edge(@bottom, @bottomobject)
180
180
 
181
+ @original.catalog_format = 1
181
182
  @catalog = @original.to_ral
182
183
  end
183
184
 
@@ -190,6 +191,18 @@ describe Puppet::Resource::Catalog, "when compiling" do
190
191
  end
191
192
  end
192
193
 
194
+ it "should raise if an unknown resource is being converted" do
195
+ @new_res = Puppet::Resource.new "Unknown", "type", :kind => 'compilable_type'
196
+ @resource_array = [@new_res]
197
+
198
+ @original.add_resource(*@resource_array)
199
+ @original.add_edge(@bottomobject, @new_res)
200
+
201
+ @original.catalog_format = 2
202
+
203
+ expect { @original.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
204
+ end
205
+
193
206
  it "should copy the tag list to the new catalog" do
194
207
  expect(@catalog.tags.sort).to eq(@original.tags.sort)
195
208
  end
@@ -694,19 +694,68 @@ describe Puppet::Resource do
694
694
  it "should use the resource type's :new method to create the resource if the resource is of a builtin type" do
695
695
  resource = Puppet::Resource.new("file", basepath+"/my/file")
696
696
  result = resource.to_ral
697
+
697
698
  expect(result).to be_instance_of(Puppet::Type.type(:file))
698
699
  expect(result[:path]).to eq(basepath+"/my/file")
699
700
  end
700
701
 
701
- it "should convert to a component instance if the resource type is not of a builtin type" do
702
+ it "should convert to a component instance if the resource is not a compilable_type" do
702
703
  resource = Puppet::Resource.new("foobar", "somename")
703
704
  result = resource.to_ral
704
705
 
705
706
  expect(result).to be_instance_of(Puppet::Type.type(:component))
706
707
  expect(result.title).to eq("Foobar[somename]")
707
708
  end
708
- end
709
709
 
710
+ it "should convert to a component instance if the resource is a class" do
711
+ resource = Puppet::Resource.new("Class", "somename")
712
+ result = resource.to_ral
713
+
714
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
715
+ expect(result.title).to eq("Class[Somename]")
716
+ end
717
+
718
+ it "should convert to component when the resource is a defined_type" do
719
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'defined_type')
720
+
721
+ result = resource.to_ral
722
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
723
+ end
724
+
725
+ it "should raise if a resource type is a compilable_type and it wasn't found" do
726
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'compilable_type')
727
+
728
+ expect { resource.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
729
+ end
730
+
731
+ it "should use the old behaviour when the catalog_format is equal to 1" do
732
+ resource = Puppet::Resource.new("Unknown", "type")
733
+ catalog = Puppet::Resource::Catalog.new("mynode")
734
+
735
+ resource.catalog = catalog
736
+ resource.catalog.catalog_format = 1
737
+
738
+ result = resource.to_ral
739
+ expect(result).to be_instance_of(Puppet::Type.type(:component))
740
+ end
741
+
742
+ it "should use the new behaviour and fail when the catalog_format is greater than 1" do
743
+ resource = Puppet::Resource.new("Unknown", "type", :kind => 'compilable_type')
744
+ catalog = Puppet::Resource::Catalog.new("mynode")
745
+
746
+ resource.catalog = catalog
747
+ resource.catalog.catalog_format = 2
748
+
749
+ expect { resource.to_ral }.to raise_error(Puppet::Error, "Resource type 'Unknown' was not found")
750
+ end
751
+
752
+ it "should use the resource type when the resource doesn't respond to kind and the resource type can be found" do
753
+ resource = Puppet::Resource.new("file", basepath+"/my/file")
754
+
755
+ result = resource.to_ral
756
+ expect(result).to be_instance_of(Puppet::Type.type(:file))
757
+ end
758
+ end
710
759
  describe "when converting to puppet code" do
711
760
  before do
712
761
  @resource = Puppet::Resource.new("one::two", "/my/file",
@@ -822,6 +871,13 @@ describe Puppet::Resource do
822
871
  expect(Puppet::Resource.from_data_hash(JSON.parse(resource.to_json)).line).to eq(50)
823
872
  end
824
873
 
874
+ it "should include the kind if one is set" do
875
+ resource = Puppet::Resource.new("File", "/foo")
876
+ resource.kind = 'im_a_file'
877
+
878
+ expect(Puppet::Resource.from_data_hash(JSON.parse(resource.to_json)).kind).to eq('im_a_file')
879
+ end
880
+
825
881
  it "should include the 'exported' value if one is set" do
826
882
  resource = Puppet::Resource.new("File", "/foo")
827
883
  resource.exported = true
@@ -29,6 +29,17 @@ describe Puppet::Settings do
29
29
  end
30
30
  end
31
31
 
32
+ def stub_config_with(content)
33
+ allow(Puppet.features).to receive(:root?).and_return(false)
34
+ expect(Puppet::FileSystem).to receive(:exist?).
35
+ with(user_config_file_default_location).
36
+ and_return(true).ordered
37
+ expect(@settings).to receive(:read_file).
38
+ with(user_config_file_default_location).
39
+ and_return(content).ordered
40
+ @settings.send(:parse_config_files)
41
+ end
42
+
32
43
  describe "when specifying defaults" do
33
44
  before do
34
45
  @settings = Puppet::Settings.new
@@ -264,23 +275,31 @@ describe Puppet::Settings do
264
275
  expect(@settings[:myval]).to eq("")
265
276
  end
266
277
 
267
- it "should flag string settings from the CLI" do
278
+ it "should retrieve numeric settings from the CLI" do
268
279
  @settings.handlearg("--myval", "12")
269
- expect(@settings.set_by_cli?(:myval)).to be_truthy
280
+ expect(@settings.set_by_cli(:myval)).to eq(12)
281
+ expect(@settings.set_by_cli?(:myval)).to be true
270
282
  end
271
283
 
272
- it "should flag bool settings from the CLI" do
284
+ it "should retrieve string settings from the CLI" do
285
+ @settings.handlearg("--myval", "something")
286
+ expect(@settings.set_by_cli(:myval)).to eq("something")
287
+ expect(@settings.set_by_cli?(:myval)).to be true
288
+ end
289
+
290
+ it "should retrieve bool settings from the CLI" do
273
291
  @settings.handlearg("--bool")
274
- expect(@settings.set_by_cli?(:bool)).to be_truthy
292
+ expect(@settings.set_by_cli(:bool)).to be true
293
+ expect(@settings.set_by_cli?(:bool)).to be true
275
294
  end
276
295
 
277
- it "should not flag settings memory as from CLI" do
296
+ it "should not retrieve settings set in memory as from CLI" do
278
297
  @settings[:myval] = "12"
279
- expect(@settings.set_by_cli?(:myval)).to be_falsey
298
+ expect(@settings.set_by_cli?(:myval)).to be false
280
299
  end
281
300
 
282
301
  it "should find no configured settings by default" do
283
- expect(@settings.set_by_config?(:myval)).to be_falsey
302
+ expect(@settings.set_by_config?(:myval)).to be false
284
303
  end
285
304
 
286
305
  it "should identify configured settings in memory" do
@@ -304,64 +323,66 @@ describe Puppet::Settings do
304
323
  expect(@settings.set_by_config?(:manifest, Puppet[:environment])).to be_truthy
305
324
  end
306
325
 
307
- it "should identify configured settings from the preferred run mode" do
308
- user_config_text = "[#{@settings.preferred_run_mode}]\nmyval = foo"
326
+ context "when handling puppet.conf" do
327
+ describe "#set_by_config?" do
328
+ it "should identify configured settings from the preferred run mode" do
329
+ stub_config_with(<<~CONFIG)
330
+ [#{@settings.preferred_run_mode}]
331
+ myval = foo
332
+ CONFIG
309
333
 
310
- allow(Puppet.features).to receive(:root?).and_return(false)
311
- expect(Puppet::FileSystem).to receive(:exist?).
312
- with(user_config_file_default_location).
313
- and_return(true).ordered
314
- expect(@settings).to receive(:read_file).
315
- with(user_config_file_default_location).
316
- and_return(user_config_text).ordered
334
+ expect(@settings.set_by_config?(:myval)).to be_truthy
335
+ end
317
336
 
318
- @settings.send(:parse_config_files)
319
- expect(@settings.set_by_config?(:myval)).to be_truthy
320
- end
337
+ it "should identify configured settings from the specified run mode" do
338
+ stub_config_with(<<~CONFIG)
339
+ [server]
340
+ myval = foo
341
+ CONFIG
321
342
 
322
- it "should identify configured settings from the specified run mode" do
323
- user_config_text = "[server]\nmyval = foo"
343
+ expect(@settings.set_by_config?(:myval, nil, :server)).to be_truthy
344
+ end
324
345
 
325
- allow(Puppet.features).to receive(:root?).and_return(false)
326
- expect(Puppet::FileSystem).to receive(:exist?).
327
- with(user_config_file_default_location).
328
- and_return(true).ordered
329
- expect(@settings).to receive(:read_file).
330
- with(user_config_file_default_location).
331
- and_return(user_config_text).ordered
346
+ it "should not identify configured settings from an unspecified run mode" do
347
+ stub_config_with(<<~CONFIG)
348
+ [zaz]
349
+ myval = foo
350
+ CONFIG
332
351
 
333
- @settings.send(:parse_config_files)
334
- expect(@settings.set_by_config?(:myval, nil, :server)).to be_truthy
335
- end
352
+ expect(@settings.set_by_config?(:myval)).to be_falsey
353
+ end
336
354
 
337
- it "should not identify configured settings from an unspecified run mode" do
338
- user_config_text = "[zaz]\nmyval = foo"
355
+ it "should identify configured settings from the main section" do
356
+ stub_config_with(<<~CONFIG)
357
+ [main]
358
+ myval = foo
359
+ CONFIG
339
360
 
340
- allow(Puppet.features).to receive(:root?).and_return(false)
341
- expect(Puppet::FileSystem).to receive(:exist?).
342
- with(user_config_file_default_location).
343
- and_return(true).ordered
344
- expect(@settings).to receive(:read_file).
345
- with(user_config_file_default_location).
346
- and_return(user_config_text).ordered
361
+ expect(@settings.set_by_config?(:myval)).to be_truthy
362
+ end
363
+ end
347
364
 
348
- @settings.send(:parse_config_files)
349
- expect(@settings.set_by_config?(:myval)).to be_falsey
350
- end
365
+ describe "#set_in_section" do
366
+ it "should retrieve configured settings from the specified section" do
367
+ stub_config_with(<<~CONFIG)
368
+ [agent]
369
+ myval = foo
370
+ CONFIG
351
371
 
352
- it "should identify configured settings from the main section" do
353
- user_config_text = "[main]\nmyval = foo"
372
+ expect(@settings.set_in_section(:myval, :agent)).to eq("foo")
373
+ expect(@settings.set_in_section?(:myval, :agent)).to be true
374
+ end
354
375
 
355
- allow(Puppet.features).to receive(:root?).and_return(false)
356
- expect(Puppet::FileSystem).to receive(:exist?).
357
- with(user_config_file_default_location).
358
- and_return(true).ordered
359
- expect(@settings).to receive(:read_file).
360
- with(user_config_file_default_location).
361
- and_return(user_config_text).ordered
376
+ it "should not retrieve configured settings from a different section" do
377
+ stub_config_with(<<~CONFIG)
378
+ [main]
379
+ myval = foo
380
+ CONFIG
362
381
 
363
- @settings.send(:parse_config_files)
364
- expect(@settings.set_by_config?(:myval)).to be_truthy
382
+ expect(@settings.set_in_section(:myval, :agent)).to be nil
383
+ expect(@settings.set_in_section?(:myval, :agent)).to be false
384
+ end
385
+ end
365
386
  end
366
387
 
367
388
  it "should clear the cache when setting getopt-specific values" do
@@ -2120,7 +2141,7 @@ describe Puppet::Settings do
2120
2141
  end
2121
2142
 
2122
2143
  def a_user_type_for(username)
2123
- user = double('user')
2144
+ user = double('user', 'suitable?': true, to_s: "User[#{username}]")
2124
2145
  expect(Puppet::Type.type(:user)).to receive(:new).with(hash_including(name: username)).and_return(user)
2125
2146
  user
2126
2147
  end
@@ -2153,6 +2174,16 @@ describe Puppet::Settings do
2153
2174
 
2154
2175
  expect(settings).to be_service_user_available
2155
2176
  end
2177
+
2178
+ it "raises if the user is not suitable" do
2179
+ settings[:user] = "foo"
2180
+
2181
+ expect(a_user_type_for("foo")).to receive(:suitable?).and_return(false)
2182
+
2183
+ expect {
2184
+ settings.service_user_available?
2185
+ }.to raise_error(Puppet::Error, /Cannot manage owner permissions, because the provider for 'User\[foo\]' is not functional/)
2186
+ end
2156
2187
  end
2157
2188
 
2158
2189
  describe "when determining if the service group is available" do
@@ -2163,7 +2194,7 @@ describe Puppet::Settings do
2163
2194
  end
2164
2195
 
2165
2196
  def a_group_type_for(groupname)
2166
- group = double('group')
2197
+ group = double('group', 'suitable?': true, to_s: "Group[#{groupname}]")
2167
2198
  expect(Puppet::Type.type(:group)).to receive(:new).with(hash_including(name: groupname)).and_return(group)
2168
2199
  group
2169
2200
  end
@@ -2196,6 +2227,16 @@ describe Puppet::Settings do
2196
2227
 
2197
2228
  expect(settings).to be_service_group_available
2198
2229
  end
2230
+
2231
+ it "raises if the group is not suitable" do
2232
+ settings[:group] = "foo"
2233
+
2234
+ expect(a_group_type_for("foo")).to receive(:suitable?).and_return(false)
2235
+
2236
+ expect {
2237
+ settings.service_group_available?
2238
+ }.to raise_error(Puppet::Error, /Cannot manage group permissions, because the provider for 'Group\[foo\]' is not functional/)
2239
+ end
2199
2240
  end
2200
2241
 
2201
2242
  describe "when dealing with command-line options" do
@@ -338,33 +338,27 @@ describe Puppet::SSL::CertificateRequest do
338
338
  expect(csr.verify(key.content)).to be_truthy
339
339
  end
340
340
 
341
- # Attempts to use SHA512 and SHA384 for signing certificates don't seem to work
342
- # So commenting it out till it is sorted out
343
- # The problem seems to be with the ability to sign a CSR when using either of
344
- # these hash algorithms
345
- pending "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
341
+ it "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
342
+ key = OpenSSL::PKey::RSA.new(2048)
346
343
  csr = OpenSSL::X509::Request.new
347
344
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
348
345
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
349
346
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA512").and_return(true)
350
347
  signer = Puppet::SSL::CertificateSigner.new
351
- signer.sign(csr, key.content)
352
- expect(csr.verify(key.content)).to be_truthy
348
+ signer.sign(csr, key)
349
+ expect(csr.verify(key)).to be_truthy
353
350
  end
354
351
 
355
- # Attempts to use SHA512 and SHA384 for signing certificates don't seem to work
356
- # So commenting it out till it is sorted out
357
- # The problem seems to be with the ability to sign a CSR when using either of
358
- # these hash algorithms
359
- pending "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
352
+ it "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
353
+ key = OpenSSL::PKey::RSA.new(2048)
360
354
  csr = OpenSSL::X509::Request.new
361
355
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
362
356
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
363
357
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA512").and_return(false)
364
358
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA384").and_return(true)
365
359
  signer = Puppet::SSL::CertificateSigner.new
366
- signer.sign(csr, key.content)
367
- expect(csr.verify(key.content)).to be_truthy
360
+ signer.sign(csr, key)
361
+ expect(csr.verify(key)).to be_truthy
368
362
  end
369
363
 
370
364
  it "should use SHA224 to sign the csr when SHA256/SHA1/SHA512/SHA384 aren't available" do
@@ -138,6 +138,57 @@ describe Puppet::Transaction::Persistence do
138
138
  persistence = Puppet::Transaction::Persistence.new
139
139
  expect(persistence.load.dig("File[/tmp/audit]", "parameters", "mtime", "system_value")).to contain_exactly(be_a(Time))
140
140
  end
141
+
142
+ it 'should load Regexp' do
143
+ write_state_file(<<~END)
144
+ system_value:
145
+ - !ruby/regexp /regexp/
146
+ END
147
+
148
+ persistence = Puppet::Transaction::Persistence.new
149
+ expect(persistence.load.dig("system_value")).to contain_exactly(be_a(Regexp))
150
+ end
151
+
152
+ it 'should load semantic puppet version' do
153
+ write_state_file(<<~END)
154
+ system_value:
155
+ - !ruby/object:SemanticPuppet::Version
156
+ major: 1
157
+ minor: 0
158
+ patch: 0
159
+ prerelease:
160
+ build:
161
+ END
162
+
163
+ persistence = Puppet::Transaction::Persistence.new
164
+ expect(persistence.load.dig("system_value")).to contain_exactly(be_a(SemanticPuppet::Version))
165
+ end
166
+
167
+ it 'should load puppet time related objects' do
168
+ write_state_file(<<~END)
169
+ system_value:
170
+ - !ruby/object:Puppet::Pops::Time::Timestamp
171
+ nsecs: 1638316135955087259
172
+ - !ruby/object:Puppet::Pops::Time::TimeData
173
+ nsecs: 1495789430910161286
174
+ - !ruby/object:Puppet::Pops::Time::Timespan
175
+ nsecs: 1495789430910161286
176
+ END
177
+
178
+ persistence = Puppet::Transaction::Persistence.new
179
+ expect(persistence.load.dig("system_value")).to contain_exactly(be_a(Puppet::Pops::Time::Timestamp), be_a(Puppet::Pops::Time::TimeData), be_a(Puppet::Pops::Time::Timespan))
180
+ end
181
+
182
+ it 'should load binary objects' do
183
+ write_state_file(<<~END)
184
+ system_value:
185
+ - !ruby/object:Puppet::Pops::Types::PBinaryType::Binary
186
+ binary_buffer: ''
187
+ END
188
+
189
+ persistence = Puppet::Transaction::Persistence.new
190
+ expect(persistence.load.dig("system_value")).to contain_exactly(be_a(Puppet::Pops::Types::PBinaryType::Binary))
191
+ end
141
192
  end
142
193
  end
143
194
 
@@ -239,6 +239,19 @@ RSpec.describe Puppet::Type.type(:exec) do
239
239
  expect(dependencies.collect(&:to_s)).to eq([Puppet::Relationship.new(tmp, execer).to_s])
240
240
  end
241
241
 
242
+ it "should be able to autorequire files mentioned in the array command" do
243
+ foo = make_absolute('/bin/foo')
244
+ catalog = Puppet::Resource::Catalog.new
245
+ tmp = Puppet::Type.type(:file).new(:name => foo)
246
+ execer = Puppet::Type.type(:exec).new(:name => 'test array', :command => [foo, 'bar'])
247
+
248
+ catalog.add_resource tmp
249
+ catalog.add_resource execer
250
+ dependencies = execer.autorequire(catalog)
251
+
252
+ expect(dependencies.collect(&:to_s)).to eq([Puppet::Relationship.new(tmp, execer).to_s])
253
+ end
254
+
242
255
  describe "when handling the path parameter" do
243
256
  expect = %w{one two three four}
244
257
  { "an array" => expect,
@@ -346,7 +359,13 @@ RSpec.describe Puppet::Type.type(:exec) do
346
359
  end
347
360
 
348
361
  shared_examples_for "all exec command parameters" do |param|
349
- { "relative" => "example", "absolute" => "/bin/example" }.sort.each do |name, command|
362
+ array_cmd = ["/bin/example", "*"]
363
+ array_cmd = [["/bin/example", "*"]] if [:onlyif, :unless].include?(param)
364
+
365
+ commands = { "relative" => "example", "absolute" => "/bin/example" }
366
+ commands["array"] = array_cmd
367
+
368
+ commands.sort.each do |name, command|
350
369
  describe "if command is #{name}" do
351
370
  before :each do
352
371
  @param = param
@@ -379,45 +398,44 @@ RSpec.describe Puppet::Type.type(:exec) do
379
398
  end
380
399
 
381
400
  shared_examples_for "all exec command parameters that take arrays" do |param|
382
- describe "when given an array of inputs" do
383
- before :each do
384
- @test = Puppet::Type.type(:exec).new(:name => @executable)
385
- end
401
+ [
402
+ %w{one two three},
403
+ [%w{one -a}, %w{two, -b}, 'three']
404
+ ].each do |input|
405
+ context "when given #{input.inspect} as input" do
406
+ let(:resource) { Puppet::Type.type(:exec).new(:name => @executable) }
386
407
 
387
- it "should accept the array when all commands return valid" do
388
- input = %w{one two three}
389
- expect(@test.provider).to receive(:validatecmd).exactly(input.length).times.and_return(true)
390
- @test[param] = input
391
- expect(@test[param]).to eq(input)
392
- end
408
+ it "accepts the array when all commands return valid" do
409
+ input = %w{one two three}
410
+ allow(resource.provider).to receive(:validatecmd).exactly(input.length).times.and_return(true)
411
+ resource[param] = input
412
+ expect(resource[param]).to eq(input)
413
+ end
393
414
 
394
- it "should reject the array when any commands return invalid" do
395
- input = %w{one two three}
396
- expect(@test.provider).to receive(:validatecmd).with(input.first).and_return(false)
397
- input[1..-1].each do |cmd|
398
- expect(@test.provider).to receive(:validatecmd).with(cmd).and_return(true)
415
+ it "rejects the array when any commands return invalid" do
416
+ input = %w{one two three}
417
+ allow(resource.provider).to receive(:validatecmd).with(input[0]).and_return(true)
418
+ allow(resource.provider).to receive(:validatecmd).with(input[1]).and_raise(Puppet::Error)
419
+
420
+ expect { resource[param] = input }.to raise_error(Puppet::ResourceError, /Parameter #{param} failed/)
399
421
  end
400
- @test[param] = input
401
- expect(@test[param]).to eq(input)
402
- end
403
422
 
404
- it "should reject the array when all commands return invalid" do
405
- input = %w{one two three}
406
- expect(@test.provider).to receive(:validatecmd).exactly(input.length).times.and_return(false)
407
- @test[param] = input
408
- expect(@test[param]).to eq(input)
423
+ it "stops at the first invalid command" do
424
+ input = %w{one two three}
425
+ allow(resource.provider).to receive(:validatecmd).with(input[0]).and_raise(Puppet::Error)
426
+
427
+ expect(resource.provider).not_to receive(:validatecmd).with(input[1])
428
+ expect(resource.provider).not_to receive(:validatecmd).with(input[2])
429
+ expect { resource[param] = input }.to raise_error(Puppet::ResourceError, /Parameter #{param} failed/)
430
+ end
409
431
  end
410
432
  end
411
433
  end
412
434
 
413
435
  describe "when setting command" do
414
436
  subject { described_class.new(:name => @command) }
415
- it "fails when passed an Array" do
416
- expect { subject[:command] = [] }.to raise_error Puppet::Error, /Command must be a String/
417
- end
418
-
419
437
  it "fails when passed a Hash" do
420
- expect { subject[:command] = {} }.to raise_error Puppet::Error, /Command must be a String/
438
+ expect { subject[:command] = {} }.to raise_error Puppet::Error, /Command must be a String or Array<String>/
421
439
  end
422
440
  end
423
441
 
@@ -759,6 +777,35 @@ RSpec.describe Puppet::Type.type(:exec) do
759
777
  end
760
778
  end
761
779
 
780
+ context 'with an array of arrays with multiple items' do
781
+ before do
782
+ [true, false].each do |check|
783
+ allow(@test.provider).to receive(:run).with([@pass, '--flag'], check).
784
+ and_return(['test output', @pass_status])
785
+ allow(@test.provider).to receive(:run).with([@fail, '--flag'], check).
786
+ and_return(['test output', @fail_status])
787
+ allow(@test.provider).to receive(:run).with([@pass], check).
788
+ and_return(['test output', @pass_status])
789
+ allow(@test.provider).to receive(:run).with([@fail], check).
790
+ and_return(['test output', @fail_status])
791
+ end
792
+ end
793
+ it "runs if all the commands exits non-zero" do
794
+ @test[param] = [[@fail, '--flag'], [@fail], [@fail, '--flag']]
795
+ expect(@test.check_all_attributes).to eq(true)
796
+ end
797
+
798
+ it "does not run if one command exits zero" do
799
+ @test[param] = [[@pass, '--flag'], [@pass], [@fail, '--flag']]
800
+ expect(@test.check_all_attributes).to eq(false)
801
+ end
802
+
803
+ it "does not run if all command exits zero" do
804
+ @test[param] = [[@pass, '--flag'], [@pass], [@pass, '--flag']]
805
+ expect(@test.check_all_attributes).to eq(false)
806
+ end
807
+ end
808
+
762
809
  it "should emit output to debug" do
763
810
  Puppet::Util::Log.level = :debug
764
811
  @test[param] = @fail
@@ -264,7 +264,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
264
264
 
265
265
  expect(@resource[:owner]).to eq(100)
266
266
  expect(@resource[:group]).to eq(200)
267
- expect(@resource[:mode]).to eq("173")
267
+ expect(@resource[:mode]).to eq("0173")
268
268
 
269
269
  # Metadata calls it checksum and checksum_type, we call it content and checksum.
270
270
  expect(@resource[:content]).to eq(@metadata.checksum)
@@ -281,7 +281,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
281
281
 
282
282
  expect(@resource[:owner]).to eq(1)
283
283
  expect(@resource[:group]).to eq(2)
284
- expect(@resource[:mode]).to eq('173')
284
+ expect(@resource[:mode]).to eq('0173')
285
285
  expect(@resource[:content]).not_to eq(@metadata.checksum)
286
286
  expect(@resource[:checksum]).not_to eq(@metadata.checksum_type.to_sym)
287
287
  end
@@ -318,7 +318,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
318
318
 
319
319
  expect(@resource[:owner]).to eq(100)
320
320
  expect(@resource[:group]).to eq(200)
321
- expect(@resource[:mode]).to eq("173")
321
+ expect(@resource[:mode]).to eq("0173")
322
322
  end
323
323
 
324
324
  it "copies the remote owner" do
@@ -336,7 +336,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
336
336
  it "copies the remote mode" do
337
337
  @source.copy_source_values
338
338
 
339
- expect(@resource[:mode]).to eq("173")
339
+ expect(@resource[:mode]).to eq("0173")
340
340
  end
341
341
  end
342
342