puppet 6.19.1-x86-mingw32 → 7.0.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 (440) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +19 -20
  4. data/README.md +1 -1
  5. data/conf/fileserver.conf +5 -10
  6. data/ext/build_defaults.yaml +1 -1
  7. data/ext/osx/file_mapping.yaml +0 -5
  8. data/ext/project_data.yaml +1 -14
  9. data/ext/redhat/puppet.spec.erb +0 -1
  10. data/ext/windows/service/daemon.rb +6 -5
  11. data/install.rb +21 -17
  12. data/lib/puppet.rb +11 -20
  13. data/lib/puppet/application.rb +172 -98
  14. data/lib/puppet/application/device.rb +100 -104
  15. data/lib/puppet/application/filebucket.rb +15 -11
  16. data/lib/puppet/application/ssl.rb +1 -1
  17. data/lib/puppet/configurer.rb +28 -33
  18. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  19. data/lib/puppet/defaults.rb +95 -159
  20. data/lib/puppet/environments.rb +10 -25
  21. data/lib/puppet/face/config.rb +10 -0
  22. data/lib/puppet/face/epp.rb +12 -2
  23. data/lib/puppet/face/facts.rb +66 -6
  24. data/lib/puppet/face/help.rb +1 -1
  25. data/lib/puppet/face/plugin.rb +5 -8
  26. data/lib/puppet/ffi/windows.rb +12 -0
  27. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  28. data/lib/puppet/ffi/windows/constants.rb +404 -0
  29. data/lib/puppet/ffi/windows/functions.rb +628 -0
  30. data/lib/puppet/ffi/windows/structs.rb +338 -0
  31. data/lib/puppet/file_serving/configuration.rb +0 -5
  32. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  33. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  34. data/lib/puppet/file_serving/mount.rb +1 -2
  35. data/lib/puppet/forge/repository.rb +0 -1
  36. data/lib/puppet/functions/epp.rb +1 -0
  37. data/lib/puppet/functions/inline_epp.rb +1 -0
  38. data/lib/puppet/generate/models/type/type.rb +4 -1
  39. data/lib/puppet/http.rb +22 -13
  40. data/lib/puppet/http/client.rb +164 -114
  41. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  42. data/lib/puppet/http/errors.rb +16 -0
  43. data/lib/puppet/http/external_client.rb +5 -7
  44. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  45. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  46. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  47. data/lib/puppet/http/proxy.rb +137 -0
  48. data/lib/puppet/http/redirector.rb +4 -12
  49. data/lib/puppet/http/resolver.rb +5 -15
  50. data/lib/puppet/http/resolver/server_list.rb +6 -10
  51. data/lib/puppet/http/resolver/settings.rb +4 -7
  52. data/lib/puppet/http/resolver/srv.rb +7 -11
  53. data/lib/puppet/http/response.rb +36 -54
  54. data/lib/puppet/http/response_converter.rb +24 -0
  55. data/lib/puppet/http/response_net_http.rb +42 -0
  56. data/lib/puppet/http/retry_after_handler.rb +4 -13
  57. data/lib/puppet/http/service.rb +12 -26
  58. data/lib/puppet/http/service/ca.rb +11 -22
  59. data/lib/puppet/http/service/compiler.rb +22 -69
  60. data/lib/puppet/http/service/file_server.rb +18 -27
  61. data/lib/puppet/http/service/puppetserver.rb +26 -12
  62. data/lib/puppet/http/service/report.rb +8 -10
  63. data/lib/puppet/http/session.rb +11 -20
  64. data/lib/puppet/{network/http → http}/site.rb +1 -2
  65. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  66. data/lib/puppet/indirector/fact_search.rb +60 -0
  67. data/lib/puppet/indirector/facts/facter.rb +24 -3
  68. data/lib/puppet/indirector/facts/json.rb +27 -0
  69. data/lib/puppet/indirector/facts/rest.rb +3 -22
  70. data/lib/puppet/indirector/facts/yaml.rb +3 -58
  71. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  72. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  73. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  74. data/lib/puppet/indirector/file_server.rb +1 -8
  75. data/lib/puppet/indirector/generic_http.rb +0 -11
  76. data/lib/puppet/indirector/json.rb +5 -1
  77. data/lib/puppet/indirector/node/json.rb +8 -0
  78. data/lib/puppet/indirector/node/rest.rb +2 -4
  79. data/lib/puppet/indirector/report/json.rb +34 -0
  80. data/lib/puppet/indirector/report/rest.rb +3 -8
  81. data/lib/puppet/indirector/request.rb +0 -101
  82. data/lib/puppet/indirector/rest.rb +12 -263
  83. data/lib/puppet/module_tool/applications.rb +0 -1
  84. data/lib/puppet/network/authconfig.rb +2 -96
  85. data/lib/puppet/network/authorization.rb +13 -35
  86. data/lib/puppet/network/formats.rb +2 -1
  87. data/lib/puppet/network/http.rb +3 -3
  88. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  89. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  90. data/lib/puppet/network/http/connection.rb +247 -316
  91. data/lib/puppet/network/http/handler.rb +0 -1
  92. data/lib/puppet/network/http_pool.rb +16 -34
  93. data/lib/puppet/node.rb +1 -30
  94. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  95. data/lib/puppet/pal/pal_impl.rb +73 -18
  96. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  97. data/lib/puppet/parser/compiler.rb +0 -198
  98. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  99. data/lib/puppet/parser/resource.rb +0 -69
  100. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  101. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  102. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  103. data/lib/puppet/pops/issues.rb +0 -5
  104. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  105. data/lib/puppet/pops/model/ast.pp +0 -42
  106. data/lib/puppet/pops/model/ast.rb +0 -290
  107. data/lib/puppet/pops/model/factory.rb +0 -45
  108. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  109. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  110. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  111. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  112. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  113. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  114. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  115. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  116. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  117. data/lib/puppet/pops/types/type_parser.rb +0 -4
  118. data/lib/puppet/pops/types/types.rb +0 -1
  119. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  120. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  121. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  122. data/lib/puppet/provider.rb +0 -13
  123. data/lib/puppet/provider/nameservice.rb +0 -18
  124. data/lib/puppet/provider/package/dpkg.rb +0 -10
  125. data/lib/puppet/provider/package/gem.rb +23 -3
  126. data/lib/puppet/provider/package/pip.rb +0 -1
  127. data/lib/puppet/provider/package/pkg.rb +0 -4
  128. data/lib/puppet/provider/package/portage.rb +1 -1
  129. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  130. data/lib/puppet/provider/service/smf.rb +191 -73
  131. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  132. data/lib/puppet/reference/configuration.rb +2 -0
  133. data/lib/puppet/reference/indirection.rb +1 -1
  134. data/lib/puppet/resource.rb +1 -89
  135. data/lib/puppet/resource/catalog.rb +1 -14
  136. data/lib/puppet/resource/type.rb +3 -119
  137. data/lib/puppet/resource/type_collection.rb +3 -48
  138. data/lib/puppet/runtime.rb +1 -2
  139. data/lib/puppet/settings.rb +45 -33
  140. data/lib/puppet/settings/base_setting.rb +26 -2
  141. data/lib/puppet/settings/integer_setting.rb +17 -0
  142. data/lib/puppet/settings/port_setting.rb +15 -0
  143. data/lib/puppet/settings/priority_setting.rb +5 -4
  144. data/lib/puppet/ssl.rb +10 -6
  145. data/lib/puppet/ssl/base.rb +3 -5
  146. data/lib/puppet/ssl/certificate.rb +0 -6
  147. data/lib/puppet/ssl/certificate_request.rb +1 -12
  148. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  149. data/lib/puppet/ssl/oids.rb +3 -1
  150. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  151. data/lib/puppet/ssl/state_machine.rb +3 -1
  152. data/lib/puppet/ssl/verifier.rb +2 -0
  153. data/lib/puppet/test/test_helper.rb +1 -3
  154. data/lib/puppet/transaction.rb +1 -7
  155. data/lib/puppet/transaction/report.rb +2 -4
  156. data/lib/puppet/type.rb +0 -76
  157. data/lib/puppet/type/file.rb +5 -7
  158. data/lib/puppet/type/file/checksum.rb +1 -1
  159. data/lib/puppet/type/file/source.rb +1 -1
  160. data/lib/puppet/type/filebucket.rb +3 -3
  161. data/lib/puppet/type/package.rb +5 -13
  162. data/lib/puppet/util/execution.rb +0 -11
  163. data/lib/puppet/util/http_proxy.rb +2 -215
  164. data/lib/puppet/util/monkey_patches.rb +0 -46
  165. data/lib/puppet/util/rdoc.rb +0 -7
  166. data/lib/puppet/util/retry_action.rb +1 -1
  167. data/lib/puppet/util/rubygems.rb +5 -1
  168. data/lib/puppet/util/run_mode.rb +9 -1
  169. data/lib/puppet/util/windows.rb +3 -8
  170. data/lib/puppet/util/windows/daemon.rb +360 -0
  171. data/lib/puppet/util/windows/error.rb +1 -0
  172. data/lib/puppet/util/windows/eventlog.rb +4 -9
  173. data/lib/puppet/util/windows/file.rb +8 -242
  174. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  175. data/lib/puppet/util/windows/process.rb +4 -226
  176. data/lib/puppet/util/windows/service.rb +9 -460
  177. data/lib/puppet/util/windows/string.rb +12 -13
  178. data/lib/puppet/util/yaml.rb +0 -22
  179. data/lib/puppet/vendor/require_vendored.rb +0 -1
  180. data/lib/puppet/version.rb +1 -1
  181. data/lib/puppet/x509.rb +5 -1
  182. data/lib/puppet/x509/cert_provider.rb +29 -1
  183. data/locales/puppet.pot +531 -1232
  184. data/man/man5/puppet.conf.5 +37 -97
  185. data/man/man8/puppet-agent.8 +1 -1
  186. data/man/man8/puppet-apply.8 +1 -1
  187. data/man/man8/puppet-catalog.8 +1 -1
  188. data/man/man8/puppet-config.8 +1 -1
  189. data/man/man8/puppet-describe.8 +1 -1
  190. data/man/man8/puppet-device.8 +1 -1
  191. data/man/man8/puppet-doc.8 +1 -1
  192. data/man/man8/puppet-epp.8 +1 -1
  193. data/man/man8/puppet-facts.8 +55 -9
  194. data/man/man8/puppet-filebucket.8 +6 -6
  195. data/man/man8/puppet-generate.8 +1 -1
  196. data/man/man8/puppet-help.8 +1 -1
  197. data/man/man8/puppet-lookup.8 +1 -1
  198. data/man/man8/puppet-module.8 +1 -58
  199. data/man/man8/puppet-node.8 +4 -1
  200. data/man/man8/puppet-parser.8 +1 -1
  201. data/man/man8/puppet-plugin.8 +1 -1
  202. data/man/man8/puppet-report.8 +4 -1
  203. data/man/man8/puppet-resource.8 +1 -1
  204. data/man/man8/puppet-script.8 +1 -1
  205. data/man/man8/puppet-ssl.8 +1 -1
  206. data/man/man8/puppet.8 +2 -2
  207. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  208. data/spec/integration/application/agent_spec.rb +24 -11
  209. data/spec/integration/application/apply_spec.rb +1 -1
  210. data/spec/integration/application/filebucket_spec.rb +16 -16
  211. data/spec/integration/application/help_spec.rb +2 -0
  212. data/spec/integration/application/plugin_spec.rb +23 -1
  213. data/spec/integration/defaults_spec.rb +7 -3
  214. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  215. data/spec/integration/network/http_pool_spec.rb +3 -21
  216. data/spec/integration/parser/catalog_spec.rb +0 -38
  217. data/spec/integration/parser/node_spec.rb +0 -9
  218. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  219. data/spec/integration/type/file_spec.rb +5 -4
  220. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  221. data/spec/integration/util/windows/security_spec.rb +1 -1
  222. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  223. data/spec/lib/puppet_spec/settings.rb +7 -1
  224. data/spec/spec_helper.rb +2 -0
  225. data/spec/unit/agent_spec.rb +0 -2
  226. data/spec/unit/application/config_spec.rb +224 -4
  227. data/spec/unit/application/facts_spec.rb +35 -0
  228. data/spec/unit/application/filebucket_spec.rb +41 -39
  229. data/spec/unit/application/ssl_spec.rb +2 -2
  230. data/spec/unit/certificate_factory_spec.rb +1 -1
  231. data/spec/unit/configurer/downloader_spec.rb +6 -2
  232. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  233. data/spec/unit/configurer_spec.rb +12 -9
  234. data/spec/unit/context/trusted_information_spec.rb +2 -6
  235. data/spec/unit/defaults_spec.rb +77 -28
  236. data/spec/unit/environments_spec.rb +0 -3
  237. data/spec/unit/face/config_spec.rb +27 -32
  238. data/spec/unit/face/facts_spec.rb +4 -0
  239. data/spec/unit/face/plugin_spec.rb +73 -33
  240. data/spec/unit/file_bucket/file_spec.rb +1 -1
  241. data/spec/unit/file_serving/configuration/parser_spec.rb +14 -18
  242. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  243. data/spec/unit/functions/camelcase_spec.rb +1 -1
  244. data/spec/unit/functions/capitalize_spec.rb +1 -1
  245. data/spec/unit/functions/downcase_spec.rb +1 -1
  246. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  247. data/spec/unit/functions/upcase_spec.rb +1 -1
  248. data/spec/unit/http/client_spec.rb +7 -8
  249. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  250. data/spec/unit/http/external_client_spec.rb +4 -4
  251. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  252. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  253. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  254. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  255. data/spec/unit/http/resolver_spec.rb +13 -13
  256. data/spec/unit/http/service/compiler_spec.rb +49 -62
  257. data/spec/unit/http/service/file_server_spec.rb +3 -3
  258. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  259. data/spec/unit/http/service_spec.rb +1 -2
  260. data/spec/unit/http/session_spec.rb +16 -14
  261. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  262. data/spec/unit/indirector/facts/facter_spec.rb +97 -0
  263. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  264. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  265. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  266. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  267. data/spec/unit/indirector/file_server_spec.rb +1 -15
  268. data/spec/unit/indirector/node/json_spec.rb +33 -0
  269. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  270. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  271. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  272. data/spec/unit/indirector/request_spec.rb +0 -264
  273. data/spec/unit/indirector/rest_spec.rb +98 -752
  274. data/spec/unit/network/authconfig_spec.rb +2 -132
  275. data/spec/unit/network/authorization_spec.rb +2 -55
  276. data/spec/unit/network/formats_spec.rb +4 -4
  277. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -97
  278. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  279. data/spec/unit/network/http/api_spec.rb +10 -0
  280. data/spec/unit/network/http/connection_spec.rb +19 -41
  281. data/spec/unit/network/http/handler_spec.rb +0 -6
  282. data/spec/unit/network/http_pool_spec.rb +0 -4
  283. data/spec/unit/node/environment_spec.rb +33 -21
  284. data/spec/unit/node_spec.rb +2 -54
  285. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  287. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  288. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  289. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  290. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  291. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  292. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  293. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  294. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  295. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  296. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  297. data/spec/unit/pops/visitor_spec.rb +1 -1
  298. data/spec/unit/provider/nameservice_spec.rb +0 -57
  299. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  300. data/spec/unit/provider/package/gem_spec.rb +32 -0
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  302. data/spec/unit/provider/service/smf_spec.rb +401 -165
  303. data/spec/unit/provider/service/windows_spec.rb +0 -1
  304. data/spec/unit/provider_spec.rb +0 -12
  305. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  306. data/spec/unit/resource/type_collection_spec.rb +2 -22
  307. data/spec/unit/resource_spec.rb +0 -56
  308. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  309. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  310. data/spec/unit/settings/port_setting_spec.rb +31 -0
  311. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  312. data/spec/unit/settings_spec.rb +423 -236
  313. data/spec/unit/ssl/base_spec.rb +36 -3
  314. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  315. data/spec/unit/ssl/certificate_spec.rb +2 -11
  316. data/spec/unit/ssl/ssl_provider_spec.rb +11 -8
  317. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  318. data/spec/unit/ssl/verifier_spec.rb +0 -21
  319. data/spec/unit/transaction/report_spec.rb +0 -2
  320. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  321. data/spec/unit/transaction_spec.rb +45 -79
  322. data/spec/unit/type/file/checksum_spec.rb +6 -6
  323. data/spec/unit/type/file/content_spec.rb +1 -1
  324. data/spec/unit/type/file/ensure_spec.rb +1 -1
  325. data/spec/unit/type/file/mode_spec.rb +1 -1
  326. data/spec/unit/type/file/source_spec.rb +0 -1
  327. data/spec/unit/type/file_spec.rb +12 -6
  328. data/spec/unit/type/package_spec.rb +1 -1
  329. data/spec/unit/type_spec.rb +20 -0
  330. data/spec/unit/util/backups_spec.rb +0 -2
  331. data/spec/unit/util/execution_spec.rb +0 -29
  332. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  333. data/spec/unit/util/rubygems_spec.rb +2 -2
  334. data/spec/unit/util/run_mode_spec.rb +21 -121
  335. data/spec/unit/util/windows/string_spec.rb +1 -3
  336. data/spec/unit/util/yaml_spec.rb +0 -54
  337. data/spec/unit/util_spec.rb +0 -18
  338. metadata +50 -232
  339. data/conf/auth.conf +0 -150
  340. data/lib/puppet/application/cert.rb +0 -76
  341. data/lib/puppet/application/key.rb +0 -4
  342. data/lib/puppet/application/man.rb +0 -4
  343. data/lib/puppet/application/status.rb +0 -4
  344. data/lib/puppet/face/key.rb +0 -16
  345. data/lib/puppet/face/man.rb +0 -145
  346. data/lib/puppet/face/module/build.rb +0 -14
  347. data/lib/puppet/face/module/generate.rb +0 -14
  348. data/lib/puppet/face/module/search.rb +0 -103
  349. data/lib/puppet/face/status.rb +0 -51
  350. data/lib/puppet/indirector/certificate/file.rb +0 -9
  351. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  352. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  353. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  354. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  355. data/lib/puppet/indirector/file_content/http.rb +0 -22
  356. data/lib/puppet/indirector/key/file.rb +0 -46
  357. data/lib/puppet/indirector/key/memory.rb +0 -7
  358. data/lib/puppet/indirector/ssl_file.rb +0 -162
  359. data/lib/puppet/indirector/status.rb +0 -3
  360. data/lib/puppet/indirector/status/local.rb +0 -12
  361. data/lib/puppet/indirector/status/rest.rb +0 -27
  362. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  363. data/lib/puppet/network/auth_config_parser.rb +0 -90
  364. data/lib/puppet/network/authstore.rb +0 -283
  365. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  366. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  367. data/lib/puppet/network/http/base_pool.rb +0 -36
  368. data/lib/puppet/network/http/compression.rb +0 -127
  369. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  370. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  371. data/lib/puppet/network/rest_controller.rb +0 -2
  372. data/lib/puppet/network/rights.rb +0 -210
  373. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  374. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  375. data/lib/puppet/parser/environment_compiler.rb +0 -202
  376. data/lib/puppet/pops/types/enumeration.rb +0 -16
  377. data/lib/puppet/resource/capability_finder.rb +0 -154
  378. data/lib/puppet/rest/errors.rb +0 -15
  379. data/lib/puppet/rest/response.rb +0 -35
  380. data/lib/puppet/rest/route.rb +0 -85
  381. data/lib/puppet/rest/routes.rb +0 -135
  382. data/lib/puppet/ssl/host.rb +0 -505
  383. data/lib/puppet/ssl/key.rb +0 -61
  384. data/lib/puppet/ssl/validator.rb +0 -61
  385. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  386. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  387. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  388. data/lib/puppet/status.rb +0 -40
  389. data/lib/puppet/util/connection.rb +0 -88
  390. data/lib/puppet/util/ssl.rb +0 -83
  391. data/lib/puppet/util/windows/api_types.rb +0 -309
  392. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  393. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  394. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  395. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  396. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  397. data/lib/puppet/vendor/pathspec/README.md +0 -53
  398. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  399. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  400. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  401. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  402. data/man/man8/puppet-key.8 +0 -126
  403. data/man/man8/puppet-man.8 +0 -76
  404. data/man/man8/puppet-status.8 +0 -108
  405. data/spec/integration/application/config_spec.rb +0 -74
  406. data/spec/integration/network/authconfig_spec.rb +0 -256
  407. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  408. data/spec/unit/application/man_spec.rb +0 -52
  409. data/spec/unit/capability_spec.rb +0 -414
  410. data/spec/unit/face/catalog_spec.rb +0 -6
  411. data/spec/unit/face/key_spec.rb +0 -9
  412. data/spec/unit/face/module/search_spec.rb +0 -231
  413. data/spec/unit/face/module_spec.rb +0 -3
  414. data/spec/unit/face/status_spec.rb +0 -9
  415. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  416. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  417. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  418. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  419. data/spec/unit/indirector/key/file_spec.rb +0 -79
  420. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  421. data/spec/unit/indirector/status/local_spec.rb +0 -10
  422. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  423. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  424. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  425. data/spec/unit/network/authstore_spec.rb +0 -422
  426. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  427. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  428. data/spec/unit/network/http/compression_spec.rb +0 -240
  429. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  430. data/spec/unit/network/http_spec.rb +0 -9
  431. data/spec/unit/network/rights_spec.rb +0 -439
  432. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  433. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  434. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  435. data/spec/unit/rest/route_spec.rb +0 -132
  436. data/spec/unit/ssl/host_spec.rb +0 -650
  437. data/spec/unit/ssl/key_spec.rb +0 -173
  438. data/spec/unit/ssl/validator_spec.rb +0 -278
  439. data/spec/unit/status_spec.rb +0 -45
  440. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -6,95 +6,74 @@ require 'puppet/application_support'
