puppet 6.14.0-x86-mingw32 → 6.19.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -14,11 +14,11 @@ module Puppet::Rest
14
14
  # construction
15
15
  # @param [Symbol] server_setting the setting to check for special
16
16
  # server configuration
17
- # @param [Symbol] port_setting the setting to check for speical
17
+ # @param [Symbol] port_setting the setting to check for special
18
18
  # port configuration
19
19
  # @param [Symbol] srv_service the name of the service when using SRV
20
20
  # records
21
- def initialize(api:, server_setting: :server, port_setting: :masterport, srv_service: :puppet)
21
+ def initialize(api:, server_setting: :server, port_setting: :serverport, srv_service: :puppet)
22
22
  @api = api
23
23
  @default_server = Puppet::Util::Connection.determine_server(server_setting)
24
24
  @default_port = Puppet::Util::Connection.determine_port(port_setting, server_setting)
@@ -1,16 +1,32 @@
1
1
  require 'puppet/http'
2
2
  require 'singleton'
3
3
 
4
+ # Provides access to runtime implementations.
5
+ #
6
+ # @api private
4
7
  class Puppet::Runtime
5
8
  include Singleton
6
9
 
7
10
  def initialize
8
11
  @runtime_services = {
9
- 'http' => proc { Puppet::HTTP::Client.new }
12
+ http: proc do
13
+ klass = Puppet::Network::HttpPool.http_client_class
14
+ if klass == Puppet::Network::HTTP::Connection ||
15
+ klass == Puppet::Network::HTTP::ConnectionAdapter
16
+ Puppet::HTTP::Client.new
17
+ else
18
+ Puppet::HTTP::ExternalClient.new(klass)
19
+ end
20
+ end
10
21
  }
11
22
  end
12
23
  private :initialize
13
24
 
25
+ # Get a runtime implementation.
26
+ #
27
+ # @param name [Symbol] the name of the implementation
28
+ # @return [Object] the runtime implementation
29
+ # @api private
14
30
  def [](name)
15
31
  service = @runtime_services[name]
16
32
  raise ArgumentError, "Unknown service #{name}" unless service
@@ -22,11 +38,18 @@ class Puppet::Runtime
22
38
  end
23
39
  end
24
40
 
41
+ # Register a runtime implementation.
42
+ #
43
+ # @param name [Symbol] the name of the implementation
44
+ # @param impl [Object] the runtime implementation
45
+ # @api private
25
46
  def []=(name, impl)
26
47
  @runtime_services[name] = impl
27
48
  end
28
49
 
29
- # for testing
50
+ # Clears all implementations. This is used for testing.
51
+ #
52
+ # @api private
30
53
  def clear
31
54
  initialize
32
55
  end
@@ -44,7 +44,7 @@ class Puppet::Settings
44
44
  REQUIRED_APP_SETTINGS = [:logdir, :confdir, :vardir, :codedir]
45
45
 
46
46
  # The acceptable sections of the puppet.conf configuration file.
47
- ALLOWED_SECTION_NAMES = ['main', 'master', 'agent', 'user'].freeze
47
+ ALLOWED_SECTION_NAMES = ['main', 'server', 'master', 'agent', 'user'].freeze
48
48
 
49
49
  NONE = 'none'.freeze
50
50
 
@@ -330,7 +330,7 @@ class Puppet::Settings
330
330
  end
331
331
 
332
332
  option_parser.on('--run_mode',
333
- "The effective 'run mode' of the application: master, agent, or user.",
333
+ "The effective 'run mode' of the application: server, agent, or user.",
334
334
  :REQUIRED) do |arg|
335
335
  Puppet.settings.preferred_run_mode = arg
336
336
  end
@@ -564,7 +564,7 @@ class Puppet::Settings
564
564
  # @api private
565
565
  def preferred_run_mode=(mode)
566
566
  mode = mode.to_s.downcase.intern
567
- raise ValidationError, "Invalid run mode '#{mode}'" unless [:master, :agent, :user].include?(mode)
567
+ raise ValidationError, "Invalid run mode '#{mode}'" unless [:server, :master, :agent, :user].include?(mode)
568
568
  @preferred_run_mode_name = mode
569
569
  # Changing the run mode has far-reaching consequences. Flush any cached
570
570
  # settings so they will be re-generated.
