puppet 7.8.0 → 7.12.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 (379) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +5 -5
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +15 -15
  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/install.rb +0 -4
  17. data/lib/puppet/application/agent.rb +4 -0
  18. data/lib/puppet/application/apply.rb +20 -2
  19. data/lib/puppet/application/filebucket.rb +1 -0
  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 +1 -0
  23. data/lib/puppet/configurer.rb +176 -58
  24. data/lib/puppet/confine/variable.rb +1 -1
  25. data/lib/puppet/defaults.rb +67 -29
  26. data/lib/puppet/environments.rb +75 -25
  27. data/lib/puppet/face/help/action.erb +1 -0
  28. data/lib/puppet/face/help/face.erb +1 -0
  29. data/lib/puppet/face/node/clean.rb +1 -1
  30. data/lib/puppet/facter_impl.rb +96 -0
  31. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  32. data/lib/puppet/file_serving/configuration.rb +2 -0
  33. data/lib/puppet/file_serving/mount/file.rb +4 -4
  34. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  35. data/lib/puppet/file_system/file_impl.rb +3 -1
  36. data/lib/puppet/file_system/windows.rb +2 -2
  37. data/lib/puppet/file_system.rb +2 -1
  38. data/lib/puppet/forge/cache.rb +1 -1
  39. data/lib/puppet/forge.rb +4 -4
  40. data/lib/puppet/functions/empty.rb +8 -0
  41. data/lib/puppet/functions/find_template.rb +2 -2
  42. data/lib/puppet/functions/strftime.rb +1 -0
  43. data/lib/puppet/functions/unwrap.rb +17 -2
  44. data/lib/puppet/http/service/compiler.rb +6 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  46. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  47. data/lib/puppet/indirector/facts/facter.rb +6 -6
  48. data/lib/puppet/indirector/indirection.rb +1 -1
  49. data/lib/puppet/indirector/resource/ral.rb +6 -1
  50. data/lib/puppet/indirector/terminus.rb +4 -0
  51. data/lib/puppet/interface/documentation.rb +1 -0
  52. data/lib/puppet/module/plan.rb +0 -1
  53. data/lib/puppet/module/task.rb +1 -1
  54. data/lib/puppet/module_tool/applications/installer.rb +12 -4
  55. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  56. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  57. data/lib/puppet/module_tool/errors/shared.rb +17 -0
  58. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  59. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  60. data/lib/puppet/node/environment.rb +10 -11
  61. data/lib/puppet/pal/pal_impl.rb +1 -1
  62. data/lib/puppet/parser/scope.rb +8 -7
  63. data/lib/puppet/parser/templatewrapper.rb +1 -0
  64. data/lib/puppet/pops/evaluator/closure.rb +7 -5
  65. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  66. data/lib/puppet/pops/model/ast.rb +1 -0
  67. data/lib/puppet/pops/model/factory.rb +14 -13
  68. data/lib/puppet/pops/parser/egrammar.ra +2 -2
  69. data/lib/puppet/pops/parser/eparser.rb +752 -753
  70. data/lib/puppet/pops/parser/lexer2.rb +69 -68
  71. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  72. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  73. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  74. data/lib/puppet/pops/types/type_formatter.rb +7 -6
  75. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  76. data/lib/puppet/pops/types/types.rb +1 -1
  77. data/lib/puppet/provider/aix_object.rb +1 -1
  78. data/lib/puppet/provider/exec/posix.rb +16 -4
  79. data/lib/puppet/provider/group/groupadd.rb +5 -2
  80. data/lib/puppet/provider/package/pip.rb +15 -3
  81. data/lib/puppet/provider/package/pkg.rb +19 -2
  82. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  83. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  84. data/lib/puppet/provider/package/windows/exe_package.rb +30 -1
  85. data/lib/puppet/provider/package/windows/package.rb +2 -1
  86. data/lib/puppet/provider/package/windows.rb +14 -1
  87. data/lib/puppet/provider/package/yum.rb +1 -1
  88. data/lib/puppet/provider/parsedfile.rb +3 -0
  89. data/lib/puppet/provider/service/base.rb +1 -1
  90. data/lib/puppet/provider/service/init.rb +5 -5
  91. data/lib/puppet/provider/service/launchd.rb +2 -2
  92. data/lib/puppet/provider/service/redhat.rb +1 -1
  93. data/lib/puppet/provider/service/smf.rb +3 -3
  94. data/lib/puppet/provider/service/systemd.rb +2 -2
  95. data/lib/puppet/provider/service/upstart.rb +5 -5
  96. data/lib/puppet/provider/user/aix.rb +44 -1
  97. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  98. data/lib/puppet/provider/user/useradd.rb +72 -16
  99. data/lib/puppet/provider.rb +1 -1
  100. data/lib/puppet/reference/providers.rb +2 -2
  101. data/lib/puppet/resource/type_collection.rb +4 -1
  102. data/lib/puppet/runtime.rb +11 -1
  103. data/lib/puppet/settings/config_file.rb +1 -8
  104. data/lib/puppet/settings/file_setting.rb +3 -8
  105. data/lib/puppet/settings/value_translator.rb +0 -1
  106. data/lib/puppet/settings.rb +32 -9
  107. data/lib/puppet/test/test_helper.rb +4 -1
  108. data/lib/puppet/transaction/persistence.rb +11 -1
  109. data/lib/puppet/transaction/report.rb +15 -1
  110. data/lib/puppet/type/exec.rb +35 -5
  111. data/lib/puppet/type/file/mode.rb +6 -0
  112. data/lib/puppet/type/file.rb +6 -6
  113. data/lib/puppet/type/filebucket.rb +2 -2
  114. data/lib/puppet/type/group.rb +0 -1
  115. data/lib/puppet/type/resources.rb +1 -1
  116. data/lib/puppet/type/service.rb +8 -3
  117. data/lib/puppet/type/tidy.rb +1 -1
  118. data/lib/puppet/type/user.rb +1 -2
  119. data/lib/puppet/type.rb +1 -1
  120. data/lib/puppet/util/autoload.rb +1 -1
  121. data/lib/puppet/util/command_line.rb +1 -1
  122. data/lib/puppet/util/filetype.rb +2 -2
  123. data/lib/puppet/util/json.rb +3 -0
  124. data/lib/puppet/util/log.rb +1 -2
  125. data/lib/puppet/util/logging.rb +1 -25
  126. data/lib/puppet/util/monkey_patches.rb +2 -17
  127. data/lib/puppet/util/pidlock.rb +1 -1
  128. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  129. data/lib/puppet/util/suidmanager.rb +1 -2
  130. data/lib/puppet/util/symbolic_file_mode.rb +29 -17
  131. data/lib/puppet/util/tagging.rb +1 -0
  132. data/lib/puppet/util/windows/sid.rb +3 -1
  133. data/lib/puppet/util/windows/user.rb +0 -1
  134. data/lib/puppet/util.rb +4 -3
  135. data/lib/puppet/version.rb +1 -1
  136. data/lib/puppet/x509/cert_provider.rb +3 -21
  137. data/lib/puppet.rb +5 -9
  138. data/locales/puppet.pot +409 -329
  139. data/man/man5/puppet.conf.5 +73 -25
  140. data/man/man8/puppet-agent.8 +4 -1
  141. data/man/man8/puppet-apply.8 +1 -1
  142. data/man/man8/puppet-catalog.8 +9 -9
  143. data/man/man8/puppet-config.8 +1 -1
  144. data/man/man8/puppet-describe.8 +1 -1
  145. data/man/man8/puppet-device.8 +1 -1
  146. data/man/man8/puppet-doc.8 +1 -1
  147. data/man/man8/puppet-epp.8 +1 -1
  148. data/man/man8/puppet-facts.8 +7 -7
  149. data/man/man8/puppet-filebucket.8 +1 -1
  150. data/man/man8/puppet-generate.8 +1 -1
  151. data/man/man8/puppet-help.8 +1 -1
  152. data/man/man8/puppet-lookup.8 +1 -1
  153. data/man/man8/puppet-module.8 +3 -3
  154. data/man/man8/puppet-node.8 +5 -5
  155. data/man/man8/puppet-parser.8 +1 -1
  156. data/man/man8/puppet-plugin.8 +1 -1
  157. data/man/man8/puppet-report.8 +5 -5
  158. data/man/man8/puppet-resource.8 +1 -1
  159. data/man/man8/puppet-script.8 +1 -1
  160. data/man/man8/puppet-ssl.8 +1 -1
  161. data/man/man8/puppet.8 +2 -2
  162. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  163. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  164. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  165. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  166. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  167. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  168. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  169. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  170. data/spec/fixtures/ssl/127.0.0.1-key.pem +106 -106
  171. data/spec/fixtures/ssl/127.0.0.1.pem +48 -48
  172. data/spec/fixtures/ssl/bad-basic-constraints.pem +54 -54
  173. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +51 -51
  174. data/spec/fixtures/ssl/ca.pem +52 -52
  175. data/spec/fixtures/ssl/crl.pem +25 -25
  176. data/spec/fixtures/ssl/ec-key-openssl.pem +8 -0
  177. data/spec/fixtures/ssl/ec-key-pk8.pem +5 -0
  178. data/spec/fixtures/ssl/ec-key.pem +11 -11
  179. data/spec/fixtures/ssl/ec.pem +32 -32
  180. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  181. data/spec/fixtures/ssl/encrypted-key.pem +107 -107
  182. data/spec/fixtures/ssl/intermediate-agent-crl.pem +25 -25
  183. data/spec/fixtures/ssl/intermediate-agent.pem +54 -54
  184. data/spec/fixtures/ssl/intermediate-crl.pem +28 -28
  185. data/spec/fixtures/ssl/intermediate.pem +51 -51
  186. data/spec/fixtures/ssl/oid-key.pem +117 -0
  187. data/spec/fixtures/ssl/oid.pem +69 -0
  188. data/spec/fixtures/ssl/pluto-key.pem +106 -106
  189. data/spec/fixtures/ssl/pluto.pem +50 -50
  190. data/spec/fixtures/ssl/request-key.pem +106 -106
  191. data/spec/fixtures/ssl/request.pem +45 -45
  192. data/spec/fixtures/ssl/revoked-key.pem +106 -106
  193. data/spec/fixtures/ssl/revoked.pem +49 -49
  194. data/spec/fixtures/ssl/signed-key.pem +106 -106
  195. data/spec/fixtures/ssl/signed.pem +47 -47
  196. data/spec/fixtures/ssl/tampered-cert.pem +49 -49
  197. data/spec/fixtures/ssl/tampered-csr.pem +45 -45
  198. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
  199. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +106 -106
  200. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -48
  201. data/spec/fixtures/ssl/unknown-ca-key.pem +106 -106
  202. data/spec/fixtures/ssl/unknown-ca.pem +52 -52
  203. data/spec/integration/application/agent_spec.rb +118 -52
  204. data/spec/integration/application/filebucket_spec.rb +16 -0
  205. data/spec/integration/application/module_spec.rb +21 -0
  206. data/spec/integration/application/resource_spec.rb +35 -1
  207. data/spec/integration/application/ssl_spec.rb +20 -0
  208. data/spec/integration/configurer_spec.rb +18 -2
  209. data/spec/integration/defaults_spec.rb +5 -0
  210. data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
  211. data/spec/integration/indirector/facts/facter_spec.rb +93 -39
  212. data/spec/integration/l10n/compiler_spec.rb +37 -0
  213. data/spec/integration/transaction/report_spec.rb +1 -1
  214. data/spec/integration/type/exec_spec.rb +70 -45
  215. data/spec/integration/type/file_spec.rb +2 -2
  216. data/spec/integration/type/package_spec.rb +6 -6
  217. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  218. data/spec/integration/util/windows/process_spec.rb +1 -9
  219. data/spec/lib/puppet/test_ca.rb +5 -0
  220. data/spec/lib/puppet_spec/modules.rb +13 -2
  221. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  222. data/spec/lib/puppet_spec/settings.rb +1 -0
  223. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  224. data/spec/shared_contexts/l10n.rb +27 -0
  225. data/spec/spec_helper.rb +1 -10
  226. data/spec/unit/application/apply_spec.rb +76 -56
  227. data/spec/unit/application/resource_spec.rb +29 -0
  228. data/spec/unit/configurer_spec.rb +291 -56
  229. data/spec/unit/environments_spec.rb +184 -0
  230. data/spec/unit/facter_impl_spec.rb +31 -0
  231. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  232. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  233. data/spec/unit/file_serving/configuration_spec.rb +12 -4
  234. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  235. data/spec/unit/file_system_spec.rb +13 -0
  236. data/spec/unit/functions/assert_type_spec.rb +1 -1
  237. data/spec/unit/functions/empty_spec.rb +10 -0
  238. data/spec/unit/functions/logging_spec.rb +1 -0
  239. data/spec/unit/functions/lookup_spec.rb +87 -0
  240. data/spec/unit/functions/unwrap_spec.rb +8 -0
  241. data/spec/unit/functions4_spec.rb +2 -2
  242. data/spec/unit/http/service/compiler_spec.rb +8 -0
  243. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  244. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  245. data/spec/unit/indirector/indirection_spec.rb +10 -3
  246. data/spec/unit/indirector/resource/ral_spec.rb +40 -75
  247. data/spec/unit/interface/action_spec.rb +0 -9
  248. data/spec/unit/module_spec.rb +14 -0
  249. data/spec/unit/module_tool/applications/installer_spec.rb +52 -14
  250. data/spec/unit/network/formats_spec.rb +6 -0
  251. data/spec/unit/parser/compiler_spec.rb +29 -0
  252. data/spec/unit/parser/templatewrapper_spec.rb +12 -2
  253. data/spec/unit/pops/loaders/dependency_loader_spec.rb +0 -9
  254. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  255. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  256. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  257. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  258. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  259. data/spec/unit/provider/package/gem_spec.rb +1 -1
  260. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  261. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  262. data/spec/unit/provider/package/pip_spec.rb +38 -1
  263. data/spec/unit/provider/package/pkg_spec.rb +34 -5
  264. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  265. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  266. data/spec/unit/provider/package/windows/exe_package_spec.rb +17 -0
  267. data/spec/unit/provider/parsedfile_spec.rb +10 -0
  268. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  269. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  270. data/spec/unit/provider/user/aix_spec.rb +100 -0
  271. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  272. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  273. data/spec/unit/provider_spec.rb +4 -4
  274. data/spec/unit/puppet_spec.rb +12 -4
  275. data/spec/unit/resource/type_collection_spec.rb +16 -0
  276. data/spec/unit/resource/type_spec.rb +2 -2
  277. data/spec/unit/settings/config_file_spec.rb +1 -11
  278. data/spec/unit/settings/file_setting_spec.rb +10 -7
  279. data/spec/unit/settings/value_translator_spec.rb +4 -5
  280. data/spec/unit/settings_spec.rb +120 -79
  281. data/spec/unit/ssl/ssl_provider_spec.rb +18 -16
  282. data/spec/unit/type/exec_spec.rb +76 -29
  283. data/spec/unit/type/file/source_spec.rb +4 -4
  284. data/spec/unit/type/service_spec.rb +27 -0
  285. data/spec/unit/type/tidy_spec.rb +7 -0
  286. data/spec/unit/type_spec.rb +2 -2
  287. data/spec/unit/util/autoload_spec.rb +25 -8
  288. data/spec/unit/util/ldap/connection_spec.rb +10 -10
  289. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  290. data/spec/unit/util/logging_spec.rb +2 -0
  291. data/spec/unit/util/windows/sid_spec.rb +39 -4
  292. data/spec/unit/util_spec.rb +1 -3
  293. data/spec/unit/x509/cert_provider_spec.rb +9 -1
  294. data/tasks/generate_cert_fixtures.rake +10 -1
  295. data/tasks/parallel.rake +3 -3
  296. metadata +51 -95
  297. data/ext/README.environment +0 -8
  298. data/ext/dbfix.sql +0 -132
  299. data/ext/debian/README.Debian +0 -8
  300. data/ext/debian/README.source +0 -2
  301. data/ext/debian/TODO.Debian +0 -1
  302. data/ext/debian/changelog.erb +0 -1122
  303. data/ext/debian/compat +0 -1
  304. data/ext/debian/control +0 -144
  305. data/ext/debian/copyright +0 -339
  306. data/ext/debian/docs +0 -1
  307. data/ext/debian/fileserver.conf +0 -41
  308. data/ext/debian/puppet-common.dirs +0 -13
  309. data/ext/debian/puppet-common.install +0 -3
  310. data/ext/debian/puppet-common.lintian-overrides +0 -5
  311. data/ext/debian/puppet-common.manpages +0 -28
  312. data/ext/debian/puppet-common.postinst +0 -35
  313. data/ext/debian/puppet-common.postrm +0 -33
  314. data/ext/debian/puppet-el.dirs +0 -1
  315. data/ext/debian/puppet-el.emacsen-install +0 -25
  316. data/ext/debian/puppet-el.emacsen-remove +0 -11
  317. data/ext/debian/puppet-el.emacsen-startup +0 -9
  318. data/ext/debian/puppet-el.install +0 -1
  319. data/ext/debian/puppet-testsuite.install +0 -2
  320. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  321. data/ext/debian/puppet.lintian-overrides +0 -3
  322. data/ext/debian/puppet.logrotate +0 -20
  323. data/ext/debian/puppet.postinst +0 -20
  324. data/ext/debian/puppet.postrm +0 -20
  325. data/ext/debian/puppet.preinst +0 -20
  326. data/ext/debian/puppetmaster-common.install +0 -2
  327. data/ext/debian/puppetmaster-common.manpages +0 -2
  328. data/ext/debian/puppetmaster-common.postinst +0 -6
  329. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  330. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  331. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  332. data/ext/debian/puppetmaster.README.debian +0 -17
  333. data/ext/debian/puppetmaster.default +0 -14
  334. data/ext/debian/puppetmaster.init +0 -137
  335. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  336. data/ext/debian/puppetmaster.postinst +0 -20
  337. data/ext/debian/puppetmaster.postrm +0 -5
  338. data/ext/debian/puppetmaster.preinst +0 -22
  339. data/ext/debian/rules +0 -132
  340. data/ext/debian/source/format +0 -1
  341. data/ext/debian/source/options +0 -1
  342. data/ext/debian/vim-puppet.README.Debian +0 -13
  343. data/ext/debian/vim-puppet.dirs +0 -5
  344. data/ext/debian/vim-puppet.yaml +0 -7
  345. data/ext/debian/watch +0 -2
  346. data/ext/freebsd/puppetd +0 -26
  347. data/ext/freebsd/puppetmasterd +0 -26
  348. data/ext/gentoo/conf.d/puppet +0 -5
  349. data/ext/gentoo/conf.d/puppetmaster +0 -12
  350. data/ext/gentoo/init.d/puppet +0 -38
  351. data/ext/gentoo/init.d/puppetmaster +0 -51
  352. data/ext/gentoo/puppet/fileserver.conf +0 -41
  353. data/ext/ips/puppet-agent +0 -44
  354. data/ext/ips/puppet-master +0 -44
  355. data/ext/ips/puppet.p5m.erb +0 -12
  356. data/ext/ips/puppetagent.xml +0 -42
  357. data/ext/ips/puppetmaster.xml +0 -42
  358. data/ext/ips/rules +0 -19
  359. data/ext/ips/transforms +0 -34
  360. data/ext/ldap/puppet.schema +0 -24
  361. data/ext/logcheck/puppet +0 -23
  362. data/ext/osx/file_mapping.yaml +0 -28
  363. data/ext/osx/postflight.erb +0 -109
  364. data/ext/osx/preflight.erb +0 -52
  365. data/ext/osx/prototype.plist.erb +0 -38
  366. data/ext/redhat/fileserver.conf +0 -41
  367. data/ext/redhat/logrotate +0 -21
  368. data/ext/redhat/puppet.spec.erb +0 -841
  369. data/ext/redhat/server.init +0 -128
  370. data/ext/redhat/server.sysconfig +0 -13
  371. data/ext/solaris/pkginfo +0 -6
  372. data/ext/solaris/smf/puppetd.xml +0 -77
  373. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  374. data/ext/solaris/smf/svc-puppetd +0 -71
  375. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  376. data/ext/suse/puppet.spec +0 -310
  377. data/ext/suse/server.init +0 -173
  378. data/ext/yaml_nodes.rb +0 -105
  379. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -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
