puppet 6.20.0-x64-mingw32 → 7.4.0-x64-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 (430) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/Gemfile.lock +13 -13
  4. data/README.md +1 -1
  5. data/conf/fileserver.conf +5 -10
  6. data/ext/build_defaults.yaml +1 -2
  7. data/ext/osx/file_mapping.yaml +0 -5
  8. data/ext/project_data.yaml +2 -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 +13 -9
  16. data/lib/puppet/application/ssl.rb +1 -1
  17. data/lib/puppet/configurer.rb +27 -29
  18. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  19. data/lib/puppet/defaults.rb +57 -162
  20. data/lib/puppet/environments.rb +8 -23
  21. data/lib/puppet/face/facts.rb +73 -49
  22. data/lib/puppet/face/help.rb +1 -1
  23. data/lib/puppet/face/node/clean.rb +8 -0
  24. data/lib/puppet/face/plugin.rb +5 -8
  25. data/lib/puppet/ffi/windows.rb +12 -0
  26. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  27. data/lib/puppet/ffi/windows/constants.rb +404 -0
  28. data/lib/puppet/ffi/windows/functions.rb +628 -0
  29. data/lib/puppet/ffi/windows/structs.rb +338 -0
  30. data/lib/puppet/file_serving/configuration.rb +0 -5
  31. data/lib/puppet/file_serving/configuration/parser.rb +6 -32
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount.rb +1 -2
  34. data/lib/puppet/forge/repository.rb +0 -1
  35. data/lib/puppet/generate/models/type/type.rb +4 -1
  36. data/lib/puppet/http.rb +22 -13
  37. data/lib/puppet/http/client.rb +164 -114
  38. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  39. data/lib/puppet/http/errors.rb +16 -0
  40. data/lib/puppet/http/external_client.rb +5 -7
  41. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  42. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  43. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  44. data/lib/puppet/http/proxy.rb +137 -0
  45. data/lib/puppet/http/redirector.rb +4 -12
  46. data/lib/puppet/http/resolver.rb +5 -15
  47. data/lib/puppet/http/resolver/server_list.rb +6 -10
  48. data/lib/puppet/http/resolver/settings.rb +4 -7
  49. data/lib/puppet/http/resolver/srv.rb +7 -11
  50. data/lib/puppet/http/response.rb +36 -54
  51. data/lib/puppet/http/response_converter.rb +24 -0
  52. data/lib/puppet/http/response_net_http.rb +42 -0
  53. data/lib/puppet/http/retry_after_handler.rb +4 -13
  54. data/lib/puppet/http/service.rb +12 -26
  55. data/lib/puppet/http/service/ca.rb +11 -22
  56. data/lib/puppet/http/service/compiler.rb +22 -69
  57. data/lib/puppet/http/service/file_server.rb +18 -27
  58. data/lib/puppet/http/service/puppetserver.rb +26 -12
  59. data/lib/puppet/http/service/report.rb +8 -10
  60. data/lib/puppet/http/session.rb +11 -20
  61. data/lib/puppet/{network/http → http}/site.rb +1 -2
  62. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  63. data/lib/puppet/indirector/facts/facter.rb +25 -3
  64. data/lib/puppet/indirector/facts/rest.rb +3 -22
  65. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  66. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  67. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  68. data/lib/puppet/indirector/file_server.rb +1 -8
  69. data/lib/puppet/indirector/generic_http.rb +0 -11
  70. data/lib/puppet/indirector/node/rest.rb +2 -4
  71. data/lib/puppet/indirector/report/rest.rb +3 -8
  72. data/lib/puppet/indirector/request.rb +0 -101
  73. data/lib/puppet/indirector/rest.rb +12 -263
  74. data/lib/puppet/module_tool/applications.rb +0 -1
  75. data/lib/puppet/network/authconfig.rb +2 -96
  76. data/lib/puppet/network/authorization.rb +13 -35
  77. data/lib/puppet/network/formats.rb +67 -0
  78. data/lib/puppet/network/http.rb +3 -3
  79. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  80. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  81. data/lib/puppet/network/http/connection.rb +247 -316
  82. data/lib/puppet/network/http/handler.rb +0 -1
  83. data/lib/puppet/network/http_pool.rb +16 -34
  84. data/lib/puppet/node.rb +1 -30
  85. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  86. data/lib/puppet/pal/pal_impl.rb +3 -1
  87. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  88. data/lib/puppet/parser/compiler.rb +0 -198
  89. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  90. data/lib/puppet/parser/resource.rb +0 -69
  91. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  92. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  93. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  94. data/lib/puppet/pops/issues.rb +0 -5
  95. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  96. data/lib/puppet/pops/model/ast.pp +0 -42
  97. data/lib/puppet/pops/model/ast.rb +0 -290
  98. data/lib/puppet/pops/model/factory.rb +0 -45
  99. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  100. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  101. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  102. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  103. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  104. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  105. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  106. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  107. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  108. data/lib/puppet/pops/types/type_parser.rb +0 -4
  109. data/lib/puppet/pops/types/types.rb +0 -1
  110. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  111. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  112. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  113. data/lib/puppet/property/list.rb +1 -1
  114. data/lib/puppet/provider.rb +0 -13
  115. data/lib/puppet/provider/group/groupadd.rb +13 -8
  116. data/lib/puppet/provider/nameservice.rb +0 -18
  117. data/lib/puppet/provider/package/apt.rb +30 -2
  118. data/lib/puppet/provider/package/aptitude.rb +6 -0
  119. data/lib/puppet/provider/package/dpkg.rb +0 -10
  120. data/lib/puppet/provider/package/gem.rb +23 -3
  121. data/lib/puppet/provider/package/pip.rb +0 -1
  122. data/lib/puppet/provider/package/pkg.rb +0 -4
  123. data/lib/puppet/provider/package/portage.rb +1 -1
  124. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  125. data/lib/puppet/provider/service/debian.rb +2 -0
  126. data/lib/puppet/provider/service/smf.rb +191 -73
  127. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  128. data/lib/puppet/provider/user/useradd.rb +55 -8
  129. data/lib/puppet/reference/configuration.rb +7 -5
  130. data/lib/puppet/reference/indirection.rb +1 -1
  131. data/lib/puppet/resource.rb +1 -89
  132. data/lib/puppet/resource/catalog.rb +1 -14
  133. data/lib/puppet/resource/type.rb +3 -119
  134. data/lib/puppet/resource/type_collection.rb +3 -48
  135. data/lib/puppet/runtime.rb +1 -2
  136. data/lib/puppet/settings.rb +45 -33
  137. data/lib/puppet/settings/integer_setting.rb +17 -0
  138. data/lib/puppet/settings/port_setting.rb +15 -0
  139. data/lib/puppet/settings/priority_setting.rb +5 -4
  140. data/lib/puppet/ssl.rb +10 -6
  141. data/lib/puppet/ssl/base.rb +3 -5
  142. data/lib/puppet/ssl/certificate.rb +0 -6
  143. data/lib/puppet/ssl/certificate_request.rb +1 -12
  144. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  145. data/lib/puppet/ssl/oids.rb +3 -1
  146. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  147. data/lib/puppet/ssl/state_machine.rb +3 -1
  148. data/lib/puppet/ssl/verifier.rb +2 -0
  149. data/lib/puppet/test/test_helper.rb +1 -3
  150. data/lib/puppet/transaction.rb +1 -7
  151. data/lib/puppet/transaction/report.rb +2 -4
  152. data/lib/puppet/type.rb +0 -76
  153. data/lib/puppet/type/file.rb +5 -7
  154. data/lib/puppet/type/file/checksum.rb +1 -1
  155. data/lib/puppet/type/file/source.rb +1 -1
  156. data/lib/puppet/type/filebucket.rb +3 -3
  157. data/lib/puppet/type/package.rb +8 -16
  158. data/lib/puppet/type/user.rb +1 -1
  159. data/lib/puppet/util/execution.rb +0 -11
  160. data/lib/puppet/util/http_proxy.rb +2 -215
  161. data/lib/puppet/util/monkey_patches.rb +0 -46
  162. data/lib/puppet/util/rdoc.rb +0 -7
  163. data/lib/puppet/util/retry_action.rb +1 -1
  164. data/lib/puppet/util/run_mode.rb +9 -1
  165. data/lib/puppet/util/windows.rb +3 -8
  166. data/lib/puppet/util/windows/daemon.rb +360 -0
  167. data/lib/puppet/util/windows/error.rb +1 -0
  168. data/lib/puppet/util/windows/eventlog.rb +4 -9
  169. data/lib/puppet/util/windows/file.rb +8 -242
  170. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  171. data/lib/puppet/util/windows/process.rb +4 -226
  172. data/lib/puppet/util/windows/service.rb +9 -460
  173. data/lib/puppet/util/windows/string.rb +12 -13
  174. data/lib/puppet/util/yaml.rb +0 -22
  175. data/lib/puppet/vendor/require_vendored.rb +0 -1
  176. data/lib/puppet/version.rb +1 -1
  177. data/lib/puppet/x509.rb +5 -1
  178. data/lib/puppet/x509/cert_provider.rb +29 -1
  179. data/locales/puppet.pot +521 -1226
  180. data/man/man5/puppet.conf.5 +35 -95
  181. data/man/man8/puppet-agent.8 +1 -1
  182. data/man/man8/puppet-apply.8 +1 -1
  183. data/man/man8/puppet-catalog.8 +1 -1
  184. data/man/man8/puppet-config.8 +1 -1
  185. data/man/man8/puppet-describe.8 +1 -1
  186. data/man/man8/puppet-device.8 +1 -1
  187. data/man/man8/puppet-doc.8 +1 -1
  188. data/man/man8/puppet-epp.8 +1 -1
  189. data/man/man8/puppet-facts.8 +57 -36
  190. data/man/man8/puppet-filebucket.8 +4 -4
  191. data/man/man8/puppet-generate.8 +1 -1
  192. data/man/man8/puppet-help.8 +1 -1
  193. data/man/man8/puppet-lookup.8 +1 -1
  194. data/man/man8/puppet-module.8 +1 -58
  195. data/man/man8/puppet-node.8 +1 -1
  196. data/man/man8/puppet-parser.8 +1 -1
  197. data/man/man8/puppet-plugin.8 +1 -1
  198. data/man/man8/puppet-report.8 +1 -1
  199. data/man/man8/puppet-resource.8 +1 -1
  200. data/man/man8/puppet-script.8 +1 -1
  201. data/man/man8/puppet-ssl.8 +1 -1
  202. data/man/man8/puppet.8 +2 -2
  203. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  204. data/spec/integration/application/agent_spec.rb +57 -11
  205. data/spec/integration/application/apply_spec.rb +1 -1
  206. data/spec/integration/application/filebucket_spec.rb +16 -16
  207. data/spec/integration/application/help_spec.rb +2 -0
  208. data/spec/integration/application/plugin_spec.rb +23 -1
  209. data/spec/integration/defaults_spec.rb +7 -3
  210. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  211. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  212. data/spec/integration/network/http_pool_spec.rb +3 -21
  213. data/spec/integration/parser/catalog_spec.rb +0 -38
  214. data/spec/integration/parser/node_spec.rb +0 -9
  215. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  216. data/spec/integration/type/file_spec.rb +5 -4
  217. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  218. data/spec/integration/util/windows/security_spec.rb +1 -1
  219. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  220. data/spec/lib/puppet_spec/settings.rb +1 -0
  221. data/spec/spec_helper.rb +2 -0
  222. data/spec/unit/agent_spec.rb +0 -2
  223. data/spec/unit/application/facts_spec.rb +86 -0
  224. data/spec/unit/application/filebucket_spec.rb +41 -39
  225. data/spec/unit/application/ssl_spec.rb +2 -2
  226. data/spec/unit/certificate_factory_spec.rb +1 -1
  227. data/spec/unit/configurer/downloader_spec.rb +6 -2
  228. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  229. data/spec/unit/configurer_spec.rb +12 -9
  230. data/spec/unit/context/trusted_information_spec.rb +2 -6
  231. data/spec/unit/defaults_spec.rb +22 -47
  232. data/spec/unit/environments_spec.rb +0 -3
  233. data/spec/unit/face/facts_spec.rb +4 -0
  234. data/spec/unit/face/node_spec.rb +14 -2
  235. data/spec/unit/face/plugin_spec.rb +73 -33
  236. data/spec/unit/file_bucket/file_spec.rb +1 -1
  237. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -18
  238. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  239. data/spec/unit/functions/camelcase_spec.rb +1 -1
  240. data/spec/unit/functions/capitalize_spec.rb +1 -1
  241. data/spec/unit/functions/downcase_spec.rb +1 -1
  242. data/spec/unit/functions/upcase_spec.rb +1 -1
  243. data/spec/unit/http/client_spec.rb +7 -8
  244. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  245. data/spec/unit/http/external_client_spec.rb +4 -4
  246. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  247. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  248. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  249. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  250. data/spec/unit/http/resolver_spec.rb +13 -13
  251. data/spec/unit/http/service/compiler_spec.rb +0 -62
  252. data/spec/unit/http/service/file_server_spec.rb +3 -3
  253. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  254. data/spec/unit/http/service_spec.rb +0 -1
  255. data/spec/unit/http/session_spec.rb +16 -14
  256. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  257. data/spec/unit/indirector/facts/facter_spec.rb +113 -0
  258. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  259. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  260. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  261. data/spec/unit/indirector/file_server_spec.rb +1 -15
  262. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  263. data/spec/unit/indirector/request_spec.rb +0 -264
  264. data/spec/unit/indirector/rest_spec.rb +98 -752
  265. data/spec/unit/network/authconfig_spec.rb +2 -129
  266. data/spec/unit/network/authorization_spec.rb +2 -55
  267. data/spec/unit/network/formats_spec.rb +45 -4
  268. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -92
  269. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  270. data/spec/unit/network/http/api_spec.rb +10 -0
  271. data/spec/unit/network/http/connection_spec.rb +19 -41
  272. data/spec/unit/network/http/handler_spec.rb +0 -1
  273. data/spec/unit/network/http_pool_spec.rb +0 -4
  274. data/spec/unit/node/environment_spec.rb +33 -21
  275. data/spec/unit/node_spec.rb +2 -54
  276. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  277. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  278. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  279. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  280. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  281. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  282. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  283. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  284. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  285. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  286. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  287. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  288. data/spec/unit/pops/visitor_spec.rb +1 -1
  289. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  290. data/spec/unit/provider/nameservice_spec.rb +0 -57
  291. data/spec/unit/provider/package/apt_spec.rb +24 -15
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  293. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  294. data/spec/unit/provider/package/gem_spec.rb +32 -0
  295. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  296. data/spec/unit/provider/service/smf_spec.rb +401 -165
  297. data/spec/unit/provider/service/windows_spec.rb +0 -1
  298. data/spec/unit/provider/user/useradd_spec.rb +55 -3
  299. data/spec/unit/provider_spec.rb +0 -12
  300. data/spec/unit/resource/type_collection_spec.rb +2 -22
  301. data/spec/unit/resource_spec.rb +0 -56
  302. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  303. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  304. data/spec/unit/settings/port_setting_spec.rb +31 -0
  305. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  306. data/spec/unit/settings_spec.rb +17 -0
  307. data/spec/unit/ssl/base_spec.rb +36 -3
  308. data/spec/unit/ssl/certificate_request_spec.rb +19 -55
  309. data/spec/unit/ssl/certificate_spec.rb +2 -11
  310. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  311. data/spec/unit/ssl/verifier_spec.rb +0 -21
  312. data/spec/unit/transaction/report_spec.rb +0 -2
  313. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  314. data/spec/unit/transaction_spec.rb +45 -79
  315. data/spec/unit/type/file/checksum_spec.rb +6 -6
  316. data/spec/unit/type/file/content_spec.rb +1 -1
  317. data/spec/unit/type/file/ensure_spec.rb +1 -1
  318. data/spec/unit/type/file/mode_spec.rb +1 -1
  319. data/spec/unit/type/file/source_spec.rb +0 -1
  320. data/spec/unit/type/file_spec.rb +12 -6
  321. data/spec/unit/type/package_spec.rb +1 -1
  322. data/spec/unit/type_spec.rb +20 -0
  323. data/spec/unit/util/backups_spec.rb +0 -2
  324. data/spec/unit/util/execution_spec.rb +0 -29
  325. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  326. data/spec/unit/util/run_mode_spec.rb +21 -121
  327. data/spec/unit/util/windows/string_spec.rb +1 -3
  328. data/spec/unit/util/yaml_spec.rb +0 -54
  329. data/spec/unit/util_spec.rb +0 -18
  330. metadata +48 -219
  331. data/conf/auth.conf +0 -150
  332. data/lib/puppet/application/cert.rb +0 -76
  333. data/lib/puppet/application/key.rb +0 -4
  334. data/lib/puppet/application/man.rb +0 -4
  335. data/lib/puppet/application/status.rb +0 -4
  336. data/lib/puppet/face/key.rb +0 -16
  337. data/lib/puppet/face/man.rb +0 -145
  338. data/lib/puppet/face/module/build.rb +0 -14
  339. data/lib/puppet/face/module/generate.rb +0 -14
  340. data/lib/puppet/face/module/search.rb +0 -103
  341. data/lib/puppet/face/status.rb +0 -51
  342. data/lib/puppet/indirector/certificate/file.rb +0 -9
  343. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  344. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  345. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  346. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  347. data/lib/puppet/indirector/file_content/http.rb +0 -22
  348. data/lib/puppet/indirector/key/file.rb +0 -46
  349. data/lib/puppet/indirector/key/memory.rb +0 -7
  350. data/lib/puppet/indirector/ssl_file.rb +0 -162
  351. data/lib/puppet/indirector/status.rb +0 -3
  352. data/lib/puppet/indirector/status/local.rb +0 -12
  353. data/lib/puppet/indirector/status/rest.rb +0 -27
  354. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  355. data/lib/puppet/network/auth_config_parser.rb +0 -90
  356. data/lib/puppet/network/authstore.rb +0 -283
  357. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  358. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  359. data/lib/puppet/network/http/base_pool.rb +0 -36
  360. data/lib/puppet/network/http/compression.rb +0 -127
  361. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  362. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  363. data/lib/puppet/network/rest_controller.rb +0 -2
  364. data/lib/puppet/network/rights.rb +0 -210
  365. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  366. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  367. data/lib/puppet/parser/environment_compiler.rb +0 -202
  368. data/lib/puppet/pops/types/enumeration.rb +0 -16
  369. data/lib/puppet/resource/capability_finder.rb +0 -154
  370. data/lib/puppet/rest/errors.rb +0 -15
  371. data/lib/puppet/rest/response.rb +0 -35
  372. data/lib/puppet/rest/route.rb +0 -85
  373. data/lib/puppet/rest/routes.rb +0 -135
  374. data/lib/puppet/ssl/host.rb +0 -505
  375. data/lib/puppet/ssl/key.rb +0 -61
  376. data/lib/puppet/ssl/validator.rb +0 -61
  377. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  378. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  379. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  380. data/lib/puppet/status.rb +0 -40
  381. data/lib/puppet/util/connection.rb +0 -88
  382. data/lib/puppet/util/fact_dif.rb +0 -62
  383. data/lib/puppet/util/ssl.rb +0 -83
  384. data/lib/puppet/util/windows/api_types.rb +0 -309
  385. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  386. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  387. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  388. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  389. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  390. data/lib/puppet/vendor/pathspec/README.md +0 -53
  391. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  392. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  393. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  394. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  395. data/man/man8/puppet-key.8 +0 -126
  396. data/man/man8/puppet-man.8 +0 -76
  397. data/man/man8/puppet-status.8 +0 -108
  398. data/spec/integration/network/authconfig_spec.rb +0 -256
  399. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  400. data/spec/unit/application/man_spec.rb +0 -52
  401. data/spec/unit/capability_spec.rb +0 -414
  402. data/spec/unit/face/key_spec.rb +0 -9
  403. data/spec/unit/face/module/search_spec.rb +0 -231
  404. data/spec/unit/face/status_spec.rb +0 -9
  405. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  406. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  407. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  408. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  409. data/spec/unit/indirector/key/file_spec.rb +0 -78
  410. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  411. data/spec/unit/indirector/status/local_spec.rb +0 -10
  412. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  413. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  414. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  415. data/spec/unit/network/authstore_spec.rb +0 -422
  416. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  417. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  418. data/spec/unit/network/http/compression_spec.rb +0 -240
  419. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  420. data/spec/unit/network/http_spec.rb +0 -9
  421. data/spec/unit/network/rights_spec.rb +0 -439
  422. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  423. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  424. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  425. data/spec/unit/rest/route_spec.rb +0 -132
  426. data/spec/unit/ssl/host_spec.rb +0 -645
  427. data/spec/unit/ssl/key_spec.rb +0 -173
  428. data/spec/unit/ssl/validator_spec.rb +0 -278
  429. data/spec/unit/status_spec.rb +0 -45
  430. 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
 