6
6
 
7
7
  module Puppet
8
8
 
9
- # This class handles all the aspects of a Puppet application/executable
10
- # * setting up options
11
- # * setting up logs
12
- # * choosing what to run
13
- # * representing execution status
9
+ # Defines an abstract Puppet application.
14
10
  #
15
- # === Usage
16
- # An application is a subclass of Puppet::Application.
17
- #
18
- # For legacy compatibility,
19
- # Puppet::Application[:example].run
20
- # is equivalent to
21
- # Puppet::Application::Example.new.run
11
+ # # Usage
22
12
  #
13
+ # To create a new application extend `Puppet::Application`. Derived applications
14
+ # must implement the `main` method and should implement the `summary` and
15
+ # `help` methods in order to be included in `puppet help`, and should define
16
+ # application-specific options. For example:
23
17
  #
18
+ # ```
24
19
  # class Puppet::Application::Example < Puppet::Application
25
20
  #
26
- # def preinit
27
- # # perform some pre initialization
28
- # @all = false
29
- # end
30
- #
31
- # # run_command is called to actually run the specified command
32
- # def run_command
33
- # send Puppet::Util::CommandLine.new.args.shift
34
- # end
21
+ # def summary
22
+ # "My puppet example application"
23
+ # end
35
24
  #