@@ -1024,7 +1045,7 @@ describe Puppet::Settings do
1024
1045
  expect(@settings[:two]).to eq(false)
1025
1046
  end
1026
1047
 
1027
- it "should convert integers in the configuration file into Ruby Integers" do
1048
+ it "doesn't convert integers in the configuration file" do
1028
1049
  File.write(@file, <<~CONF)
1029
1050
  [main]
1030
1051
  one = 65
@@ -1032,7 +1053,7 @@ describe Puppet::Settings do
1032
1053
 
1033
1054
  @settings.initialize_global_settings
1034
1055
 
1035
- expect(@settings[:one]).to eq(65)
1056
+ expect(@settings[:one]).to eq('65')
1036
1057
  end
1037
1058
 
1038
1059
  it "should support specifying all metadata (owner, group, mode) in the configuration file" do
@@ -1087,10 +1108,10 @@ describe Puppet::Settings do
1087
1108
  context "when setting serverport and masterport" do
1088
1109
  before(:each) do
1089
1110
  @settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
1090
- @settings.define_settings :server, :masterport => { :desc => "a", :default => 1000 }
1111
+ @settings.define_settings :server, :masterport => { :desc => "a", :default => 1000, :type => :port }
1091
1112
  @settings.define_settings :server, :serverport => { :type => :alias, :alias_for => :masterport }
