puppet 5.5.16 → 5.5.21

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 (359) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +10 -10
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +57 -52
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/project_data.yaml +2 -2
  8. data/ext/puppet-test +2 -2
  9. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  10. data/ext/windows/service/daemon.rb +54 -8
  11. data/install.rb +6 -24
  12. data/lib/puppet.rb +5 -2
  13. data/lib/puppet/agent.rb +5 -13
  14. data/lib/puppet/application.rb +1 -1
  15. data/lib/puppet/application/agent.rb +15 -1
  16. data/lib/puppet/application/apply.rb +2 -2
  17. data/lib/puppet/application/describe.rb +3 -9
  18. data/lib/puppet/application/device.rb +4 -4
  19. data/lib/puppet/application/doc.rb +1 -1
  20. data/lib/puppet/application/filebucket.rb +13 -0
  21. data/lib/puppet/application/lookup.rb +1 -1
  22. data/lib/puppet/application/resource.rb +4 -4
  23. data/lib/puppet/application/script.rb +2 -2
  24. data/lib/puppet/configurer.rb +86 -28
  25. data/lib/puppet/configurer/downloader.rb +2 -6
  26. data/lib/puppet/daemon.rb +1 -1
  27. data/lib/puppet/defaults.rb +82 -38
  28. data/lib/puppet/error.rb +9 -1
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/face/ca.rb +1 -1
  31. data/lib/puppet/face/config.rb +10 -48
  32. data/lib/puppet/face/facts.rb +1 -1
  33. data/lib/puppet/face/module/list.rb +5 -5
  34. data/lib/puppet/face/module/search.rb +1 -1
  35. data/lib/puppet/face/module/uninstall.rb +1 -1
  36. data/lib/puppet/face/module/upgrade.rb +1 -1
  37. data/lib/puppet/face/plugin.rb +9 -2
  38. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  39. data/lib/puppet/file_system.rb +0 -8
  40. data/lib/puppet/file_system/memory_file.rb +1 -1
  41. data/lib/puppet/file_system/posix.rb +3 -2
  42. data/lib/puppet/file_system/uniquefile.rb +4 -0
  43. data/lib/puppet/forge.rb +3 -3
  44. data/lib/puppet/functions/epp.rb +4 -4
  45. data/lib/puppet/functions/inline_epp.rb +5 -5
  46. data/lib/puppet/functions/reduce.rb +2 -4
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +2 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +12 -2
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/factory.rb +1 -11
  69. data/lib/puppet/network/http/pool.rb +7 -1
  70. data/lib/puppet/network/http/rack/rest.rb +2 -2
  71. data/lib/puppet/network/http/site.rb +1 -1
  72. data/lib/puppet/network/resolver.rb +2 -2
  73. data/lib/puppet/node/environment.rb +4 -2
  74. data/lib/puppet/parameter.rb +8 -0
  75. data/lib/puppet/parser/ast.rb +1 -1
  76. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  77. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  78. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  79. data/lib/puppet/parser/environment_compiler.rb +3 -0
  80. data/lib/puppet/parser/functions.rb +1 -1
  81. data/lib/puppet/parser/functions/epp.rb +3 -3
  82. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  83. data/lib/puppet/parser/resource.rb +3 -2
  84. data/lib/puppet/parser/resource/param.rb +6 -0
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  87. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  89. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  90. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  91. data/lib/puppet/pops/issues.rb +5 -0
  92. data/lib/puppet/pops/loaders.rb +1 -1
  93. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  94. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  95. data/lib/puppet/pops/merge_strategy.rb +22 -18
  96. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  97. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  98. data/lib/puppet/pops/parser/locator.rb +1 -1
  99. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  100. data/lib/puppet/pops/puppet_stack.rb +51 -48
  101. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  102. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  103. data/lib/puppet/pops/types/string_converter.rb +10 -10
  104. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  105. data/lib/puppet/pops/types/types.rb +3 -3
  106. data/lib/puppet/pops/validation/checker4_0.rb +10 -0
  107. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  108. data/lib/puppet/property.rb +1 -1
  109. data/lib/puppet/property/ensure.rb +1 -1
  110. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  111. data/lib/puppet/provider/cron/crontab.rb +1 -1
  112. data/lib/puppet/provider/exec.rb +6 -2
  113. data/lib/puppet/provider/file/posix.rb +5 -0
  114. data/lib/puppet/provider/group/groupadd.rb +19 -19
  115. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  116. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  117. data/lib/puppet/provider/mount.rb +1 -1
  118. data/lib/puppet/provider/mount/parsed.rb +8 -8
  119. data/lib/puppet/provider/nameservice.rb +10 -3
  120. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  121. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  122. data/lib/puppet/provider/package/aix.rb +17 -2
  123. data/lib/puppet/provider/package/apt.rb +14 -3
  124. data/lib/puppet/provider/package/dnf.rb +1 -1
  125. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  126. data/lib/puppet/provider/package/dpkg.rb +16 -18
  127. data/lib/puppet/provider/package/fink.rb +20 -3
  128. data/lib/puppet/provider/package/openbsd.rb +14 -2
  129. data/lib/puppet/provider/package/pip.rb +37 -10
  130. data/lib/puppet/provider/package/pkg.rb +18 -5
  131. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  132. data/lib/puppet/provider/package/pkgng.rb +16 -4
  133. data/lib/puppet/provider/package/portage.rb +4 -4
  134. data/lib/puppet/provider/package/rpm.rb +57 -19
  135. data/lib/puppet/provider/package/windows/package.rb +1 -1
  136. data/lib/puppet/provider/package/yum.rb +35 -24
  137. data/lib/puppet/provider/package/zypper.rb +1 -0
  138. data/lib/puppet/provider/package_targetable.rb +5 -4
  139. data/lib/puppet/provider/parsedfile.rb +1 -1
  140. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  141. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  142. data/lib/puppet/provider/service/daemontools.rb +9 -9
  143. data/lib/puppet/provider/service/launchd.rb +20 -5
  144. data/lib/puppet/provider/service/openbsd.rb +1 -1
  145. data/lib/puppet/provider/service/rcng.rb +2 -2
  146. data/lib/puppet/provider/service/runit.rb +2 -8
  147. data/lib/puppet/provider/service/systemd.rb +35 -22
  148. data/lib/puppet/provider/service/windows.rb +8 -0
  149. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  150. data/lib/puppet/provider/user/hpux.rb +1 -1
  151. data/lib/puppet/provider/user/pw.rb +12 -3
  152. data/lib/puppet/provider/user/user_role_add.rb +5 -1
  153. data/lib/puppet/provider/user/useradd.rb +62 -27
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +18 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +8 -0
  164. data/lib/puppet/settings.rb +43 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +15 -10
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +15 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +21 -9
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +107 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +9 -10
  187. data/lib/puppet/type/user.rb +6 -24
  188. data/lib/puppet/type/yumrepo.rb +3 -7
  189. data/lib/puppet/util.rb +47 -25
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/execution.rb +4 -3
  192. data/lib/puppet/util/http_proxy.rb +24 -16
  193. data/lib/puppet/util/instance_loader.rb +1 -1
  194. data/lib/puppet/util/log.rb +1 -1
  195. data/lib/puppet/util/log/destinations.rb +3 -12
  196. data/lib/puppet/util/logging.rb +30 -18
  197. data/lib/puppet/util/metric.rb +2 -2
  198. data/lib/puppet/util/monkey_patches.rb +1 -1
  199. data/lib/puppet/util/nagios_maker.rb +2 -2
  200. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  201. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  202. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  203. data/lib/puppet/util/pidlock.rb +12 -6
  204. data/lib/puppet/util/plist.rb +6 -0
  205. data/lib/puppet/util/provider_features.rb +2 -4
  206. data/lib/puppet/util/rdoc.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/resource_template.rb +1 -1
  209. data/lib/puppet/util/selinux.rb +8 -2
  210. data/lib/puppet/util/windows/adsi.rb +60 -30
  211. data/lib/puppet/util/windows/api_types.rb +45 -32
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/principal.rb +8 -6
  214. data/lib/puppet/util/windows/process.rb +16 -15
  215. data/lib/puppet/util/windows/registry.rb +17 -15
  216. data/lib/puppet/util/windows/security.rb +3 -0
  217. data/lib/puppet/util/windows/service.rb +149 -4
  218. data/lib/puppet/util/windows/sid.rb +4 -3
  219. data/lib/puppet/vendor.rb +1 -1
  220. data/lib/puppet/version.rb +1 -1
  221. data/lib/puppet_pal.rb +2 -2
  222. data/locales/puppet.pot +479 -443
  223. data/man/man5/puppet.conf.5 +38 -8
  224. data/man/man8/puppet-agent.8 +2 -2
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-ca.8 +1 -1
  227. data/man/man8/puppet-catalog.8 +1 -1
  228. data/man/man8/puppet-cert.8 +1 -1
  229. data/man/man8/puppet-certificate.8 +1 -1
  230. data/man/man8/puppet-certificate_request.8 +1 -1
  231. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  232. data/man/man8/puppet-config.8 +1 -1
  233. data/man/man8/puppet-describe.8 +1 -1
  234. data/man/man8/puppet-device.8 +1 -1
  235. data/man/man8/puppet-doc.8 +1 -1
  236. data/man/man8/puppet-epp.8 +1 -1
  237. data/man/man8/puppet-facts.8 +1 -1
  238. data/man/man8/puppet-filebucket.8 +16 -1
  239. data/man/man8/puppet-generate.8 +1 -1
  240. data/man/man8/puppet-help.8 +1 -1
  241. data/man/man8/puppet-key.8 +1 -1
  242. data/man/man8/puppet-lookup.8 +1 -1
  243. data/man/man8/puppet-man.8 +1 -1
  244. data/man/man8/puppet-master.8 +1 -1
  245. data/man/man8/puppet-module.8 +1 -1
  246. data/man/man8/puppet-node.8 +1 -1
  247. data/man/man8/puppet-parser.8 +1 -1
  248. data/man/man8/puppet-plugin.8 +1 -1
  249. data/man/man8/puppet-report.8 +1 -1
  250. data/man/man8/puppet-resource.8 +1 -1
  251. data/man/man8/puppet-script.8 +1 -1
  252. data/man/man8/puppet-status.8 +1 -1
  253. data/man/man8/puppet.8 +2 -2
  254. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  255. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  256. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  257. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  258. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  259. data/spec/integration/configurer_spec.rb +52 -0
  260. data/spec/integration/defaults_spec.rb +1 -2
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/provider/service/systemd_spec.rb +8 -5
  264. data/spec/integration/type/file_spec.rb +28 -0
  265. data/spec/integration/type/notify_spec.rb +46 -0
  266. data/spec/integration/util/execution_spec.rb +27 -0
  267. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  268. data/spec/integration/util/windows/registry_spec.rb +7 -7
  269. data/spec/unit/agent_spec.rb +34 -26
  270. data/spec/unit/application/agent_spec.rb +18 -0
  271. data/spec/unit/application/apply_spec.rb +2 -12
  272. data/spec/unit/application/device_spec.rb +1 -1
  273. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  274. data/spec/unit/configurer_spec.rb +377 -397
  275. data/spec/unit/daemon_spec.rb +0 -1
  276. data/spec/unit/face/facts_spec.rb +9 -0
  277. data/spec/unit/face/plugin_spec.rb +8 -0
  278. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  279. data/spec/unit/forge/forge_spec.rb +1 -3
  280. data/spec/unit/forge/repository_spec.rb +1 -3
  281. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  282. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  283. data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
  284. data/spec/unit/network/http/api/indirected_routes_spec.rb +28 -11
  285. data/spec/unit/network/http/connection_spec.rb +43 -1
  286. data/spec/unit/network/http/factory_spec.rb +27 -5
  287. data/spec/unit/network/http/pool_spec.rb +32 -0
  288. data/spec/unit/node_spec.rb +7 -4
  289. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  290. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  291. data/spec/unit/pops/validator/validator_spec.rb +7 -0
  292. data/spec/unit/provider/exec_spec.rb +209 -0
  293. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  294. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  295. data/spec/unit/provider/package/aix_spec.rb +29 -0
  296. data/spec/unit/provider/package/apt_spec.rb +13 -2
  297. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  298. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  299. data/spec/unit/provider/package/dnf_spec.rb +7 -0
  300. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  301. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  302. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  303. data/spec/unit/provider/package/pip_spec.rb +93 -22
  304. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  305. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  306. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  307. data/spec/unit/provider/package/portage_spec.rb +4 -4
  308. data/spec/unit/provider/package/rpm_spec.rb +150 -16
  309. data/spec/unit/provider/package/yum_spec.rb +66 -0
  310. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  311. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  312. data/spec/unit/provider/selmodule_spec.rb +118 -47
  313. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  314. data/spec/unit/provider/service/launchd_spec.rb +28 -0
  315. data/spec/unit/provider/service/runit_spec.rb +24 -0
  316. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  317. data/spec/unit/provider/service/windows_spec.rb +20 -0
  318. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  319. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  320. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  321. data/spec/unit/provider/user/pw_spec.rb +37 -0
  322. data/spec/unit/provider/user/useradd_spec.rb +122 -15
  323. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  324. data/spec/unit/puppet_pal_2pec.rb +3 -0
  325. data/spec/unit/resource_spec.rb +26 -1
  326. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  327. data/spec/unit/ssl/certificate_spec.rb +7 -0
  328. data/spec/unit/test/test_helper_spec.rb +17 -0
  329. data/spec/unit/transaction_spec.rb +18 -0
  330. data/spec/unit/type/exec_spec.rb +15 -12
  331. data/spec/unit/type/file/content_spec.rb +9 -3
  332. data/spec/unit/type/file/source_spec.rb +4 -4
  333. data/spec/unit/type/file_spec.rb +9 -4
  334. data/spec/unit/type/package_spec.rb +8 -0
  335. data/spec/unit/type/schedule_spec.rb +3 -1
  336. data/spec/unit/type/selboolean_spec.rb +4 -6
  337. data/spec/unit/type/service_spec.rb +25 -8
  338. data/spec/unit/type/user_spec.rb +32 -26
  339. data/spec/unit/type/yumrepo_spec.rb +30 -0
  340. data/spec/unit/type_spec.rb +40 -0
  341. data/spec/unit/util/execution_spec.rb +16 -0
  342. data/spec/unit/util/http_proxy_spec.rb +121 -1
  343. data/spec/unit/util/log/destinations_spec.rb +2 -26
  344. data/spec/unit/util/log_spec.rb +0 -112
  345. data/spec/unit/util/logging_spec.rb +200 -0
  346. data/spec/unit/util/pidlock_spec.rb +67 -40
  347. data/spec/unit/util/plist_spec.rb +20 -0
  348. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  349. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  350. data/spec/unit/util/windows/service_spec.rb +9 -0
  351. data/spec/unit/util/windows/sid_spec.rb +2 -2
  352. data/tasks/manpages.rake +1 -0
  353. metadata +16 -11
  354. data/ext/windows/eventlog/Rakefile +0 -32
  355. data/ext/windows/eventlog/puppetres.dll +0 -0
  356. data/ext/windows/eventlog/puppetres.mc +0 -18
  357. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  358. data/locales/ja/puppet.po +0 -12114
  359. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "TestHelper" do