36
- # # option uses metaprogramming to create a method
37
- # # and also tells the option parser how to invoke that method
38
- # option("--arg ARGUMENT") do |v|
39
- # @args << v
40
- # end
25
+ # def help
26
+ # <<~HELP
27
+ # puppet-example(8) -- #{summary}
28
+ # ...
29
+ # HELP
30
+ # end
41
31
  #
42
- # option("--debug", "-d") do |v|
43
- # @debug = v
44
- # end
32
+ # # define arg with a required option
33
+ # option("--arg ARGUMENT") do |v|
34
+ # options[:arg] = v
35
+ # end
45
36
  #
46
- # option("--all", "-a:) do |v|
47
- # @all = v
48
- # end
37
+ # # define arg with an optional option
38
+ # option("--maybe [ARGUMENT]") do |v|
39
+ # options[:maybe] = v
40
+ # end
49
41
  #
50
- # def handle_unknown(opt,arg)
51
- # # last chance to manage an option
52
- # ...
53
- # # let's say to the framework we finally handle this option
54
- # true
55
- # end
42
+ # # define long and short arg
43
+ # option("--all", "-a")
56
44
  #
57
- # def read
58
- # # read action
59
- # end
45
+ # def initialize(command_line = Puppet::Util::CommandLine.new)
46
+ # super
47
+ # @data = {}
48
+ # end
60
49
  #