1092
- @settings.define_settings :server, :ca_port => { :desc => "a", :default => "$serverport" }
1093
- @settings.define_settings :server, :report_port => { :desc => "a", :default => "$serverport" }
1113
+ @settings.define_settings :server, :ca_port => { :desc => "a", :default => "$serverport", :type => :port }
1114
+ @settings.define_settings :server, :report_port => { :desc => "a", :default => "$serverport", :type => :port }
1094
1115
 
1095
1116
  config_file = tmpfile('config')
1096
1117
  @settings[:config] = config_file
@@ -1111,8 +1132,8 @@ describe Puppet::Settings do
1111
1132
  end
1112
1133
 
1113
1134
  it { expect(@settings[:serverport]).to eq(444) }
1114
- it { expect(@settings[:ca_port]).to eq("444") }
1115
- it { expect(@settings[:report_port]).to eq("444") }
1135
+ it { expect(@settings[:ca_port]).to eq(444) }
1136
+ it { expect(@settings[:report_port]).to eq(444) }
1116
1137
  it { expect(@settings[:masterport]).to eq(445) }
1117
1138
  end
1118
1139
 
@@ -1125,8 +1146,8 @@ describe Puppet::Settings do
1125
1146
  end
1126
1147
 
1127
1148
  it { expect(@settings[:serverport]).to eq(445) }