@@ -659,7 +659,7 @@ class Puppet::Settings
659
659
  if explicit_config_file?
660
660
  return self[:config]
661
661
  else
662
- return File.join(Puppet::Util::RunMode[:master].conf_dir, config_file_name)
662
+ return File.join(Puppet::Util::RunMode[:server].conf_dir, config_file_name)
663
663
  end
664
664
  end
665
665
  private :main_config_file
@@ -829,7 +829,16 @@ class Puppet::Settings
829
829
  SearchPathElement.new(:cli, :values),
830
830
  ]
831
831
  searchpath << SearchPathElement.new(environment.intern, :environment) if environment
832
- searchpath << SearchPathElement.new(run_mode, :section) if run_mode
832
+
833
+ if run_mode
834
+ if [:master, :server].include?(run_mode)
835
+ searchpath << SearchPathElement.new(:server, :section)
836
+ searchpath << SearchPathElement.new(:master, :section)
837
+ else
838
+ searchpath << SearchPathElement.new(run_mode, :section)
839
+ end
840
+ end
841
+
833
842
  searchpath << SearchPathElement.new(:main, :section)
834
843
  end
835
844
 
@@ -1053,12 +1062,17 @@ Generated on #{Time.now}.
1053
1062
  # Create the necessary objects to use a section. This is idempotent;
1054
1063
  # you can 'use' a section as many times as you want.
1055
1064
  def use(*sections)
1065
+ Puppet.warning(":master section deprecated in favor of :server section") if sections.include?(:master)
1066
+
1067
+ # add :server if sections include :master or :master if sections include :server
1068
+ sections |= [:master, :server] if (sections & [:master, :server]).any?
1069
+
1056
1070
  sections = sections.collect { |s| s.to_sym }
1057
1071
  sections = sections.reject { |s| @used.include?(s) }
1058
1072
 
1059
1073
  return if sections.empty?
1060
1074
 
1061
- Puppet.debug("Applying settings catalog for sections #{sections.join(', ')}")
1075
+ Puppet.debug { "Applying settings catalog for sections #{sections.join(', ')}" }
1062
1076
 
1063
1077
  begin
1064
1078
  catalog = to_catalog(*sections).to_ral
@@ -2,6 +2,7 @@
2
2
  require 'puppet'
3
3
  require 'puppet/ssl/openssl_loader'
4
4
 
5
+ # @api private
5
6
  module Puppet::SSL # :nodoc:
6
7
  CA_NAME = "ca".freeze
7
8
  require 'puppet/ssl/host'
@@ -22,9 +22,9 @@ class Puppet::SSL::Host
22
22
 
23
23
  attr_writer :key, :certificate, :certificate_request, :crl_usage
24
24
 
25
- def self.localhost
25
+ def self.localhost(suppress_warning = false)
26
26
  return @localhost if @localhost
27
- @localhost = new
27
+ @localhost = new(nil, false, suppress_warning)
28
28
  @localhost.generate unless @localhost.certificate
29
29
  @localhost.key
30
30
  @localhost
@@ -225,14 +225,14 @@ ERROR_STRING
225
225
  end
226
226
  private :validate_csr_with_key
227
227
 
228
- def initialize(name = nil, device = false)
228
+ def initialize(name = nil, device = false, suppress_warning = false)
229
229
  @name = (name || Puppet[:certname]).downcase
230
230
  @device = device
231
231
  Puppet::SSL::Base.validate_certname(@name)
232
232
  @key = @certificate = @certificate_request = nil
233
233
  @crl_usage = Puppet.settings[:certificate_revocation]
234
234
  @crl_path = Puppet.settings[:hostcrl]
235
- Puppet.deprecation_warning(_("Puppet::SSL::Host is deprecated and will be removed in a future release of Puppet."));
235
+ Puppet.deprecation_warning(_("Puppet::SSL::Host is deprecated and will be removed in a future release of Puppet.")) unless suppress_warning
236
236
  end
237
237
 
238
238
  # Extract the public key from the private key.
@@ -61,6 +61,7 @@ module Puppet::SSL::Oids
61
61
  ["1.3.6.1.4.1.34380.1.1.23", 'pp_cloudplatform', 'Puppet Node Cloud Platform Name'],
62
62
  ["1.3.6.1.4.1.34380.1.1.24", 'pp_apptier', 'Puppet Node Application Tier'],