4
+ context "#after_each_test" do
5
+ it "restores the original environment" do
6
+ varname = 'test_helper_spec-test_variable'
7
+ Puppet::Util.set_env(varname, "\u16A0")
8
+
9
+ expect(Puppet::Util.get_env(varname)).to eq("\u16A0")
10
+
11
+ # Prematurely trigger the after_each_test method
12
+ Puppet::Test::TestHelper.after_each_test
13
+
14
+ expect(Puppet::Util::get_env(varname)).to be_nil
15
+ end
16
+ end
17
+ end
@@ -778,6 +778,24 @@ describe Puppet::Transaction do
778
778
 
779
779
  transaction.evaluate
780
780
  end
781
+
782
+ it "should call Selinux.matchpathcon_fini in case Selinux is enabled ", :if => Puppet.features.posix? do
783
+ unless defined?(Selinux)
784
+ module Selinux
785
+ def self.is_selinux_enabled
786
+ true
787
+ end
788
+ end
789
+ end
790
+
791
+ resource = Puppet::Type.type(:file).new(:path => make_absolute("/tmp/foo"))
792
+ transaction = transaction_with_resource(resource)
793
+
794
+ expect(Selinux).to receive(:matchpathcon_fini)
795
+ expect(Puppet::Util::SELinux).to receive(:selinux_support?).and_return(true)
796
+
797
+ transaction.evaluate
798
+ end
781
799
  end