1128
- it { expect(@settings[:ca_port]).to eq("445") }
1129
- it { expect(@settings[:report_port]).to eq("445") }
1149
+ it { expect(@settings[:ca_port]).to eq(445) }
1150
+ it { expect(@settings[:report_port]).to eq(445) }
1130
1151
  it { expect(@settings[:masterport]).to eq(444) }
1131
1152
  end
1132
1153
 
@@ -1139,8 +1160,8 @@ describe Puppet::Settings do
1139
1160
  end
1140
1161
 
1141
1162
  it { expect(@settings[:serverport]).to eq(445) }
1142
- it { expect(@settings[:ca_port]).to eq("445") }
1143
- it { expect(@settings[:report_port]).to eq("445") }
1163
+ it { expect(@settings[:ca_port]).to eq(445) }
1164
+ it { expect(@settings[:report_port]).to eq(445) }
1144
1165
  it { expect(@settings[:masterport]).to eq(444) }
1145
1166
  end
1146
1167
 
@@ -1156,8 +1177,8 @@ describe Puppet::Settings do
1156
1177
  end
1157
1178
 
1158
1179
  it { expect(@settings[:serverport]).to eq(445) }
1159
- it { expect(@settings[:ca_port]).to eq("445") }
1160
- it { expect(@settings[:report_port]).to eq("445") }
1180
+ it { expect(@settings[:ca_port]).to eq(445) }
1181
+ it { expect(@settings[:report_port]).to eq(445) }
1161
1182
  it { expect(@settings[:masterport]).to eq(444) }
