puppet 5.5.16-x86-mingw32 → 5.5.21-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 (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 +18 -13
  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
@@ -128,6 +128,13 @@ describe Puppet::Util::Execution do
128
128
 
129
129
  call_exec_posix('test command', { :cwd => cwd }, @stdin, @stdout, @stderr)
130
130
  end
131
+
132
+ it "should not change the current working directory if cwd is unspecified" do
133
+ expect(Dir).to receive(:chdir).never
134
+ expect(Kernel).to receive(:exec).with('test command')
135
+
136
+ call_exec_posix('test command', {}, @stdin, @stdout, @stderr)
137
+ end
131
138
  end
132
139
 
133
140
  it "should return the pid of the child process" do
@@ -171,6 +178,15 @@ describe Puppet::Util::Execution do
171
178
 
172
179
  call_exec_windows('test command', { :cwd => cwd }, @stdin, @stdout, @stderr)
173
180
  end
181
+
182
+ it "should not change the current working directory if cwd is unspecified" do
183
+ expect(Dir).to receive(:chdir).never
184
+ expect(Process).to receive(:create) do |args|
185
+ expect(args[:cwd]).to be_nil
186
+ end
187
+
188
+ call_exec_windows('test command', {}, @stdin, @stdout, @stderr)
189
+ end
174
190
  end
175
191
 
176
192
  context 'suppress_window option' do
@@ -12,6 +12,103 @@ describe Puppet::Util::HttpProxy do
12
12
 
13
13
  host, port, user, password = 'some.host', 1234, 'user1', 'pAssw0rd'
14
14
 
15
+ def expects_direct_connection_to(http, www)
16
+ expect(http.address).to eq(www.host)
17
+ expect(http.port).to eq(www.port)
18
+
19
+ expect(http.proxy_address).to be_nil
20
+ expect(http.proxy_port).to be_nil
21
+ expect(http.proxy_user).to be_nil
22
+ expect(http.proxy_pass).to be_nil
23
+ end
24
+
25
+ def expects_proxy_connection_via(http, www, host, port, user, password)
26
+ expect(http.address).to eq(www.host)
27
+ expect(http.port).to eq(www.port)
28
+
29
+ expect(http.proxy_address).to eq(host)
30
+ expect(http.proxy_port).to eq(port)
31
+ expect(http.proxy_user).to eq(user)
32
+ expect(http.proxy_pass).to eq(password)
33
+ end
34
+
35
+ describe '.proxy' do
36
+ let(:www) { URI::HTTP.build(host: 'www.example.com', port: 80) }
37
+
38
+ it 'uses a proxy' do
39
+ Puppet[:http_proxy_host] = host
40
+ Puppet[:http_proxy_port] = port
41
+ Puppet[:http_proxy_user] = user
42
+ Puppet[:http_proxy_password] = password
43
+
44
+ http = subject.proxy(www)
45
+ expects_proxy_connection_via(http, www, host, port, user, password)
46
+ end
47
+
48
+ it 'connects directly to the server' do
49
+ http = subject.proxy(www)
50
+ expects_direct_connection_to(http, www)
51
+ end
52
+
53
+ context 'when setting no_proxy' do
54
+ before :each do
55
+ Puppet[:http_proxy_host] = host
56
+ Puppet[:http_proxy_port] = port
57
+ end
58
+
59
+ it 'connects directly to the server when HTTP_PROXY environment variable is set, but server matches no_proxy setting' do
60
+ Puppet[:no_proxy] = www.host
61
+
62
+ Puppet::Util.withenv('HTTP_PROXY' => "http://#{host}:#{port}") do
63
+ http = subject.proxy(www)
64
+ expects_direct_connection_to(http, www)
65
+ end
66
+ end
67
+
68
+ it 'connects directly to the server when no_proxy matches wildcard domain' do
69
+ Puppet[:no_proxy] = '*.example.com'
70
+
71
+ http = subject.proxy(www)
72
+ expects_direct_connection_to(http, www)
73
+ end
74
+
75
+ it 'connects directly to the server when no_proxy matches dotted domain' do
76
+ Puppet[:no_proxy] = '.example.com'
77
+
78
+ http = subject.proxy(www)
79
+ expects_direct_connection_to(http, www)
80
+ end
81
+
82
+ it 'connects directly to the server when no_proxy matches a domain suffix like ruby does' do
83
+ Puppet[:no_proxy] = 'example.com'
84
+
85
+ http = subject.proxy(www)
86
+ expects_direct_connection_to(http, www)
87
+ end
88
+
89
+ it 'connects directly to the server when no_proxy matches a partial suffix like ruby does' do
90
+ Puppet[:no_proxy] = 'ample.com'
91
+
92
+ http = subject.proxy(www)
93
+ expects_direct_connection_to(http, www)
94
+ end
95
+
96
+ it 'connects directly to the server when it is a subdomain of no_proxy' do
97
+ Puppet[:no_proxy] = '*.com'
98
+
99
+ http = subject.proxy(www)
100
+ expects_direct_connection_to(http, www)
101
+ end
102
+
103
+ it 'connects directly to the server when no_proxy is *' do
104
+ Puppet[:no_proxy] = '*'
105
+
106
+ http = subject.proxy(www)
107
+ expects_direct_connection_to(http, www)
108
+ end
109
+ end
110
+ end
111
+
15
112
  describe ".http_proxy_env" do
16
113
  it "should return nil if no environment variables" do
17
114
  expect(subject.http_proxy_env).to eq(nil)
@@ -129,9 +226,32 @@ describe Puppet::Util::HttpProxy do
129
226
 
130
227
  end
131
228
 
229
+ describe ".no_proxy" do
230
+ no_proxy = '127.0.0.1, localhost'
231
+ it "should use a no_proxy list if set in environment" do
232
+ Puppet::Util.withenv('NO_PROXY' => no_proxy) do
233
+ expect(subject.no_proxy).to eq(no_proxy)
234
+ end
235
+ end
236
+
237
+ it "should use a no_proxy list if set in config" do
238
+ Puppet.settings[:no_proxy] = no_proxy
239
+ expect(subject.no_proxy).to eq(no_proxy)
240
+ end
241
+
242
+ it "should use environment variable before puppet settings" do
243
+ no_proxy_puppet_setting = '10.0.0.1, localhost'
244
+ Puppet::Util.withenv('NO_PROXY' => no_proxy) do
245
+ Puppet.settings[:no_proxy] = no_proxy_puppet_setting
246
+ expect(subject.no_proxy).to eq(no_proxy)
247
+ end
248
+ end
249
+ end
250
+
132
251
  describe ".no_proxy?" do
133
252
  no_proxy = '127.0.0.1, localhost, mydomain.com, *.otherdomain.com, oddport.com:8080, *.otheroddport.com:8080, .anotherdomain.com, .anotheroddport.com:8080'
134
- it "should return false if no_proxy does not exist in env" do
253
+
254
+ it "should return false if no_proxy does not exist in environment or puppet settings" do
135
255
  Puppet::Util.withenv('no_proxy' => nil) do
136
256
  dest = 'https://puppetlabs.com'
137
257
  expect(subject.no_proxy?(dest)).to be false
@@ -44,37 +44,13 @@ describe Puppet::Util::Log.desttypes[:file] do
44
44
  end
45
45
  end
46
46
 
47
- describe "on POSIX systems", :if => Puppet.features.posix? do
47
+ describe "on POSIX systems", :unless => Puppet::Util::Platform.windows? do
48
48
  describe "with a normal file" do
49
+ let (:parent) { Pathname.new('/tmp') }
49
50
  let (:abspath) { '/tmp/log' }
50
51
  let (:relpath) { 'log' }
51
52
 
52
53
  it_behaves_like "file destination"
53
-
54
- it "logs an error if it can't chown the file owner & group" do
55
- expect(File).to receive(:exists?).with(abspath).and_return(false)
56
- expect(FileUtils).to receive(:chown).with(Puppet[:user], Puppet[:group], abspath).and_raise(Errno::EPERM)
57
- expect(Puppet.features).to receive(:root?).and_return(true)
58
- expect(Puppet).to receive(:err).with("Unable to set ownership to #{Puppet[:user]}:#{Puppet[:group]} for log file: #{abspath}")
59
-
60
- @class.new(abspath)
61
- end
62
-
63
- it "doesn't attempt to chown when running as non-root" do
64
- expect(File).to receive(:exists?).with(abspath).and_return(false)
65
- expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
66
- expect(Puppet.features).to receive(:root?).and_return(false)
67
-
68
- @class.new(abspath)
69
- end
70
-
71
- it "doesn't attempt to chown when file already exists" do
72
- expect(File).to receive(:exists?).with(abspath).and_return(true)
73
- expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
74
- expect(Puppet.features).to receive(:root?).and_return(true)
75
-
76
- @class.new(abspath)
77
- end
78
54
  end
79
55
 
80
56
  describe "with a JSON file" do
@@ -177,118 +177,6 @@ describe Puppet::Util::Log do
177
177
 
178
178
  expect(logs.collect(&:message)).to include("Inner block", "Outer block")
179
179
  end
180
-
181
- it 'includes backtrace for RuntimeError in log message when trace is enabled' do
182
- logs = []
183
- destination = Puppet::Test::LogCollector.new(logs)
184
-
185
- Puppet::Util::Log.newdestination(destination)
186
- Puppet::Util::Log.with_destination(destination) do
187
- begin
188
- raise RuntimeError, 'Oops'
189
- rescue RuntimeError => e
190
- Puppet.log_exception(e, :default, :trace => true)
191
- end
192
- end
193
- expect(logs.size).to eq(1)
194
- log = logs[0]
195
- expect(log.message).to match('/log_spec.rb')
196
- expect(log.backtrace).to be_nil
197
- end
198
-
199
- it 'excludes backtrace for RuntimeError in log message when trace is disabled' do
200
- logs = []
201
- destination = Puppet::Test::LogCollector.new(logs)
202
-
203
- Puppet::Util::Log.newdestination(destination)
204
- Puppet::Util::Log.with_destination(destination) do
205
- begin
206
- raise RuntimeError, 'Oops'
207
- rescue RuntimeError => e
208
- Puppet.log_exception(e)
209
- end
210
- end
211
- expect(logs.size).to eq(1)
212
- log = logs[0]
213
- expect(log.message).to_not match('/log_spec.rb')
214
- expect(log.backtrace).to be_nil
215
- end
216
-
217
- it "backtrace is Array in 'backtrace' and excluded from 'message' when logging ParseErrorWithIssue with trace enabled" do
218
- logs = []
219
- destination = Puppet::Test::LogCollector.new(logs)
220
-
221
- Puppet::Util::Log.newdestination(destination)
222
- Puppet::Util::Log.with_destination(destination) do
223
- begin
224
- raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
225
- rescue RuntimeError => e
226
- Puppet.log_exception(e, :default, :trace => true)
227
- end
228
- end
229
- expect(logs.size).to eq(1)
230
- log = logs[0]
231
- expect(log.message).to_not match('/log_spec.rb')
232
- expect(log.backtrace).to be_a(Array)
233
- end
234
-
235
- it "backtrace is excluded when logging ParseErrorWithIssue with trace disabled" do
236
- logs = []
237
- destination = Puppet::Test::LogCollector.new(logs)
238
-
239
- Puppet::Util::Log.newdestination(destination)
240
- Puppet::Util::Log.with_destination(destination) do
241
- begin
242
- raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
243
- rescue RuntimeError => e
244
- Puppet.log_exception(e)
245
- end
246
- end
247
- expect(logs.size).to eq(1)
248
- log = logs[0]
249
- expect(log.message).to_not match('/log_spec.rb')
250
- expect(log.backtrace).to be_nil
251
- end
252
-
253
- it 'includes position details for ParseError in log message' do
254
- logs = []
255
- destination = Puppet::Test::LogCollector.new(logs)
256
-
257
- Puppet::Util::Log.newdestination(destination)
258
- Puppet::Util::Log.with_destination(destination) do
259
- begin
260
- raise Puppet::ParseError.new('Oops', '/tmp/test.pp', 30, 15)
261
- rescue RuntimeError => e
262
- Puppet.log_exception(e)
263
- end
264
- end
265
- expect(logs.size).to eq(1)
266
- log = logs[0]
267
- expect(log.message).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
268
- expect(log.message).to be(log.to_s)
269
- end
270
-
271
- it 'excludes position details for ParseErrorWithIssue from log message' do
272
- logs = []
273
- destination = Puppet::Test::LogCollector.new(logs)
274
-
275
- Puppet::Util::Log.newdestination(destination)
276
- Puppet::Util::Log.with_destination(destination) do
277
- begin
278
- raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
279
- rescue RuntimeError => e
280
- Puppet.log_exception(e)
281
- end
282
- end
283
- expect(logs.size).to eq(1)
284
- log = logs[0]
285
- expect(log.message).to_not match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
286
- expect(log.to_s).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
287
- expect(log.issue_code).to eq(:SYNTAX_ERROR)
288
- expect(log.file).to eq('/tmp/test.pp')
289
- expect(log.line).to eq(30)
290
- expect(log.pos).to eq(15)
291
- end
292
180
  end
293
181
 
294
182
  describe Puppet::Util::Log::DestConsole do
@@ -6,6 +6,39 @@ class LoggingTester
6
6
  include Puppet::Util::Logging
7
7
  end
8
8
 
9
+ class PuppetStackCreator
10
+ def raise_error(exception_class)
11
+ case exception_class
12
+ when Puppet::ParseErrorWithIssue
13
+ raise exception_class.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
14
+ when Puppet::ParseError
15
+ raise exception_class.new('Oops', '/tmp/test.pp', 30, 15)
16
+ else
17
+ raise exception_class.new('Oops')
18
+ end
19
+ end
20
+
21
+ def call_raiser(exception_class)
22
+ Puppet::Pops::PuppetStack.stack('/tmp/test2.pp', 20, self, :raise_error, [exception_class])
23
+ end
24
+
25
+ def two_frames_and_a_raise(exception_class)
26
+ Puppet::Pops::PuppetStack.stack('/tmp/test3.pp', 15, self, :call_raiser, [exception_class])
27
+ end
28
+
29
+ def outer_rescue(exception_class)
30
+ begin
31
+ two_frames_and_a_raise(exception_class)
32
+ rescue Puppet::Error => e
33
+ Puppet.log_exception(e)
34
+ end
35
+ end
36
+
37
+ def run(exception_class)
38
+ Puppet::Pops::PuppetStack.stack('/tmp/test4.pp', 10, self, :outer_rescue, [exception_class])
39
+ end
40
+ end
41
+
9
42
  describe Puppet::Util::Logging do
10
43
  before do
11
44
  @logger = LoggingTester.new
@@ -275,6 +308,173 @@ original
275
308
  .*2\.rb:2:in `b'
276
309
  .*3\.rb:1/)
277
310
  end
311
+
312
+ describe "when trace is disabled" do
313
+ it 'excludes backtrace for RuntimeError in log message' do
314
+ begin
315
+ raise RuntimeError, 'Oops'
316
+ rescue RuntimeError => e
317
+ Puppet.log_exception(e)
318
+ end
319
+
320
+ expect(@logs.size).to eq(1)
321
+ log = @logs[0]
322
+ expect(log.message).to_not match('/logging_spec.rb')
323
+ expect(log.backtrace).to be_nil
324
+ end
325
+
326
+ it "backtrace member is unset when logging ParseErrorWithIssue" do
327
+ begin
328
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
329
+ rescue RuntimeError => e
330
+ Puppet.log_exception(e)
331
+ end
332
+
333
+ expect(@logs.size).to eq(1)
334
+ log = @logs[0]
335
+ expect(log.message).to_not match('/logging_spec.rb')
336
+ expect(log.backtrace).to be_nil
337
+ end
338
+ end
339
+
340
+ describe "when trace is enabled" do
341
+ it 'includes backtrace for RuntimeError in log message when enabled globally' do
342
+ Puppet[:trace] = true
343
+ begin
344
+ raise RuntimeError, 'Oops'
345
+ rescue RuntimeError => e
346
+ Puppet.log_exception(e, :default)
347
+ end
348
+ Puppet[:trace] = false
349
+
350
+ expect(@logs.size).to eq(1)
351
+ log = @logs[0]
352
+ expect(log.message).to match('/logging_spec.rb')
353
+ expect(log.backtrace).to be_nil
354
+ end
355
+
356
+ it 'includes backtrace for RuntimeError in log message when enabled via option' do
357
+ begin
358
+ raise RuntimeError, 'Oops'
359
+ rescue RuntimeError => e
360
+ Puppet.log_exception(e, :default, :trace => true)
361
+ end
362
+
363
+ expect(@logs.size).to eq(1)
364
+ log = @logs[0]
365
+ expect(log.message).to match('/logging_spec.rb')
366
+ expect(log.backtrace).to be_nil
367
+ end
368
+
369
+
370
+ it "backtrace member is set when logging ParseErrorWithIssue" do
371
+ begin
372
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
373
+ rescue RuntimeError => e
374
+ Puppet.log_exception(e, :default, :trace => true)
375
+ end
376
+
377
+ expect(@logs.size).to eq(1)
378
+ log = @logs[0]
379
+ expect(log.message).to_not match('/logging_spec.rb')
380
+ expect(log.backtrace).to be_a(Array)
381
+ expect(log.backtrace[0]).to match('/logging_spec.rb')
382
+ end
383
+ it "backtrace has interleaved PuppetStack when logging ParseErrorWithIssue" do
384
+ Puppet[:trace] = true
385
+ PuppetStackCreator.new.run(Puppet::ParseErrorWithIssue)
386
+ Puppet[:trace] = false
387
+
388
+ expect(@logs.size).to eq(1)
389
+ log = @logs[0]
390
+ expect(log.message).to_not match('/logging_spec.rb')
391
+ expect(log.backtrace[0]).to match('/logging_spec.rb')
392
+
393
+ expect(log.backtrace[1]).to match('/tmp/test2.pp:20')
394
+ puppetstack = log.backtrace.select { |l| l =~ /tmp\/test\d\.pp/ }
395
+
396
+ expect(puppetstack.length).to equal 3
397
+ end
398
+
399
+ it "message has interleaved PuppetStack when logging ParseError" do
400
+ Puppet[:trace] = true
401
+ PuppetStackCreator.new.run(Puppet::ParseError)
402
+ Puppet[:trace] = false
403
+
404
+ expect(@logs.size).to eq(1)
405
+ log = @logs[0]
406
+
407
+ log_lines = log.message.split("\n")
408
+ expect(log_lines[1]).to match('/logging_spec.rb')
409
+ expect(log_lines[2]).to match('/tmp/test2.pp:20')
410
+ puppetstack = log_lines.select { |l| l =~ /tmp\/test\d\.pp/ }
411
+
412
+ expect(puppetstack.length).to equal 3
413
+ end
414
+ end
415
+
416
+ describe "when trace is disabled but puppet_trace is enabled" do
417
+ it "includes only PuppetStack as backtrace member with ParseErrorWithIssue" do
418
+ Puppet[:trace] = false
419
+ Puppet[:puppet_trace] = true
420
+ PuppetStackCreator.new.run(Puppet::ParseErrorWithIssue)
421
+ Puppet[:trace] = false
422
+ Puppet[:puppet_trace] = false
423
+
424
+ expect(@logs.size).to eq(1)
425
+ log = @logs[0]
426
+
427
+ expect(log.backtrace[0]).to match('/tmp/test2.pp:20')
428
+ expect(log.backtrace.length).to equal 3
429
+ end
430
+
431
+ it "includes only PuppetStack in message with ParseError" do
432
+ Puppet[:trace] = false
433
+ Puppet[:puppet_trace] = true
434
+ PuppetStackCreator.new.run(Puppet::ParseError)
435
+ Puppet[:trace] = false
436
+ Puppet[:puppet_trace] = false
437
+
438
+ expect(@logs.size).to eq(1)
439
+ log = @logs[0]
440
+
441
+ log_lines = log.message.split("\n")
442
+ expect(log_lines[1]).to match('/tmp/test2.pp:20')
443
+ puppetstack = log_lines.select { |l| l =~ /tmp\/test\d\.pp/ }
444
+
445
+ expect(puppetstack.length).to equal 3
446
+ end
447
+ end
448
+
449
+ it 'includes position details for ParseError in log message' do
450
+ begin
451
+ raise Puppet::ParseError.new('Oops', '/tmp/test.pp', 30, 15)
452
+ rescue RuntimeError => e
453
+ Puppet.log_exception(e)
454
+ end
455
+
456
+ expect(@logs.size).to eq(1)
457
+ log = @logs[0]
458
+ expect(log.message).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
459
+ expect(log.message).to be(log.to_s)
460
+ end
461
+
462
+ it 'excludes position details for ParseErrorWithIssue from log message' do
463
+ begin
464
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
465
+ rescue RuntimeError => e
466
+ Puppet.log_exception(e)
467
+ end
468
+
469
+ expect(@logs.size).to eq(1)
470
+ log = @logs[0]
471
+ expect(log.message).to_not match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
472
+ expect(log.to_s).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
473
+ expect(log.issue_code).to eq(:SYNTAX_ERROR)
474
+ expect(log.file).to eq('/tmp/test.pp')
475
+ expect(log.line).to eq(30)
476
+ expect(log.pos).to eq(15)
477
+ end
278
478
  end
279
479
 
280
480
  describe 'when Facter' do