@@ -440,11 +495,10 @@ class Application
440
495
  # Output basic information about the runtime environment for debugging
441
496
  # purposes.
442
497
  #
443
- # @api public
444
- #
445
498
  # @param extra_info [Hash{String => #to_s}] a flat hash of extra information
446
499
  # to log. Intended to be passed to super by subclasses.
447
500
  # @return [void]
501
+ # @api public
448
502
  def log_runtime_environment(extra_info=nil)
449
503
  runtime_info = {
450
504
  'puppet_version' => Puppet.version,
@@ -457,6 +511,21 @@ class Application
457
511
  Puppet.debug 'Runtime environment: ' + runtime_info.map{|k,v| k + '=' + v.to_s}.join(', ')
458
512
  end
459
513
 
514
+ # Options defined with the `option` method are parsed from settings and the command line.
515
+ # Refer to {OptionParser} documentation for the exact format. Options are parsed as follows:
516
+ #
517
+ # * If the option method is given a block, then it will be called whenever the option is encountered in the command-line argument.
518
+ # * If the option method has no block, then the default option handler will store the argument in the `options` instance variable.
519
+ # * If a given option was not defined by an `option` method, but it exists as a Puppet setting:
520
+ # * if `unknown` was used with a block, it will be called with the option name and argument.
521
+ # * if `unknown` wasn't used, then the option/argument is handed to Puppet.settings.handlearg for
522
+ # a default behavior.
523
+ # * The `-h` and `--help` options are automatically handled by the command line before creating the application.
524
+ #
525
+ # Options specified on the command line override settings. It is usually not
526
+ # necessary to override this method.
527
+ # @return [void]
528
+ # @api public
460
529
  def parse_options
461
530
  # Create an option parser
462
531
  option_parser = OptionParser.new(self.class.banner)
@@ -504,6 +573,9 @@ class Application
504
573
  self.class.to_s.sub(/.*::/,"").downcase.to_sym
505
574
  end
506
575
 
576
+ # Return the text to display when running `puppet help`.
577
+ # @return [String] The help to display
578
+ # @api public
507
579
  def help
508
580
  _("No help available for puppet %{app_name}") % { app_name: name }
509
581
  end
@@ -511,6 +583,8 @@ class Application
511
583
  # The description used in top level `puppet help` output
512
584
  # If left empty in implementations, we will attempt to extract
513
585
  # the summary from the help text itself.
586
+ # @return [String]
587
+ # @api public
514
588
  def summary
515
589
  ""
516
590
  end
@@ -260,119 +260,115 @@ Licensed under the Apache 2.0 License
260
260
  end
261
261
  end
262
262
  devices.collect do |devicename,device|
263
- pool = Puppet.runtime[:http].pool
264
- Puppet.override(:http_pool => pool) do
265
- # TODO when we drop support for ruby < 2.5 we can remove the extra block here
266
- begin
267
- device_url = URI.parse(device.url)
268
- # Handle nil scheme & port
269
- scheme = "#{device_url.scheme}://" if device_url.scheme
270
- port = ":#{device_url.port}" if device_url.port
271
-
272
- # override local $vardir and $certname
273
- Puppet[:ssldir] = ::File.join(Puppet[:deviceconfdir], device.name, 'ssl')
274
- Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
275
- Puppet[:libdir] = options[:libdir] || ::File.join(Puppet[:devicedir], device.name, 'lib')
276
- Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
277
- Puppet[:certname] = device.name
278
- ssl_context = nil
279
-
280
- # create device directory under $deviceconfdir
281
- Puppet::FileSystem.dir_mkpath(Puppet[:ssldir]) unless Puppet::FileSystem.dir_exist?(Puppet[:ssldir])
282
-
283
- # this will reload and recompute default settings and create device-specific sub vardir
284
- Puppet.settings.use :main, :agent, :ssl
285
-
286
- # Workaround for PUP-8736: store ssl certs outside the cache directory to prevent accidental removal and keep the old path as symlink
287
- optssldir = File.join(Puppet[:confdir], 'ssl')
288
- Puppet::FileSystem.symlink(Puppet[:ssldir], optssldir) unless Puppet::FileSystem.exist?(optssldir)
289
-
290
- unless options[:resource] || options[:facts] || options[:apply]
291
- # Since it's too complicated to fix properly in the default settings, we workaround for PUP-9642 here.
292
- # See https://github.com/puppetlabs/puppet/pull/7483#issuecomment-483455997 for details.
293
- # This has to happen after `settings.use` above, so the directory is created and before `setup_host` below, where the SSL
294
- # routines would fail with access errors
295
- if Puppet.features.root? && !Puppet::Util::Platform.windows?
296
- user = Puppet::Type.type(:user).new(name: Puppet[:user]).exists? ? Puppet[:user] : nil
297
- group = Puppet::Type.type(:group).new(name: Puppet[:group]).exists? ? Puppet[:group] : nil
298
- Puppet.debug("Fixing perms for #{user}:#{group} on #{Puppet[:confdir]}")
299
- FileUtils.chown(user, group, Puppet[:confdir]) if user || group
300
- end
263
+ # TODO when we drop support for ruby < 2.5 we can remove the extra block here
264
+ begin
265
+ device_url = URI.parse(device.url)
266
+ # Handle nil scheme & port
267
+ scheme = "#{device_url.scheme}://" if device_url.scheme
268
+ port = ":#{device_url.port}" if device_url.port
269
+
270
+ # override local $vardir and $certname
271
+ Puppet[:ssldir] = ::File.join(Puppet[:deviceconfdir], device.name, 'ssl')
272
+ Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
273
+ Puppet[:libdir] = options[:libdir] || ::File.join(Puppet[:devicedir], device.name, 'lib')
274
+ Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
275
+ Puppet[:certname] = device.name
276
+ ssl_context = nil
277
+
278
+ # create device directory under $deviceconfdir
279
+ Puppet::FileSystem.dir_mkpath(Puppet[:ssldir]) unless Puppet::FileSystem.dir_exist?(Puppet[:ssldir])
280
+
281
+ # this will reload and recompute default settings and create device-specific sub vardir
282
+ Puppet.settings.use :main, :agent, :ssl
283
+
284
+ # Workaround for PUP-8736: store ssl certs outside the cache directory to prevent accidental removal and keep the old path as symlink
285
+ optssldir = File.join(Puppet[:confdir], 'ssl')
286
+ Puppet::FileSystem.symlink(Puppet[:ssldir], optssldir) unless Puppet::FileSystem.exist?(optssldir)
287
+
288
+ unless options[:resource] || options[:facts] || options[:apply]
289
+ # Since it's too complicated to fix properly in the default settings, we workaround for PUP-9642 here.
290
+ # See https://github.com/puppetlabs/puppet/pull/7483#issuecomment-483455997 for details.
291
+ # This has to happen after `settings.use` above, so the directory is created and before `setup_host` below, where the SSL
292
+ # routines would fail with access errors
293
+ if Puppet.features.root? && !Puppet::Util::Platform.windows?
294
+ user = Puppet::Type.type(:user).new(name: Puppet[:user]).exists? ? Puppet[:user] : nil
295
+ group = Puppet::Type.type(:group).new(name: Puppet[:group]).exists? ? Puppet[:group] : nil
296
+ Puppet.debug("Fixing perms for #{user}:#{group} on #{Puppet[:confdir]}")
297
+ FileUtils.chown(user, group, Puppet[:confdir]) if user || group
298
+ end
301
299
 
302
- ssl_context = setup_context
300
+ ssl_context = setup_context
303
301
 
304
- unless options[:libdir]
305
- Puppet.override(ssl_context: ssl_context) do
306
- Puppet::Configurer::PluginHandler.new.download_plugins(env) if Puppet::Configurer.should_pluginsync?
307
- end
302
+ unless options[:libdir]
303
+ Puppet.override(ssl_context: ssl_context) do
304
+ Puppet::Configurer::PluginHandler.new.download_plugins(env) if Puppet::Configurer.should_pluginsync?
308
305
  end
309
306
  end
307
+ end
310
308
 
311
- # this inits the device singleton, so that the facts terminus
312
- # and the various network_device provider can use it
313
- Puppet::Util::NetworkDevice.init(device)
314
-
315
- if options[:resource]
316
- type, name = parse_args(command_line.args)
317
- 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 }
318
- resources = find_resources(type, name)
319
- if options[:to_yaml]
320
- data = resources.map do |resource|
321
- resource.prune_parameters(:parameters_to_include => @extra_params).to_hiera_hash
322
- end.inject(:merge!)
323
- text = YAML.dump(type.downcase => data)
324
- else
325
- text = resources.map do |resource|
326
- resource.prune_parameters(:parameters_to_include => @extra_params).to_manifest.force_encoding(Encoding.default_external)
327
- end.join("\n")
328
- end
329
- (puts text)
330
- 0
331
- elsif options[:facts]
332
- 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 }
333
- remote_facts = Puppet::Node::Facts.indirection.find(name, :environment => env)
334
- # Give a proper name to the facts
335
- remote_facts.name = remote_facts.values['clientcert']
336
- renderer = Puppet::Network::FormatHandler.format(:console)
337
- puts renderer.render(remote_facts)
338
- 0
339
- elsif options[:apply]
340
- # avoid reporting to server
341
- Puppet::Transaction::Report.indirection.terminus_class = :yaml
342
- Puppet::Resource::Catalog.indirection.cache_class = nil
343
-
344
- require 'puppet/application/apply'
345
- begin
346
- Puppet[:node_terminus] = :plain
347
- Puppet[:catalog_terminus] = :compiler
348
- Puppet[:catalog_cache_terminus] = nil
349
- Puppet[:facts_terminus] = :network_device
350
- Puppet.override(:network_device => true) do
351
- Puppet::Application::Apply.new(Puppet::Util::CommandLine.new('puppet', ["apply", options[:apply]])).run_command
352
- end
353
- end
309
+ # this inits the device singleton, so that the facts terminus
310
+ # and the various network_device provider can use it
311
+ Puppet::Util::NetworkDevice.init(device)
312
+
313
+ if options[:resource]
314
+ type, name = parse_args(command_line.args)
315
+ 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 }
316
+ resources = find_resources(type, name)
317
+ if options[:to_yaml]
318
+ data = resources.map do |resource|
319
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_hiera_hash
320
+ end.inject(:merge!)
321
+ text = YAML.dump(type.downcase => data)
354
322
  else