1162
1183
  end
1163
1184
 
@@ -1171,8 +1192,8 @@ describe Puppet::Settings do
1171
1192
  end
1172
1193
 
1173
1194
  it { expect(@settings[:serverport]).to eq(444) }
1174
- it { expect(@settings[:ca_port]).to eq("444") }
1175
- it { expect(@settings[:report_port]).to eq("444") }
1195
+ it { expect(@settings[:ca_port]).to eq(444) }
1196
+ it { expect(@settings[:report_port]).to eq(444) }
1176
1197
  it { expect(@settings[:masterport]).to eq(445) }
1177
1198
  end
1178
1199
 
@@ -1184,8 +1205,8 @@ describe Puppet::Settings do
1184
1205
  end
1185
1206
 
1186
1207
  it { expect(@settings[:serverport]).to eq(445) }
1187
- it { expect(@settings[:ca_port]).to eq("445") }
1188
- it { expect(@settings[:report_port]).to eq("445") }
1208
+ it { expect(@settings[:ca_port]).to eq(445) }
1209
+ it { expect(@settings[:report_port]).to eq(445) }
1189
1210
  it { expect(@settings[:masterport]).to eq(445) }
1190
1211
  end
1191
1212
 
@@ -1197,8 +1218,8 @@ describe Puppet::Settings do
1197
1218
  end