61
- # def write
62
- # # writeaction
63
- # end
64
- #
65
- # end
50
+ # def main
51
+ # # call action
52
+ # send(@command_line.args.shift)
53
+ # end
66
54
  #
67
- # === Preinit
68
- # The preinit block is the first code to be called in your application, before option parsing,
69
- # setup or command execution.
55
+ # def read
56
+ # # read action
57
+ # end
70
58
  #
71
- # === Options
72
- # Puppet::Application uses +OptionParser+ to manage the application options.
73
- # Options are defined with the +option+ method to which are passed various
74
- # arguments, including the long option, the short option, a description...
75
- # Refer to +OptionParser+ documentation for the exact format.
76
- # * If the option method is given a block, this one will be called whenever
77
- # the option is encountered in the command-line argument.
78
- # * If the option method has no block, a default functionality will be used, that
79
- # stores the argument (or true/false if the option doesn't require an argument) in
80
- # the global (to the application) options array.
81
- # * If a given option was not defined by a the +option+ method, but it exists as a Puppet settings:
82
- # * if +unknown+ was used with a block, it will be called with the option name and argument
83
- # * if +unknown+ wasn't used, then the option/argument is handed to Puppet.settings.handlearg for
84
- # a default behavior
59
+ # def write
60
+ # # write action
61
+ # end
85
62
  #