782
800
 
783
801
  describe 'when checking application run state' do
@@ -150,16 +150,13 @@ RSpec.describe Puppet::Type.type(:exec) do
150
150
  end
151
151
  end
152
152
 
153
- it "should redact the command on failure" do
153
+ it "should redact the sensitive command on failure" do
154
154
  output = "output1\noutput2\n"
155
155
  expect { exec_tester('false', 1, :output => output, :logoutput => :on_failure, :sensitive_parameters => [:command]).refresh }.
156
156
  to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
157
157
 
158
- output.split("\n").each do |line|
159
- log = @logs.shift
160
- expect(log.level).to eq(:err)
161
- expect(log.message).to eq(line)
162
- end
158
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
159
+ expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
163
160
  end
164
161
 
165
162
  it "should log the output on failure when returns is specified as an array" do
@@ -177,7 +174,7 @@ RSpec.describe Puppet::Type.type(:exec) do
177
174
  end
178
175
  end
179
176
 
180
- it "should redact the command on failure when returns is specified as an array" do
177
+ it "should redact the sensitive command on failure when returns is specified as an array" do
181
178
  output = "output1\noutput2\n"
182
179
 
183
180
  expect {
@@ -185,11 +182,8 @@ RSpec.describe Puppet::Type.type(:exec) do
185
182
  :logoutput => :on_failure, :sensitive_parameters => [:command]).refresh