355
- 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 }
356
-
357
- overrides = {}
358
- overrides[:ssl_context] = ssl_context if ssl_context
359
- Puppet.override(overrides) do
360
- configurer = Puppet::Configurer.new
361
- configurer.run(:network_device => true, :pluginsync => false)
323
+ text = resources.map do |resource|
324
+ resource.prune_parameters(:parameters_to_include => @extra_params).to_manifest.force_encoding(Encoding.default_external)
325
+ end.join("\n")
326
+ end
327
+ (puts text)
328
+ 0
329
+ elsif options[:facts]
330
+ 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 }
331
+ remote_facts = Puppet::Node::Facts.indirection.find(name, :environment => env)
332
+ # Give a proper name to the facts
333
+ remote_facts.name = remote_facts.values['clientcert']
334
+ renderer = Puppet::Network::FormatHandler.format(:console)
335
+ puts renderer.render(remote_facts)
336
+ 0
337
+ elsif options[:apply]
338
+ # avoid reporting to server
339
+ Puppet::Transaction::Report.indirection.terminus_class = :yaml
340
+ Puppet::Resource::Catalog.indirection.cache_class = nil
341
+
342
+ require 'puppet/application/apply'
343
+ begin
344
+ Puppet[:node_terminus] = :plain
345
+ Puppet[:catalog_terminus] = :compiler
346
+ Puppet[:catalog_cache_terminus] = nil
347
+ Puppet[:facts_terminus] = :network_device
348
+ Puppet.override(:network_device => true) do
349
+ Puppet::Application::Apply.new(Puppet::Util::CommandLine.new('puppet', ["apply", options[:apply]])).run_command
362
350
  end
363
351
  end
364
- rescue => detail
365
- Puppet.log_exception(detail)
366
- # If we rescued an error, then we return 1 as the exit code
367
- 1
368
- ensure
369
- pool.close
370
- Puppet[:libdir] = libdir
371
- Puppet[:vardir] = vardir
372
- Puppet[:confdir] = confdir
373
- Puppet[:ssldir] = ssldir
374
- Puppet[:certname] = certname
352
+ else
353
+ 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 }
354
+
355
+ overrides = {}
356
+ overrides[:ssl_context] = ssl_context if ssl_context
357
+ Puppet.override(overrides) do
358
+ configurer = Puppet::Configurer.new
359
+ configurer.run(:network_device => true, :pluginsync => false)
360
+ end
375
361
  end
362
+ rescue => detail
363
+ Puppet.log_exception(detail)
364
+ # If we rescued an error, then we return 1 as the exit code
365
+ 1
366
+ ensure
367
+ Puppet[:libdir] = libdir
368
+ Puppet[:vardir] = vardir
369
+ Puppet[:confdir] = confdir
370
+ Puppet[:ssldir] = ssldir
371
+ Puppet[:certname] = certname
376
372
  end
377
373
  end
378
374
  end