86
- # --help is managed directly by the Puppet::Application class, but can be overridden.
63
+ # end
64
+ # ```
87
65
  #
88
- # === Setup
89
- # Applications can use the setup block to perform any initialization.
90
- # The default +setup+ behaviour is to: read Puppet configuration and manage log level and destination
66
+ # Puppet defines the following application lifecycle methods that are called in
67
+ # the following order:
91
68
  #
92
- # === What and how to run
93
- # If the +dispatch+ block is defined it is called. This block should return the name of the registered command
94
- # to be run.
95
- # If it doesn't exist, it defaults to execute the +main+ command if defined.
69
+ # * {#initialize}
70
+ # * {#initialize_app_defaults}
71
+ # * {#preinit}
72
+ # * {#parse_options}
73
+ # * {#setup}
74
+ # * {#main}
96
75
  #
97
- # === Execution state
76
+ # ## Execution state
98
77
  # The class attributes/methods of Puppet::Application serve as a global place to set and query the execution
99
78
  # status of the application: stopping, restarting, etc. The setting of the application status does not directly
100
79
  # affect its running status; it's assumed that the various components within the application will consult these
@@ -104,21 +83,27 @@ module Puppet
104
83
  #
105
84
  # So, if something in your application needs to stop the process, for some reason, you might consider:
106
85
  #
86
+ # ```
107
87
  # def stop_me!
108
- # # indicate that we're stopping
109
- # Puppet::Application.stop!
110
- # # ...do stuff...
88
+ # # indicate that we're stopping
89
+ # Puppet::Application.stop!
90
+ # # ...do stuff...
111
91
  # end
92
+ # ```
112
93
  #
113
94
  # And, if you have some component that involves a long-running process, you might want to consider:
114
95
  #
96
+ # ```
115
97
  # def my_long_process(giant_list_to_munge)
116
- # giant_list_to_munge.collect do |member|
117
- # # bail if we're stopping
118
- # return if Puppet::Application.stop_requested?
119
- # process_member(member)
120
- # end
98
+ # giant_list_to_munge.collect do |member|
99
+ # # bail if we're stopping
100
+ # return if Puppet::Application.stop_requested?
101
+ # process_member(member)
102
+ # end
121
103
  # end
104
+ # ```
105
+ # @abstract
106
+ # @api public
122
107
  class Application
123
108
  require 'puppet/util'
124
109
  include Puppet::Util
@@ -137,34 +122,42 @@ class Application
137
122
  self.run_status = nil
138
123
  end
139
124
 
125
+ # Signal that the application should stop.
126
+ # @api public
140
127
  def stop!
141
128
  self.run_status = :stop_requested
142
129
  end
143
130
 
131
+ # Signal that the application should restart.
132
+ # @api public
144
133
  def restart!
145
134
  self.run_status = :restart_requested
146
135
  end
147
136
 
148
137
  # Indicates that Puppet::Application.restart! has been invoked and components should
149
138
  # do what is necessary to facilitate a restart.
139
+ # @api public
150
140
  def restart_requested?
151
141
  :restart_requested == run_status
152
142
  end
153
143
 
154
144
  # Indicates that Puppet::Application.stop! has been invoked and components should do what is necessary
155
145
  # for a clean stop.
146
+ # @api public
156
147
  def stop_requested?
157
148
  :stop_requested == run_status
158
149
  end
159
150
 
160
151
  # Indicates that one of stop! or start! was invoked on Puppet::Application, and some kind of process
161
152
  # shutdown/short-circuit may be necessary.
153
+ # @api public
162
154
  def interrupted?
163
155
  [:restart_requested, :stop_requested].include? run_status
164
156
  end
165
157
 
166
158
  # Indicates that Puppet::Application believes that it's in usual running run_mode (no stop/restart request
167
159
  # currently active).
160
+ # @api public
168
161
  def clear?
169
162
  run_status.nil?
170
163
  end
@@ -270,14 +263,21 @@ class Application
270
263
  end
271
264
  private :try_load_class
272
265
 
266
+ # Return an instance of the specified application.
267
+ #
268
+ # @param [Symbol] name the lowercase name of the application
269
+ # @return [Puppet::Application] an instance of the specified name
270
+ # @raise [Puppet::Error] if the application class was not found.
271
+ # @raise [LoadError] if there was a problem loading the application file.
272
+ # @api public
273
273
  def [](name)
274
274
  find(name).new
275
275
  end
276
276
 
277
277
  # Sets or gets the run_mode name. Sets the run_mode name if a mode_name is
278
278
  # passed. Otherwise, gets the run_mode or a default run_mode
279
- #
280
- def run_mode( mode_name = nil)
279
+ # @api public
280
+ def run_mode(mode_name = nil)
281
281
  if mode_name
282
282
  Puppet.settings.preferred_run_mode = mode_name
283
283
  end
@@ -288,12 +288,19 @@ class Application
288
288
  @run_mode = Puppet::Util::RunMode[ mode_name || Puppet.settings.preferred_run_mode ]
289
289
  end
290
290
 
291
- # Sets environment_mode name
291
+ # Sets environment_mode name. When acting as a compiler, the environment mode
292
+ # should be `:local` since the directory must exist to compile the catalog.
293
+ # When acting as an agent, the environment mode should be `:remote` since
294
+ # the Puppet[:environment] setting refers to an environment directoy on a remote
295
+ # system. The `:not_required` mode is for cases where the application does not
296
+ # need an environment to run.
297
+ #
292
298
  # @param mode_name [Symbol] The name of the environment mode to run in. May