63
63
  ["1.3.6.1.4.1.34380.1.1.25", 'pp_hostname', 'Puppet Node Hostname'],
64
+ ["1.3.6.1.4.1.34380.1.1.26", 'pp_owner', 'Puppet Node Owner'],
64
65
 
65
66
  ["1.3.6.1.4.1.34380.1.2", 'ppPrivCertExt', 'Puppet Private Certificate Extension'],
66
67
 
@@ -22,9 +22,9 @@ module Puppet::SSL
22
22
  # This is an idiom to initialize a Struct from keyword
23
23
  # arguments. Ruby 2.5 introduced `keyword_init: true` for
24
24
  # that purpose, but we need to support older versions.
25
- def initialize(**kwargs)
25
+ def initialize(kwargs = {})
26
26
  super({})
27
- DEFAULTS.merge(kwargs).each { |k,v| self[k] = v }
27
+ DEFAULTS.merge(**kwargs).each { |k,v| self[k] = v }
28
28
  end
29
29
  end
30
30
  end
@@ -46,13 +46,32 @@ class Puppet::SSL::SSLProvider
46
46
  # perform revocation checking.
47
47
  #
48
48
  # @param cacerts [Array<OpenSSL::X509::Certificate>] Array of trusted CA certs
49
+ # @param path [String, nil] A file containing additional trusted CA certs.
49
50
  # @return [Puppet::SSL::SSLContext] A context to use to create connections
50
51
  # @raise (see #create_context)
51
52
  # @api private
52
- def create_system_context(cacerts:)
53
+ def create_system_context(cacerts:, path: Puppet[:ssl_trust_store])
53
54
  store = create_x509_store(cacerts, [], false)
54
55
  store.set_default_paths
55
56
 
57
+ if path
58
+ stat = Puppet::FileSystem.stat(path)
59
+ if stat
60
+ if stat.ftype == 'file'
61
+ # don't add empty files as ruby/openssl will raise
62
+ if stat.size > 0
63
+ begin
64
+ store.add_file(path)
65
+ rescue => e
66
+ Puppet.err(_("Failed to add '%{path}' as a trusted CA file: %{detail}" % { path: path, detail: e.message }, e))
67
+ end
68
+ end
69
+ else
70
+ Puppet.warning(_("The 'ssl_trust_store' setting does not refer to a file and will be ignored: '%{path}'" % { path: path }))
71
+ end
72
+ end
73
+ end
74
+
56
75
  Puppet::SSL::SSLContext.new(store: store, cacerts: cacerts, crls: [], revocation: false).freeze
57
76
  end
58
77
 
@@ -45,7 +45,7 @@ class Puppet::SSL::StateMachine
45
45
  next_ctx = @ssl_provider.create_root_context(cacerts: cacerts, revocation: false)
46
46
  else
47
47
  route = @machine.session.route_to(:ca, ssl_context: @ssl_context)
48
- pem = route.get_certificate(Puppet::SSL::CA_NAME, ssl_context: @ssl_context)
48
+ _, pem = route.get_certificate(Puppet::SSL::CA_NAME, ssl_context: @ssl_context)
49
49
  if @machine.ca_fingerprint
50
50
  actual_digest = Puppet::SSL::Digest.new(@machine.digest, pem).to_hex
51
51
  expected_digest = @machine.ca_fingerprint.scan(/../).join(':').upcase
@@ -146,7 +146,7 @@ class Puppet::SSL::StateMachine
146
146
 
147
147
  def download_crl(ssl_ctx, last_update)
148
148
  route = @machine.session.route_to(:ca, ssl_context: ssl_ctx)
149
- pem = route.get_certificate_revocation_list(if_modified_since: last_update, ssl_context: ssl_ctx)
149
+ _, pem = route.get_certificate_revocation_list(if_modified_since: last_update, ssl_context: ssl_ctx)
150
150
  crls = @cert_provider.load_crls_from_pem(pem)
151
151
  # verify crls before saving
152
152
  next_ctx = @ssl_provider.create_root_context(cacerts: ssl_ctx[:cacerts], crls: crls)
@@ -234,7 +234,7 @@ class Puppet::SSL::StateMachine
234
234
 
235
235
  route = @machine.session.route_to(:ca, ssl_context: @ssl_context)