186
183
  }.to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
187
184
 
188
- output.split("\n").each do |line|
189
- log = @logs.shift
190
- expect(log.level).to eq(:err)
191
- expect(log.message).to eq(line)
192
- end
185
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
186
+ expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
193
187
  end
194
188
 
195
189
  it "shouldn't log the output on success" do
@@ -755,6 +749,15 @@ RSpec.describe Puppet::Type.type(:exec) do
755
749
  expect(@test.check_all_attributes).to eq(true)
756
750
  expect(@logs.shift.message).to eq("test output")
757
751
  end
752
+
753
+ it "should not emit output to debug if sensitive is true" do
754
+ Puppet::Util::Log.level = :debug
755
+ @test[param] = @fail
756
+ allow(@test.parameters[param]).to receive(:sensitive).and_return(true)
757
+ expect(@test.check_all_attributes).to eq(true)
758
+ expect(@logs).not_to include(an_object_having_attributes(level: :debug, message: "test output"))
759
+ expect(@logs).to include(an_object_having_attributes(level: :debug, message: "[output redacted]"))
760
+ end
758
761
  end
759
762
  end
760
763
  end
@@ -200,15 +200,21 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
200
200
  end
201
201
 
202
202
  it "prints the diff" do
203
- expect(content).to receive(:diff).and_return("my diff").once
204
- expect(content).to receive(:debug).with("\nmy diff").once
203
+ expect(content).to receive(:diff).and_return("my diff")
204
+ expect(content).to receive(:debug).with("\nmy diff")
205
+ expect(content).not_to be_safe_insync("other content")
206
+ end
207
+
208
+ it "prints binary file notice if diff is not valid encoding" do
209
+ expect(content).to receive(:diff).and_return("\xc7\xd1\xfc\x84")
210
+ expect(content).to receive(:debug).with(/\nBinary files #{filename} and .* differ/)
205
211
  expect(content).not_to be_safe_insync("other content")
206
212
  end
207
213
 
208
214
  it "redacts the diff when the property is sensitive" do
209
215
  content.sensitive = true
210
216
  expect(content).not_to receive(:diff)
211
- expect(content).to receive(:debug).with("[diff redacted]").once
217
+ expect(content).to receive(:debug).with("[diff redacted]")
212
218
  expect(content).not_to be_safe_insync("other content")
213
219
  end
214
220
  end
@@ -34,11 +34,11 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
34
34
  it "should fail if the set values are not URLs" do
35
35
  expect(URI).to receive(:parse).with('foo').and_raise(RuntimeError)
36
36
 
37
- expect(lambda { resource[:source] = %w{foo} }).to raise_error(Puppet::Error)
37
+ expect { resource[:source] = %w{foo} }.to raise_error(Puppet::Error)
38
38
  end
39
39
 
40
40
  it "should fail if the URI is not a local file, file URI, or puppet URI" do
41
- expect(lambda { resource[:source] = %w{ftp://foo/bar} }).to raise_error(Puppet::Error, /Cannot use URLs of type 'ftp' as source for fileserving/)
41
+ expect { resource[:source] = %w{ftp://foo/bar} }.to raise_error(Puppet::Error, /Cannot use URLs of type 'ftp' as source for fileserving/)
42
42
  end
43
43
 
44
44
  it "should strip trailing forward slashes", :unless => Puppet.features.microsoft_windows? do
@@ -61,11 +61,11 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
61
61
  end
62
62
 
63
63
  it "should reject relative URI sources" do
64
- expect(lambda { resource[:source] = 'foo/bar' }).to raise_error(Puppet::Error)
64
+ expect { resource[:source] = 'foo/bar' }.to raise_error(Puppet::Error)
65
65
  end
66
66
 
67
67
  it "should reject opaque sources" do
68
- expect(lambda { resource[:source] = 'mailto:foo@com' }).to raise_error(Puppet::Error)
68
+ expect { resource[:source] = 'mailto:foo@com' }.to raise_error(Puppet::Error)
69
69
  end
70
70
 
71
71
  it "should accept URI authority component" do
@@ -477,6 +477,9 @@ describe Puppet::Type.type(:file) do
477
477
  end
478
478
 
479
479
  describe "#recurse" do
480
+ let(:name) { 'bar' }
481
+ let(:child) { double('puppet_type_file') }
482
+
480
483
  before do
481
484
  file[:recurse] = true
482
485
  @metadata = Puppet::FileServing::Metadata
@@ -485,8 +488,9 @@ describe Puppet::Type.type(:file) do
485
488
  describe "and a source is set" do
486
489
  it "should pass the already-discovered resources to recurse_remote" do
487
490
  file[:source] = File.expand_path(__FILE__)
488
- allow(file).to receive(:recurse_local).and_return(:foo => "bar")
489
- expect(file).to receive(:recurse_remote).with(:foo => "bar").and_return([])
491
+ allow(child).to receive(:[]).with(:path).and_return(name)
492
+ allow(file).to receive(:recurse_local).and_return(name => child)
493
+ expect(file).to receive(:recurse_remote).with(name => child).and_return([])
490
494
  file.recurse
491
495
  end
492
496
  end
@@ -494,8 +498,9 @@ describe Puppet::Type.type(:file) do
494
498
  describe "and a target is set" do
495
499
  it "should use recurse_link" do
496
500
  file[:target] = File.expand_path(__FILE__)
497
- allow(file).to receive(:recurse_local).and_return(:foo => "bar")
498
- expect(file).to receive(:recurse_link).with(:foo => "bar").and_return([])
501
+ allow(child).to receive(:[]).with(:path).and_return(name)
502
+ allow(file).to receive(:recurse_local).and_return(name => child)
503
+ expect(file).to receive(:recurse_link).with(name => child).and_return([])
499
504
  file.recurse
500
505
  end
501
506
  end
@@ -30,6 +30,10 @@ describe Puppet::Type.type(:package) do
30
30
  expect(Puppet::Type.type(:package).provider_feature(:versionable)).not_to be_nil
31
31
  end
32
32
 
33
+ it "should have a :supports_flavors feature" do
34
+ expect(Puppet::Type.type(:package).provider_feature(:supports_flavors)).not_to be_nil
35
+ end
36
+
33
37
  it "should have a :package_settings feature that requires :package_settings_insync?, :package_settings and :package_settings=" do
34
38
  expect(Puppet::Type.type(:package).provider_feature(:package_settings).methods).to eq([:package_settings_insync?, :package_settings, :package_settings=])
35
39
  end
@@ -53,6 +57,10 @@ describe Puppet::Type.type(:package) do
53
57
  it "should have a package_settings property" do
54
58
  expect(Puppet::Type.type(:package).attrtype(:package_settings)).to eq(:property)
55
59
  end
60
+
61
+ it "should have a flavor property" do
62
+ expect(Puppet::Type.type(:package).attrtype(:flavor)).to eq(:property)
63
+ end
56
64
  end
57
65
 
58
66
  describe "when validating attribute values" do
@@ -446,7 +446,9 @@ describe Puppet::Type.type(:schedule) do
446
446
 
447
447
  it "should fail if the periodmatch is 'number'" do
448
448
  @schedule[:periodmatch] = :number
449
- expect(proc { @schedule[:repeat] = 2 }).to raise_error(Puppet::Error)
449
+ expect {
450
+ @schedule[:repeat] = 2
451
+ }.to raise_error(Puppet::Error)
450
452
  end
451
453
 
452
454
  it "should match if the previous run was further away than the distance divided by the repeat" do
@@ -24,12 +24,10 @@ describe Puppet::Type.type(:selboolean), "when validating values" do
24
24
  allow(@provider_class).to receive(:new).and_return(@provider)
25
25
  end
26
26
 
27
- it "should support :on as a value to :value" do
28
- Puppet::Type.type(:selboolean).new(:name => "yay", :value => :on)
29
- end
30
-
31
- it "should support :off as a value to :value" do
32
- Puppet::Type.type(:selboolean).new(:name => "yay", :value => :off)
27
+ [:on, :off, :true, :false, true, false].each do |val|
28
+ it "should support #{val.inspect} as a value to :value" do
29
+ Puppet::Type.type(:selboolean).new(:name => "yay", :value => val)
30
+ end
33
31
  end
34
32
 
35
33
  it "should support :true as a value to :persistent" do
@@ -75,6 +75,13 @@ describe Puppet::Type.type(:service), "when validating attribute values" do
75
75
  expect(srv.should(:enable)).to eq(:manual)
76
76
  end
77
77
 
78
+ it "should support :delayed as a value on Windows" do
79
+ allow(Puppet.features).to receive(:microsoft_windows?).and_return(true)
80
+
81
+ srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed)
82
+ expect(srv.should(:enable)).to eq(:delayed)
83
+ end
84
+
78
85
  it "should not support :manual as a value when not on Windows" do
79
86
  allow(Puppet.features).to receive(:microsoft_windows?).and_return(false)
80
87
 
@@ -83,6 +90,15 @@ describe Puppet::Type.type(:service), "when validating attribute values" do
83
90
  /Setting enable to manual is only supported on Microsoft Windows\./
84
91
  )
85
92
  end
93
+
94
+ it "should not support :delayed as a value when not on Windows" do
95
+ allow(Puppet.features).to receive(:microsoft_windows?).and_return(false)
96
+
97
+ expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed) }.to raise_error(
98
+ Puppet::Error,
99
+ /Setting enable to delayed is only supported on Microsoft Windows\./
100
+ )
101
+ end
86
102
  end
87
103
 
88
104
  it "should support :true as a value to :hasstatus" do
@@ -218,20 +234,21 @@ describe Puppet::Type.type(:service), "when changing the host" do
218
234
  @service.property(:enable).sync
219
235
  end
220
236
 
221
- it "should always consider the enable state of a static service to be in sync" do
237
+ it "should let superclass implementation resolve insyncness when provider does not respond to the 'enabled_insync?' method" do
222
238
  allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
223
- expect(@service.provider).to receive(:cached_enabled?).and_return('static')
224
- @service[:enable] = false
225
- expect(Puppet).to receive(:debug).with("Unable to enable or disable static service yay")
239
+ @service[:enable] = true
240
+ allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(false)
241
+
226
242
  expect(@service.property(:enable).insync?(:true)).to eq(true)
227
243
  end
228
244
 
229
- it "should determine insyncness normally when the service is not static" do
245
+ it "insyncness should be resolved by provider instead of superclass implementation when provider responds to the 'enabled_insync?' method" do
230
246
  allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
231
- expect(@service.provider).to receive(:cached_enabled?).and_return('true')
232
247
  @service[:enable] = true
233
- expect(Puppet).not_to receive(:debug)
234
- expect(@service.property(:enable).insync?(:true)).to eq(true)
248
+ allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(true)
249
+ allow(@service.provider).to receive(:enabled_insync?).and_return(false)
250
+
251
+ expect(@service.property(:enable).insync?(:true)).to eq(false)
235
252
  end
236
253
 
237
254
  it "should sync the service's enable state when changing the state of :ensure if :enable is being managed" do
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Puppet::Type.type(:user) do
@@ -323,24 +323,24 @@ describe Puppet::Type.type(:user) do
323
323
  end
324
324
 
325
325
  describe "when managing passwords" do
326
- before do
327
- @password = described_class.new(:name => 'foo', :password => 'mypass').parameter(:password)
328
- end
326
+ let(:transaction) { Puppet::Transaction.new(Puppet::Resource::Catalog.new, nil, nil) }
327
+ let(:harness) { Puppet::Transaction::ResourceHarness.new(transaction) }
328
+ let(:provider) { @provider_class.new(:name => 'foo', :ensure => :present) }
329
+ let(:resource) { described_class.new(:name => 'foo', :ensure => :present, :password => 'top secret', :provider => provider) }
329
330
 
330
331
  it "should not include the password in the change log when adding the password" do
331
- expect(@password.change_to_s(:absent, "mypass")).not_to be_include("mypass")
332
+ status = harness.evaluate(resource)
333
+ sync_event = status.events[0]
334
+ expect(sync_event.message).not_to include('top secret')
335
+ expect(sync_event.message).to eql('changed [redacted] to [redacted]')
332
336
  end
333
337
 
334
338
  it "should not include the password in the change log when changing the password" do
335
- expect(@password.change_to_s("other", "mypass")).not_to be_include("mypass")
336
- end
337
-
338
- it "should redact the password when displaying the old value" do
339
- expect(@password.is_to_s("currentpassword")).to match(/^\[old password hash redacted\]$/)
340
- end
341
-
342
- it "should redact the password when displaying the new value" do
343
- expect(@password.should_to_s("newpassword")).to match(/^\[new password hash redacted\]$/)
339
+ resource[:password] = 'super extra classified'
340
+ status = harness.evaluate(resource)
341
+ sync_event = status.events[0]
342
+ expect(sync_event.message).not_to include('super extra classified')
343
+ expect(sync_event.message).to eql('changed [redacted] to [redacted]')
344
344
  end
345
345
 
346
346
  it "should fail if a ':' is included in the password" do
@@ -484,22 +484,20 @@ describe Puppet::Type.type(:user) do
484
484
  end
485
485
 
486
486
  context "with no home directory specified" do
487
- it "should not accept true" do
488
- expect {
489
- described_class.new(:name => "a", :purge_ssh_keys => true)
490
- }.to raise_error(Puppet::Error, /purge_ssh_keys can only be true for users with a defined home directory/)
487
+ before(:each) do
488
+ allow(Dir).to receive(:home).with('a').and_return('/home/a')
491
489
  end
492
490
 
493
- it "should not accept the ~ wildcard" do
494
- expect {
495
- described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
496
- }.to raise_error(Puppet::Error, /meta character ~ or %h only allowed for users with a defined home directory/)
491
+ it "should accept true" do
492
+ described_class.new(:name => "a", :purge_ssh_keys => true)
497
493
  end
498
494
 
499
- it "should not accept the %h wildcard" do
500
- expect {
501
- described_class.new(:name => "a", :purge_ssh_keys => "%h/keys")
502
- }.to raise_error(Puppet::Error, /meta character ~ or %h only allowed for users with a defined home directory/)
495
+ it "should accept the ~ wildcard" do
496
+ described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
497
+ end
498
+
499
+ it "should accept the %h wildcard" do
500
+ described_class.new(:name => "a", :purge_ssh_keys => "%h/keys")
503
501
  end
504
502
  end
505
503
 
@@ -508,6 +506,10 @@ describe Puppet::Type.type(:user) do
508
506
  [ "/dev/null", "/tmp/keyfile" ].map { |path| File.expand_path(path) }
509
507
  end
510
508
 
509
+ before(:each) do
510
+ allow(Dir).to receive(:home).with('test').and_return('/home/test')
511
+ end
512
+
511
513
  subject do
512
514
  res = described_class.new(:name => "test", :purge_ssh_keys => paths)
513
515
  res.catalog = Puppet::Resource::Catalog.new
@@ -534,6 +536,10 @@ describe Puppet::Type.type(:user) do
534
536
  res
535
537
  end
536
538
 
539
+ before(:each) do
540
+ allow(Dir).to receive(:home).with('test_user_name').and_return('/home/test_user_name')
541
+ end
542
+
537
543
  context "when purging is disabled" do
538
544
  let(:purge_param) { false }
539
545
 
@@ -329,6 +329,36 @@ describe Puppet::Type.type(:yumrepo) do
329
329
 
330
330
  describe "proxy_password" do
331
331
  it_behaves_like "a yumrepo parameter that can be absent", :proxy_password
332
+
333
+ context "for password information in the logs" do
334
+ let(:transaction) { Puppet::Transaction.new(Puppet::Resource::Catalog.new, nil, nil) }
335
+ let(:harness) { Puppet::Transaction::ResourceHarness.new(transaction) }
336
+ let(:provider_class) { described_class.provide(:simple) do
337
+ mk_resource_methods
338
+ def create; end
339
+ def delete; end
340
+ def exists?; get(:ensure) != :absent; end
341
+ def flush; end
342
+ def self.instances; []; end
343
+ end
344
+ }
345
+ let(:provider) { provider_class.new(:name => 'foo', :ensure => :present) }
346
+ let(:resource) { described_class.new(:name => 'puppetlabs', :proxy_password => 'top secret', :provider => provider) }
347
+
348
+ it "redacts on creation" do
349
+ status = harness.evaluate(resource)
350
+ sync_event = status.events[0]
351
+ expect(sync_event.message).to eq 'changed [redacted] to [redacted]'
352
+ end
353
+
354
+ it "redacts on update" do
355
+ harness.evaluate(resource)
356
+ resource[:proxy_password] = 'super classified'
357
+ status = harness.evaluate(resource)
358
+ sync_event = status.events[0]
359
+ expect(sync_event.message).to eq 'changed [redacted] to [redacted]'
360
+ end
361
+ end
332
362
  end
333
363
 
334
364
  describe "s3_enabled" do
@@ -735,6 +735,46 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
735
735
  end
736
736
  end
737
737
 
738
+ describe "#set_sensitive_parameters" do
739
+ let(:sensitive_type) do
740
+ Puppet::Type.newtype(:sensitive_test) do
741
+ newparam(:name) { isnamevar }
742
+ newproperty(:secret) do
743
+ newvalues(/.*/)
744
+ sensitive true
745
+ end
746
+ newproperty(:transparency) do
747
+ newvalues(/.*/)
748
+ sensitive false
749
+ end
750
+ newproperty(:things) { newvalues(/.*/) }
751
+ end
752
+ end
753
+
754
+ it "should mark properties as sensitive" do
755
+ resource = sensitive_type.new(:name => 'foo', :secret => 'uber classified')
756
+ expect(resource.parameters[:secret].sensitive).to be true
757
+ end
758
+
759
+ it "should not have a sensitive flag when not set" do
760
+ resource = sensitive_type.new(:name => 'foo', :things => '1337')
761
+ expect(resource.parameters[:things].sensitive).to be_nil
762
+ end
763
+
764
+ it "should define things as not sensitive" do
765
+ resource = sensitive_type.new(:name => 'foo', :transparency => 'public knowledge')
766
+ expect(resource.parameters[:transparency].sensitive).to be false
767
+ end
768
+
769
+ it "should honor when sensitivity is set in a manifest" do
770
+ resource = sensitive_type.new(:name => 'foo',
771
+ :transparency => Puppet::Pops::Types::PSensitiveType::Sensitive.new('top secret'),
772
+ :sensitive_parameters => [:transparency]
773
+ )
774
+ expect(resource.parameters[:transparency].sensitive).to be true
775
+ end
776
+ end
777
+
738
778
  describe "when #finish is called on a type" do
739
779
  let(:post_hook_type) do
740
780
  Puppet::Type.newtype(:finish_test) do