1198
1219
 
1199
1220
  it { expect(@settings[:serverport]).to eq(445) }
1200
- it { expect(@settings[:ca_port]).to eq("445") }
1201
- it { expect(@settings[:report_port]).to eq("445") }
1221
+ it { expect(@settings[:ca_port]).to eq(445) }
1222
+ it { expect(@settings[:report_port]).to eq(445) }
1202
1223
  it { expect(@settings[:masterport]).to eq(445) }
1203
1224
  end
1204
1225
 
@@ -1211,8 +1232,8 @@ describe Puppet::Settings do
1211
1232
 
1212
1233
  it { expect(@settings[:serverport]).to eq(445) }
1213
1234
  it { expect(@settings[:masterport]).to eq(1000) }
1214
- it { expect(@settings[:ca_port]).to eq("445") }
1215
- it { expect(@settings[:report_port]).to eq("445") }
1235
+ it { expect(@settings[:ca_port]).to eq(445) }
1236
+ it { expect(@settings[:report_port]).to eq(445) }
1216
1237
  end
1217
1238
 
1218
1239
  context 'with serverport in main' do
@@ -1224,8 +1245,8 @@ describe Puppet::Settings do
1224
1245
 
1225
1246
  it { expect(@settings[:serverport]).to eq(445) }
1226
1247
  it { expect(@settings[:masterport]).to eq(1000) }
1227
- it { expect(@settings[:ca_port]).to eq("445") }
1228
- it { expect(@settings[:report_port]).to eq("445") }
1248
+ it { expect(@settings[:ca_port]).to eq(445) }
1249
+ it { expect(@settings[:report_port]).to eq(445) }
1229
1250
  end
1230
1251
  end
1231
1252
 