293
- # be one of :local, :remote, or :not_required. This impacts where the
294
- # application looks for its specified environment. If :not_required or
295
- # :remote are set, the application will not fail if the environment does
299
+ # be one of `:local`, `:remote`, or `:not_required`. This impacts where the
300
+ # application looks for its specified environment. If `:not_required` or
301
+ # `:remote` are set, the application will not fail if the environment does
296
302
  # not exist on the local filesystem.
303
+ # @api public
297
304
  def environment_mode(mode_name)
298
305
  raise Puppet::Error, _("Invalid environment mode '%{mode_name}'") % { mode_name: mode_name } unless [:local, :remote, :not_required].include?(mode_name)
299
306
  @environment_mode = mode_name
@@ -301,11 +308,14 @@ class Application
301
308
 
302
309
  # Gets environment_mode name. If none is set with `environment_mode=`,
303
310
  # default to :local.
311
+ # @return [Symbol] The current environment mode
312
+ # @api public
304
313
  def get_environment_mode
305
314
  @environment_mode || :local
306
315
  end
307
316
 
308
317
  # This is for testing only
318
+ # @api public
309
319
  def clear_everything_for_tests
310
320
  @run_mode = @banner = @run_status = @option_parser_commands = nil
311
321
  end
@@ -327,37 +337,66 @@ class Application
327
337
  exit(0)
328
338
  end
329
339
 
330
- def app_defaults()
340
+ # Initialize the application receiving the {Puppet::Util::CommandLine} object
341
+ # containing the application name and arguments.
342
+ #
343
+ # @param command_line [Puppet::Util::CommandLine] An instance of the command line to create the application with
344
+ # @api public
345
+ def initialize(command_line = Puppet::Util::CommandLine.new)
346
+ @command_line = CommandLineArgs.new(command_line.subcommand_name, command_line.args.dup)
347
+ @options = {}
348
+ end
349
+
350
+ # Now that the `run_mode` has been resolved, return default settings for the
351
+ # application. Note these values may be overridden when puppet's configuration
352
+ # is loaded later.
353
+ #
354
+ # @example To override the facts terminus:
355
+ # def app_defaults
356
+ # super.merge({
357
+ # :facts_terminus => 'yaml'
358
+ # })
359
+ # end
360
+ #
361
+ # @return [Hash<String, String>] default application settings
362
+ # @api public
363
+ def app_defaults
331
364
  Puppet::Settings.app_defaults_for_run_mode(self.class.run_mode).merge(
332
365
  :name => name
333
366
  )
334
367
  end
335
368
 
369
+ # Initialize application defaults. It's usually not necessary to override this method.
370
+ # @return [void]
371
+ # @api public
336
372
  def initialize_app_defaults()
337
373
  Puppet.settings.initialize_app_defaults(app_defaults)
338
374
  end
339
375
 
340
- # override to execute code before running anything else
376
+ # The preinit block is the first code to be called in your application, after
377
+ # `initialize`, but before option parsing, setup or command execution. It is
378
+ # usually not necessary to override this method.
379
+ # @return [void]
380
+ # @api public
341
381
  def preinit
342
382
  end
343
383
 
344
- def initialize(command_line = Puppet::Util::CommandLine.new)
345
- @command_line = CommandLineArgs.new(command_line.subcommand_name, command_line.args.dup)
346
- @options = {}
347
- end
348
-
349
- # call in setup of subclass to deprecate an application
384
+ # Call in setup of subclass to deprecate an application.
385
+ # @return [void]
386
+ # @api public
350
387
  def deprecate
351
388
  @deprecated = true
352
389
  end
353
390
 
391
+ # Return true if this application is deprecated.
392
+ # @api public
354
393
  def deprecated?
355
394
  @deprecated
356
395
  end
357
396
 
358
- # Execute the application.
359
- # @api public
397
+ # Execute the application. This method should not be overridden.
360
398
  # @return [void]
399
+ # @api public
361
400
  def run
362
401
 
363
402
  # I don't really like the names of these lifecycle phases. It would be nice to change them to some more meaningful
@@ -382,18 +421,34 @@ class Application
382
421
  exit_on_fail(_("Could not run")) { run_command }
383
422
  end
384
423
 
424
+ # This method must be overridden and perform whatever action is required for
425
+ # the application. The `command_line` reader contains the actions and
426
+ # arguments.
427
+ # @return [void]
428
+ # @api public
385
429
  def main
386
430
  raise NotImplementedError, _("No valid command or main")
387
431
  end
388
432
 
433
+ # Run the application. By default, it calls {#main}.
434
+ # @return [void]
435
+ # @api public
389
436
  def run_command
390
437
  main
391
438
  end
392
439
 
440
+ # Setup the application. It is usually not necessary to override this method.
441
+ # @return [void]
442
+ # @api public
393
443
  def setup
394
444
  setup_logs
395
445
  end
396
446
 
447
+ # Setup logging. By default the `console` log destination will only be created
448
+ # if `debug` or `verbose` is specified on the command line. Override to customize
449
+ # the logging behavior.
450
+ # @return [void]
451
+ # @api public
397
452
  def setup_logs
398
453
  handle_logdest_arg(Puppet[:logdest]) if !options[:setdest]
399
454
 
@@ -436,11 +491,10 @@ class Application
436
491
  # Output basic information about the runtime environment for debugging
437
492
  # purposes.
438
493
  #
439
- # @api public
440
- #
441
494
  # @param extra_info [Hash{String => #to_s}] a flat hash of extra information
442
495
  # to log. Intended to be passed to super by subclasses.
443
496
  # @return [void]
497
+ # @api public
444
498
  def log_runtime_environment(extra_info=nil)