236
236
  cert = OpenSSL::X509::Certificate.new(
237
- route.get_certificate(Puppet[:certname], ssl_context: @ssl_context)
237
+ route.get_certificate(Puppet[:certname], ssl_context: @ssl_context)[1]
238
238
  )
239
239
  Puppet.info _("Downloaded certificate for %{name} from %{url}") % { name: Puppet[:certname], url: route.url }
240
240
  # verify client cert before saving
@@ -279,19 +279,54 @@ class Puppet::SSL::StateMachine
279
279
  Puppet.info(_("Will try again in %{time} seconds.") % {time: time})
280
280
 
281
281
  # close persistent connections and session state before sleeping
282
- Puppet.runtime['http'].close
283
- @machine.session = nil
282
+ Puppet.runtime[:http].close
283
+ @machine.session = Puppet.runtime[:http].create_session
284
284
 
285
+ @machine.unlock
285
286
  Kernel.sleep(time)
287
+ NeedLock.new(@machine)
288
+ end
289
+ end
290
+ end
291
+
292
+ # Acquire the ssl lock or return LockFailure causing us to exit.
293
+ #
294
+ class NeedLock < SSLState
295
+ def initialize(machine)
296
+ super(machine, nil)
297
+ end
286
298
 
299
+ def next_state
300
+ if @machine.lock
287
301
  # our ssl directory may have been cleaned while we were
288
302
  # sleeping, start over from the top
289
- @machine.session = Puppet.runtime['http'].create_session
290
303
  NeedCACerts.new(@machine)
304
+ elsif @machine.waitforlock < 1
305
+ LockFailure.new(@machine, _("Another puppet instance is already running and the waitforlock setting is set to 0; exiting"))
306
+ elsif Time.now.to_i >= @machine.waitlock_deadline
307
+ LockFailure.new(@machine, _("Another puppet instance is already running and the maxwaitforlock timeout has been exceeded; exiting"))
308
+ else
309
+ Puppet.info _("Another puppet instance is already running; waiting for it to finish")
310
+ Puppet.info _("Will try again in %{time} seconds.") % {time: @machine.waitforlock}
311
+ Kernel.sleep @machine.waitforlock
312
+
313
+ # try again
314
+ self
291
315
  end
292
316
  end
293
317
  end
294
318
 
319
+ # We failed to acquire the lock, so exit
320
+ #
321
+ class LockFailure < SSLState
322
+ attr_reader :message
323
+
324
+ def initialize(machine, message)
325
+ super(machine, nil)
326
+ @message = message
327
+ end
328
+ end
329
+
295
330
  # We cannot make progress due to an error.
296
331
  #
297
332
  class Error < SSLState
@@ -314,7 +349,7 @@ class Puppet::SSL::StateMachine
314
349
  #
315
350
  class Done < SSLState; end
316
351
 
317
- attr_reader :waitforcert, :wait_deadline, :cert_provider, :ssl_provider, :ca_fingerprint, :digest
352
+ attr_reader :waitforcert, :wait_deadline, :waitforlock, :waitlock_deadline, :cert_provider, :ssl_provider, :ca_fingerprint, :digest
318
353
  attr_accessor :session
319
354
 
320
355
  # Construct a state machine to manage the SSL initialization process. By
@@ -327,7 +362,12 @@ class Puppet::SSL::StateMachine
327
362
  # then then state machine will exit instead of wait.
328
363
  #
329
364
  # @param waitforcert [Integer] how many seconds to wait between attempts
330
- # @param maxwiatforcert [Integer] maximum amount of second
365
+ # @param maxwaitforcert [Integer] maximum amount of seconds to wait for the
366
+ # server to sign the certificate request
367
+ # @param waitforlock [Integer] how many seconds to wait between attempts for
368
+ # acquiring the ssl lock
369
+ # @param maxwaitforlock [Integer] maximum amount of seconds to wait for an
370
+ # already running process to release the ssl lock
331
371
  # @param onetime [Boolean] whether to run onetime
332
372
  # @param lockfile [Puppet::Util::Pidlock] lockfile to protect against
333
373
  # concurrent modification by multiple processes
@@ -340,6 +380,8 @@ class Puppet::SSL::StateMachine
340
380
  # downloaded CA bundle