@@ -2137,7 +2158,7 @@ describe Puppet::Settings do
2137
2158
  end
2138
2159
 
2139
2160
  def a_user_type_for(username)
2140
- user = double('user')
2161
+ user = double('user', 'suitable?': true, to_s: "User[#{username}]")
2141
2162
  expect(Puppet::Type.type(:user)).to receive(:new).with(hash_including(name: username)).and_return(user)
2142
2163
  user
2143
2164
  end
@@ -2170,6 +2191,16 @@ describe Puppet::Settings do
2170
2191
 
2171
2192
  expect(settings).to be_service_user_available
2172
2193
  end
2194
+
2195
+ it "raises if the user is not suitable" do
2196
+ settings[:user] = "foo"
2197
+
2198
+ expect(a_user_type_for("foo")).to receive(:suitable?).and_return(false)
2199
+
2200
+ expect {
2201
+ settings.service_user_available?
2202
+ }.to raise_error(Puppet::Error, /Cannot manage owner permissions, because the provider for 'User\[foo\]' is not functional/)
2203
+ end
2173
2204
  end
2174
2205
 
2175
2206
  describe "when determining if the service group is available" do
@@ -2180,7 +2211,7 @@ describe Puppet::Settings do
2180
2211
  end
2181
2212
 
2182
2213
  def a_group_type_for(groupname)
2183
- group = double('group')
2214
+ group = double('group', 'suitable?': true, to_s: "Group[#{groupname}]")
2184
2215
  expect(Puppet::Type.type(:group)).to receive(:new).with(hash_including(name: groupname)).and_return(group)
2185
2216
  group
2186
2217
  end
@@ -2213,6 +2244,16 @@ describe Puppet::Settings do
2213
2244
 
2214
2245
  expect(settings).to be_service_group_available
2215
2246
  end
2247
+
2248
+ it "raises if the group is not suitable" do
2249
+ settings[:group] = "foo"
2250
+
2251
+ expect(a_group_type_for("foo")).to receive(:suitable?).and_return(false)
2252
+
2253
+ expect {
2254
+ settings.service_group_available?
2255
+ }.to raise_error(Puppet::Error, /Cannot manage group permissions, because the provider for 'Group\[foo\]' is not functional/)
2256
+ end
2216
2257
  end
2217
2258
 
2218
2259
  describe "when dealing with command-line options" do
@@ -505,28 +505,30 @@ describe Puppet::SSL::SSLProvider do
505
505
  }.to raise_error(Puppet::Error, /The client certificate is missing from/)
506
506
  end
507
507
 
508
- it 'loads the private key and client cert' do
509
- ssl_context = subject.load_context
508
+ context 'loading private keys', unless: RUBY_PLATFORM == 'java' do
509
+ it 'loads the private key and client cert' do
510
+ ssl_context = subject.load_context
510
511
 
511
- expect(ssl_context.private_key).to be_an(OpenSSL::PKey::RSA)
512
- expect(ssl_context.client_cert).to be_an(OpenSSL::X509::Certificate)
513
- end
512
+ expect(ssl_context.private_key).to be_an(OpenSSL::PKey::RSA)
513
+ expect(ssl_context.client_cert).to be_an(OpenSSL::X509::Certificate)
514
+ end
514
515
 
515
- it 'loads a password protected key and client cert' do
516
- FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), File.join(Puppet[:privatekeydir], 'signed.pem'))
516
+ it 'loads a password protected key and client cert' do
517
+ FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), File.join(Puppet[:privatekeydir], 'signed.pem'))
517
518
 
518
- ssl_context = subject.load_context(password: '74695716c8b6')
519
+ ssl_context = subject.load_context(password: '74695716c8b6')
519
520
 
520
- expect(ssl_context.private_key).to be_an(OpenSSL::PKey::RSA)
521
- expect(ssl_context.client_cert).to be_an(OpenSSL::X509::Certificate)
522
- end
521
+ expect(ssl_context.private_key).to be_an(OpenSSL::PKey::RSA)
522
+ expect(ssl_context.client_cert).to be_an(OpenSSL::X509::Certificate)
523
+ end
523
524
 
524
- it 'raises if the password is incorrect' do
525
- FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), File.join(Puppet[:privatekeydir], 'signed.pem'))
525
+ it 'raises if the password is incorrect' do
526
+ FileUtils.cp(File.join(PuppetSpec::FIXTURE_DIR, 'ssl', 'encrypted-key.pem'), File.join(Puppet[:privatekeydir], 'signed.pem'))
526
527
 
527
- expect {
528
- subject.load_context(password: 'wrongpassword')
529
- }.to raise_error(Puppet::SSL::SSLError, /Failed to load private key for host 'signed': Could not parse PKey/)
528
+ expect {
529
+ subject.load_context(password: 'wrongpassword')
530
+ }.to raise_error(Puppet::SSL::SSLError, /Failed to load private key for host 'signed': Could not parse PKey/)
531
+ end
530
532
  end