445
499
  runtime_info = {
446
500
  'puppet_version' => Puppet.version,
@@ -453,6 +507,21 @@ class Application
453
507
  Puppet.debug 'Runtime environment: ' + runtime_info.map{|k,v| k + '=' + v.to_s}.join(', ')
454
508
  end
455
509
 
510
+ # Options defined with the `option` method are parsed from settings and the command line.
511
+ # Refer to {OptionParser} documentation for the exact format. Options are parsed as follows:
512
+ #
513
+ # * If the option method is given a block, then it will be called whenever the option is encountered in the command-line argument.
514
+ # * If the option method has no block, then the default option handler will store the argument in the `options` instance variable.
515
+ # * If a given option was not defined by an `option` method, but it exists as a Puppet setting:
516
+ # * if `unknown` was used with a block, it will be called with the option name and argument.
517
+ # * if `unknown` wasn't used, then the option/argument is handed to Puppet.settings.handlearg for
518
+ # a default behavior.
519
+ # * The `-h` and `--help` options are automatically handled by the command line before creating the application.
520
+ #
521
+ # Options specified on the command line override settings. It is usually not
522
+ # necessary to override this method.
523
+ # @return [void]
524
+ # @api public
456
525
  def parse_options
457
526
  # Create an option parser
458
527
  option_parser = OptionParser.new(self.class.banner)
@@ -500,6 +569,9 @@ class Application
500
569
  self.class.to_s.sub(/.*::/,"").downcase.to_sym
501
570
  end
502
571
 
572
+ # Return the text to display when running `puppet help`.
573
+ # @return [String] The help to display
574
+ # @api public
503
575
  def help
504
576
  _("No help available for puppet %{app_name}") % { app_name: name }
505
577
  end
@@ -507,6 +579,8 @@ class Application
507
579
  # The description used in top level `puppet help` output
508
580
  # If left empty in implementations, we will attempt to extract
509
581
  # the summary from the help text itself.
582
+ # @return [String]
583
+ # @api public
510
584
  def summary
511
585
  ""
512
586
  end
@@ -259,119 +259,115 @@ Licensed under the Apache 2.0 License
259
259
  end
260
260
  end
261
261
  devices.collect do |devicename,device|
262
- pool = Puppet.runtime[:http].pool
263
- Puppet.override(:http_pool => pool) do
264
- # TODO when we drop support for ruby < 2.5 we can remove the extra block here
265
- begin
266
- device_url = URI.parse(device.url)
267
- # Handle nil scheme & port
268
- scheme = "#{device_url.scheme}://" if device_url.scheme
269
- port = ":#{device_url.port}" if device_url.port
270
-
271
- # override local $vardir and $certname
272
- Puppet[:ssldir] = ::File.join(Puppet[:deviceconfdir], device.name, 'ssl')
273
- Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
274
- Puppet[:libdir] = options[:libdir] || ::File.join(Puppet[:devicedir], device.name, 'lib')
275
- Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
276
- Puppet[:certname] = device.name
277
- ssl_context = nil
278
-
279
- # create device directory under $deviceconfdir
280
- Puppet::FileSystem.dir_mkpath(Puppet[:ssldir]) unless Puppet::FileSystem.dir_exist?(Puppet[:ssldir])
281
-
282
- # this will reload and recompute default settings and create device-specific sub vardir
283
- Puppet.settings.use :main, :agent, :ssl
284
-
285
- # Workaround for PUP-8736: store ssl certs outside the cache directory to prevent accidental removal and keep the old path as symlink
286
- optssldir = File.join(Puppet[:confdir], 'ssl')
287
- Puppet::FileSystem.symlink(Puppet[:ssldir], optssldir) unless Puppet::FileSystem.exist?(optssldir)
288
-
289
- unless options[:resource] || options[:facts] || options[:apply]
290
- # Since it's too complicated to fix properly in the default settings, we workaround for PUP-9642 here.
291
- # See https://github.com/puppetlabs/puppet/pull/7483#issuecomment-483455997 for details.
292
- # This has to happen after `settings.use` above, so the directory is created and before `setup_host` below, where the SSL
293
- # routines would fail with access errors
294
- if Puppet.features.root? && !Puppet::Util::Platform.windows?
295
- user = Puppet::Type.type(:user).new(name: Puppet[:user]).exists? ? Puppet[:user] : nil
296
- group = Puppet::Type.type(:group).new(name: Puppet[:group]).exists? ? Puppet[:group] : nil
297
- Puppet.debug("Fixing perms for #{user}:#{group} on #{Puppet[:confdir]}")
298
- FileUtils.chown(user, group, Puppet[:confdir]) if user || group
299
- end
262
+ # TODO when we drop support for ruby < 2.5 we can remove the extra block here
263
+ begin
264
+ device_url = URI.parse(device.url)
265
+ # Handle nil scheme & port
266
+ scheme = "#{device_url.scheme}://" if device_url.scheme
267
+ port = ":#{device_url.port}" if device_url.port
268
+
269
+ # override local $vardir and $certname
270
+ Puppet[:ssldir] = ::File.join(Puppet[:deviceconfdir], device.name, 'ssl')
271
+ Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
272
+ Puppet[:libdir] = options[:libdir] || ::File.join(Puppet[:devicedir], device.name, 'lib')
273
+ Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
274
+ Puppet[:certname] = device.name
275
+ ssl_context = nil
276
+
277
+ # create device directory under $deviceconfdir
278
+ Puppet::FileSystem.dir_mkpath(Puppet[:ssldir]) unless Puppet::FileSystem.dir_exist?(Puppet[:ssldir])
279
+
280
+ # this will reload and recompute default settings and create device-specific sub vardir
281
+ Puppet.settings.use :main, :agent, :ssl
282
+
283
+ # Workaround for PUP-8736: store ssl certs outside the cache directory to prevent accidental removal and keep the old path as symlink
284
+ optssldir = File.join(Puppet[:confdir], 'ssl')
285
+ Puppet::FileSystem.symlink(Puppet[:ssldir], optssldir) unless Puppet::FileSystem.exist?(optssldir)
286
+
287
+ unless options[:resource] || options[:facts] || options[:apply]
288
+ # Since it's too complicated to fix properly in the default settings, we workaround for PUP-9642 here.
289
+ # See https://github.com/puppetlabs/puppet/pull/7483#issuecomment-483455997 for details.
290
+ # This has to happen after `settings.use` above, so the directory is created and before `setup_host` below, where the SSL
291
+ # routines would fail with access errors
292
+ if Puppet.features.root? && !Puppet::Util::Platform.windows?
293
+ user = Puppet::Type.type(:user).new(name: Puppet[:user]).exists? ? Puppet[:user] : nil
294
+ group = Puppet::Type.type(:group).new(name: Puppet[:group]).exists? ? Puppet[:group] : nil
295
+ Puppet.debug("Fixing perms for #{user}:#{group} on #{Puppet[:confdir]}")
296
+ FileUtils.chown(user, group, Puppet[:confdir]) if user || group
297
+ end
300
298
 
301
- ssl_context = setup_context
299
+ ssl_context = setup_context
302
300
 
303
- unless options[:libdir]
304
- Puppet.override(ssl_context: ssl_context) do
305
- Puppet::Configurer::PluginHandler.new.download_plugins(env) if Puppet::Configurer.should_pluginsync?
306
- end
301
+ unless options[:libdir]
302
+ Puppet.override(ssl_context: ssl_context) do
303
+ Puppet::Configurer::PluginHandler.new.download_plugins(env) if Puppet::Configurer.should_pluginsync?
307
304
  end
308
305
  end
306
+ end
309
307
 
310
- # this inits the device singleton, so that the facts terminus
311
- # and the various network_device provider can use it
312
- Puppet::Util::NetworkDevice.init(device)
313
-
314
- if options[:resource]
315
- type, name = parse_args(command_line.args)
316
- Puppet.info _("retrieving resource: %{resource} from %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { resource: type, target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
317
- resources = find_resources(type, name)
318
- if options[:to_yaml]
319
- data = resources.map do |resource|
320
- resource.prune_parameters(:parameters_to_include => @extra_params).to_hiera_hash
321
- end.inject(:merge!)
322
- text = YAML.dump(type.downcase => data)
323
- else
324
- text = resources.map do |resource|
325
- resource.prune_parameters(:parameters_to_include => @extra_params).to_manifest.force_encoding(Encoding.default_external)
326
- end.join("\n")
327
- end
328
- (puts text)
329
- 0
330
- elsif options[:facts]
331
- Puppet.info _("retrieving facts from %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { resource: type, target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
332
- remote_facts = Puppet::Node::Facts.indirection.find(name, :environment => env)
333
- # Give a proper name to the facts
334
- remote_facts.name = remote_facts.values['clientcert']
335
- renderer = Puppet::Network::FormatHandler.format(:console)
336
- puts renderer.render(remote_facts)
337
- 0
338
- elsif options[:apply]
339
- # avoid reporting to server
340
- Puppet::Transaction::Report.indirection.terminus_class = :yaml
341
- Puppet::Resource::Catalog.indirection.cache_class = nil
342
-
343
- require 'puppet/application/apply'
344
- begin
345
- Puppet[:node_terminus] = :plain
346
- Puppet[:catalog_terminus] = :compiler
347
- Puppet[:catalog_cache_terminus] = nil
348
- Puppet[:facts_terminus] = :network_device
349
- Puppet.override(:network_device => true) do
350
- Puppet::Application::Apply.new(Puppet::Util::CommandLine.new('puppet', ["apply", options[:apply]])).run_command
351
- end
352
- end
308
+ # this inits the device singleton, so that the facts terminus
309
+ # and the various network_device provider can use it
310
+ Puppet::Util::NetworkDevice.init(device)
311
+
312
+ if options[:resource]
313
+ type, name = parse_args(command_line.args)
314
+ Puppet.info _("retrieving resource: %{resource} from %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { resource: type, target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
315
+ resources = find_resources(type, name)
316
+ if options[:to_yaml]
317
+ data = resources.map do |resource|
318
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_hiera_hash
319
+ end.inject(:merge!)
320
+ text = YAML.dump(type.downcase => data)
353
321
  else
354
- Puppet.info _("starting applying configuration to %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
355
-
356
- overrides = {}
357
- overrides[:ssl_context] = ssl_context if ssl_context
358
- Puppet.override(overrides) do
359
- configurer = Puppet::Configurer.new
360
- configurer.run(:network_device => true, :pluginsync => false)
322
+ text = resources.map do |resource|
323
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_manifest.force_encoding(Encoding.default_external)
324
+ end.join("\n")
325
+ end
326
+ (puts text)
327
+ 0
328
+ elsif options[:facts]
329
+ Puppet.info _("retrieving facts from %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { resource: type, target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
330
+ remote_facts = Puppet::Node::Facts.indirection.find(name, :environment => env)
331
+ # Give a proper name to the facts
332
+ remote_facts.name = remote_facts.values['clientcert']
333
+ renderer = Puppet::Network::FormatHandler.format(:console)
334
+ puts renderer.render(remote_facts)
335
+ 0
336
+ elsif options[:apply]
337
+ # avoid reporting to server
338
+ Puppet::Transaction::Report.indirection.terminus_class = :yaml
339
+ Puppet::Resource::Catalog.indirection.cache_class = nil
340
+
341
+ require 'puppet/application/apply'
342
+ begin
343
+ Puppet[:node_terminus] = :plain
344
+ Puppet[:catalog_terminus] = :compiler
345
+ Puppet[:catalog_cache_terminus] = nil
346
+ Puppet[:facts_terminus] = :network_device
347
+ Puppet.override(:network_device => true) do
348
+ Puppet::Application::Apply.new(Puppet::Util::CommandLine.new('puppet', ["apply", options[:apply]])).run_command
361
349
  end
362
350
  end
363
- rescue => detail
364
- Puppet.log_exception(detail)
365
- # If we rescued an error, then we return 1 as the exit code
366
- 1
367
- ensure
368
- pool.close
369
- Puppet[:libdir] = libdir
370
- Puppet[:vardir] = vardir
371
- Puppet[:confdir] = confdir
372
- Puppet[:ssldir] = ssldir
373
- Puppet[:certname] = certname
351
+ else
352
+ Puppet.info _("starting applying configuration to %{target} at %{scheme}%{url_host}%{port}%{url_path}") % { target: device.name, scheme: scheme, url_host: device_url.host, port: port, url_path: device_url.path }
353
+
354
+ overrides = {}
355
+ overrides[:ssl_context] = ssl_context if ssl_context
356
+ Puppet.override(overrides) do
357
+ configurer = Puppet::Configurer.new
358
+ configurer.run(:network_device => true, :pluginsync => false)
359
+ end
374
360
  end
361
+ rescue => detail
362
+ Puppet.log_exception(detail)
363
+ # If we rescued an error, then we return 1 as the exit code
364
+ 1
365
+ ensure
366
+ Puppet[:libdir] = libdir
367
+ Puppet[:vardir] = vardir
368
+ Puppet[:confdir] = confdir
369
+ Puppet[:ssldir] = ssldir
370
+ Puppet[:certname] = certname
375
371
  end
376
372
  end
377
373
  end