341
381
  def initialize(waitforcert: Puppet[:waitforcert],
342
382
  maxwaitforcert: Puppet[:maxwaitforcert],
383
+ waitforlock: Puppet[:waitforlock],
384
+ maxwaitforlock: Puppet[:maxwaitforlock],
343
385
  onetime: Puppet[:onetime],
344
386
  cert_provider: Puppet::X509::CertProvider.new,
345
387
  ssl_provider: Puppet::SSL::SSLProvider.new,
@@ -348,13 +390,15 @@ class Puppet::SSL::StateMachine
348
390
  ca_fingerprint: Puppet[:ca_fingerprint])
349
391
  @waitforcert = waitforcert
350
392
  @wait_deadline = Time.now.to_i + maxwaitforcert
393
+ @waitforlock = waitforlock
394
+ @waitlock_deadline = Time.now.to_i + maxwaitforlock
351
395
  @onetime = onetime
352
396
  @cert_provider = cert_provider
353
397
  @ssl_provider = ssl_provider
354
398
  @lockfile = lockfile
355
399
  @digest = digest
356
400
  @ca_fingerprint = ca_fingerprint
357
- @session = Puppet.runtime['http'].create_session
401
+ @session = Puppet.runtime[:http].create_session
358
402
  end
359
403
 
360
404
  # Run the state machine for CA certs and CRLs.
@@ -362,7 +406,7 @@ class Puppet::SSL::StateMachine
362
406
  # @return [Puppet::SSL::SSLContext] initialized SSLContext
363
407
  # @raise [Puppet::Error] If we fail to generate an SSLContext
364
408
  def ensure_ca_certificates
365
- final_state = run_machine(NeedCACerts.new(self), NeedKey)
409
+ final_state = run_machine(NeedLock.new(self), NeedKey)
366
410
  final_state.ssl_context
367
411
  end
368
412
 
@@ -371,7 +415,7 @@ class Puppet::SSL::StateMachine
371
415
  # @return [Puppet::SSL::SSLContext] initialized SSLContext
372
416
  # @raise [Puppet::Error] If we fail to generate an SSLContext
373
417
  def ensure_client_certificate
374
- final_state = run_machine(NeedCACerts.new(self), Done)
418
+ final_state = run_machine(NeedLock.new(self), Done)
375
419
  ssl_context = final_state.ssl_context
376
420
 
377
421
  if Puppet::Util::Log.sendlevel?(:debug)
@@ -390,40 +434,38 @@ class Puppet::SSL::StateMachine
390
434
  ssl_context
391
435
  end
392
436
 
437
+ def lock
438
+ @lockfile.lock
439
+ end
440
+
441
+ def unlock
442
+ @lockfile.unlock
443
+ end
444
+
393
445
  private
394
446
 
395
447
  def run_machine(state, stop)
396
- with_lock do
397
- loop do
398
- state = run_step(state)
399
-
400
- case state
401
- when stop
402
- break
403
- when Error
404
- if @onetime
405
- Puppet.log_exception(state.error)
406
- raise state.error
407
- end
408
- else
409
- # fall through
448
+ loop do
449
+ state = run_step(state)
450
+
451
+ case state
452
+ when stop
453
+ break
454
+ when LockFailure
455
+ raise Puppet::Error, state.message
456
+ when Error
457
+ if @onetime
458
+ Puppet.log_exception(state.error)
459
+ raise state.error
410
460
  end
461
+ else
462
+ # fall through
411
463
  end
412
464
  end
413
465
 
414
466
  state
415
- end
416
-
417
- def with_lock
418
- if @lockfile.lock
419
- begin
420
- yield
421
- ensure
422
- @lockfile.unlock
423
- end
424
- else
425
- raise Puppet::Error, _('Another puppet instance is already running; exiting')
426
- end
467
+ ensure
468
+ @lockfile.unlock if @lockfile.locked?
427
469
  end
428
470
 
429
471
  def run_step(state)
@@ -104,7 +104,7 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
104
104
  crl = store_context.current_crl
105
105
  if crl
106
106
  if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
107
- Puppet.debug("Ignoring CRL not yet valid, current time #{Time.now.utc}, CRL last updated #{crl.last_update.utc}")
107
+ Puppet.debug { "Ignoring CRL not yet valid, current time #{Time.now.utc}, CRL last updated #{crl.last_update.utc}" }
108
108
  preverify_ok = true
109
109
  else
110
110
  @verify_errors << "#{error_string} for #{crl.issuer.to_utf8}"