531
533
  end
532
534
 
@@ -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
@@ -263,7 +263,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
263
263
 
264
264
  expect(@resource[:owner]).to eq(100)
265
265
  expect(@resource[:group]).to eq(200)
266
- expect(@resource[:mode]).to eq("173")
266
+ expect(@resource[:mode]).to eq("0173")
267
267
 
268
268
  # Metadata calls it checksum and checksum_type, we call it content and checksum.
269
269
  expect(@resource[:content]).to eq(@metadata.checksum)
@@ -280,7 +280,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
280
280
 
281
281
  expect(@resource[:owner]).to eq(1)
282
282
  expect(@resource[:group]).to eq(2)
283
- expect(@resource[:mode]).to eq('173')
283
+ expect(@resource[:mode]).to eq('0173')
284
284
  expect(@resource[:content]).not_to eq(@metadata.checksum)
285
285
  expect(@resource[:checksum]).not_to eq(@metadata.checksum_type.to_sym)
286
286
  end
@@ -317,7 +317,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
317
317
 
318
318
  expect(@resource[:owner]).to eq(100)
319
319
  expect(@resource[:group]).to eq(200)
320
- expect(@resource[:mode]).to eq("173")
320
+ expect(@resource[:mode]).to eq("0173")
321
321
  end
322
322
 
323
323
  it "copies the remote owner" do
@@ -335,7 +335,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
335
335
  it "copies the remote mode" do
336
336
  @source.copy_source_values
337
337
 
338
- expect(@resource[:mode]).to eq("173")
338
+ expect(@resource[:mode]).to eq("0173")
339
339
  end
340
340
  end
341
341
 
@@ -158,6 +158,33 @@ describe test_title, "when validating attribute values" do
158
158
  expect(srv[:timeout]).to eq(int)
159
159
  end
160
160
  end
161
+
162
+ it "should default :timeout to 10 when provider has no default value" do
163
+ srv = Puppet::Type.type(:service).new(:name => "yay")
164
+ expect(srv[:timeout]).to eq(10)
165
+ end
166
+
167
+ it "should default :timeout to provider given default time when it has one" do
168
+ provider_class_with_timeout = Puppet::Type.type(:service).provide(:simple) do
169
+ has_features :configurable_timeout
170
+ def default_timeout
171
+ 30
172
+ end
173
+ end
174
+ allow(Puppet::Type.type(:service)).to receive(:defaultprovider).and_return(provider_class_with_timeout)
175
+
176
+ srv = Puppet::Type.type(:service).new(:name => "yay")
177
+ expect(srv[:timeout]).to eq(30)
178
+ end
179
+
180
+ it "should accept string as value" do
181
+ srv = Puppet::Type.type(:service).new(:name => "yay", :timeout => "25")
182
+ expect(srv[:timeout]).to eq(25)
183
+ end
184
+
185
+ it "should not support values that cannot be converted to Integer such as Array" do
186
+ expect { Puppet::Type.type(:service).new(:name => "yay", :timeout => [25]) }.to raise_error(Puppet::Error)
187
+ end
161
188
  end
162
189
 
163
190
  describe "the service logon credentials" do
@@ -280,6 +280,13 @@ describe tidy do
280
280
  @ager.tidy?(@basepath, @stat)
281
281
  end
282
282
 
283
+ it "should return true if the specified age is 0" do
284
+ @tidy[:age] = "0"
285
+ expect(@stat).to receive(:mtime).and_return(Time.now)
286
+
287
+ expect(@ager).to be_tidy(@basepath, @stat)
288
+ end
289
+
283
290
  it "should return false if the file is more recent than the specified age" do
284
291
  expect(@stat).to receive(:mtime).and_return(Time.now)
285
292
 
@@ -1142,7 +1142,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
1142
1142
 
1143
1143
  before :each do
1144
1144
  type.provide(:default) do
1145
- defaultfor :operatingsystem => Facter.value(:operatingsystem)
1145
+ defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
1146
1146
  mk_resource_methods
1147
1147
  class << self
1148
1148
  attr_accessor :params
@@ -1172,7 +1172,7 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
1172
1172
  context "with a default provider" do
1173
1173
  before :each do
1174
1174
  type.provide(:default) do
1175
- defaultfor :operatingsystem => Facter.value(:operatingsystem)
1175
+ defaultfor :operatingsystem => Puppet.runtime[:facter].value(:operatingsystem)
1176
1176
  mk_resource_methods
1177
1177
  class << self
1178
1178
  attr_accessor :names