puppet 6.21.1 → 7.4.1

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 (402) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/Gemfile.lock +5 -5
  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/provider.rb +0 -13
  114. data/lib/puppet/provider/nameservice.rb +0 -18
  115. data/lib/puppet/provider/package/dpkg.rb +0 -10
  116. data/lib/puppet/provider/package/gem.rb +23 -3
  117. data/lib/puppet/provider/package/pip.rb +0 -1
  118. data/lib/puppet/provider/package/pkg.rb +0 -4
  119. data/lib/puppet/provider/package/portage.rb +1 -1
  120. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  121. data/lib/puppet/provider/service/smf.rb +191 -73
  122. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  123. data/lib/puppet/reference/configuration.rb +7 -5
  124. data/lib/puppet/reference/indirection.rb +1 -1
  125. data/lib/puppet/resource.rb +1 -89
  126. data/lib/puppet/resource/catalog.rb +1 -14
  127. data/lib/puppet/resource/type.rb +3 -119
  128. data/lib/puppet/resource/type_collection.rb +3 -48
  129. data/lib/puppet/runtime.rb +1 -2
  130. data/lib/puppet/settings.rb +45 -33
  131. data/lib/puppet/settings/integer_setting.rb +17 -0
  132. data/lib/puppet/settings/port_setting.rb +15 -0
  133. data/lib/puppet/settings/priority_setting.rb +5 -4
  134. data/lib/puppet/ssl.rb +10 -6
  135. data/lib/puppet/ssl/base.rb +3 -5
  136. data/lib/puppet/ssl/certificate.rb +0 -6
  137. data/lib/puppet/ssl/certificate_request.rb +1 -12
  138. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  139. data/lib/puppet/ssl/oids.rb +3 -1
  140. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  141. data/lib/puppet/ssl/state_machine.rb +3 -1
  142. data/lib/puppet/ssl/verifier.rb +2 -0
  143. data/lib/puppet/test/test_helper.rb +1 -3
  144. data/lib/puppet/transaction.rb +1 -7
  145. data/lib/puppet/transaction/report.rb +2 -4
  146. data/lib/puppet/type.rb +0 -76
  147. data/lib/puppet/type/file.rb +5 -7
  148. data/lib/puppet/type/file/checksum.rb +1 -1
  149. data/lib/puppet/type/file/source.rb +1 -1
  150. data/lib/puppet/type/filebucket.rb +3 -3
  151. data/lib/puppet/type/package.rb +5 -13
  152. data/lib/puppet/type/user.rb +1 -1
  153. data/lib/puppet/util/execution.rb +0 -11
  154. data/lib/puppet/util/http_proxy.rb +2 -215
  155. data/lib/puppet/util/monkey_patches.rb +0 -46
  156. data/lib/puppet/util/rdoc.rb +0 -7
  157. data/lib/puppet/util/retry_action.rb +1 -1
  158. data/lib/puppet/util/run_mode.rb +9 -1
  159. data/lib/puppet/util/windows.rb +3 -8
  160. data/lib/puppet/util/windows/daemon.rb +360 -0
  161. data/lib/puppet/util/windows/error.rb +1 -0
  162. data/lib/puppet/util/windows/eventlog.rb +4 -9
  163. data/lib/puppet/util/windows/file.rb +8 -242
  164. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  165. data/lib/puppet/util/windows/process.rb +4 -226
  166. data/lib/puppet/util/windows/service.rb +9 -460
  167. data/lib/puppet/util/windows/string.rb +12 -13
  168. data/lib/puppet/util/yaml.rb +0 -22
  169. data/lib/puppet/vendor/require_vendored.rb +0 -1
  170. data/lib/puppet/version.rb +1 -1
  171. data/lib/puppet/x509.rb +5 -1
  172. data/lib/puppet/x509/cert_provider.rb +29 -1
  173. data/locales/puppet.pot +521 -1226
  174. data/man/man5/puppet.conf.5 +34 -94
  175. data/man/man8/puppet-facts.8 +56 -35
  176. data/man/man8/puppet-filebucket.8 +3 -3
  177. data/man/man8/puppet-module.8 +0 -57
  178. data/man/man8/puppet.8 +1 -1
  179. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  180. data/spec/integration/application/agent_spec.rb +24 -11
  181. data/spec/integration/application/apply_spec.rb +1 -1
  182. data/spec/integration/application/filebucket_spec.rb +16 -16
  183. data/spec/integration/application/help_spec.rb +2 -0
  184. data/spec/integration/application/plugin_spec.rb +23 -1
  185. data/spec/integration/defaults_spec.rb +7 -3
  186. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  187. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  188. data/spec/integration/network/http_pool_spec.rb +3 -21
  189. data/spec/integration/parser/catalog_spec.rb +0 -38
  190. data/spec/integration/parser/node_spec.rb +0 -9
  191. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  192. data/spec/integration/type/file_spec.rb +5 -4
  193. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  194. data/spec/integration/util/windows/security_spec.rb +1 -1
  195. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  196. data/spec/lib/puppet_spec/settings.rb +1 -0
  197. data/spec/spec_helper.rb +2 -0
  198. data/spec/unit/agent_spec.rb +0 -2
  199. data/spec/unit/application/facts_spec.rb +86 -0
  200. data/spec/unit/application/filebucket_spec.rb +41 -39
  201. data/spec/unit/application/ssl_spec.rb +2 -2
  202. data/spec/unit/certificate_factory_spec.rb +1 -1
  203. data/spec/unit/configurer/downloader_spec.rb +6 -2
  204. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  205. data/spec/unit/configurer_spec.rb +12 -9
  206. data/spec/unit/context/trusted_information_spec.rb +2 -6
  207. data/spec/unit/defaults_spec.rb +22 -47
  208. data/spec/unit/environments_spec.rb +0 -3
  209. data/spec/unit/face/facts_spec.rb +4 -0
  210. data/spec/unit/face/node_spec.rb +14 -2
  211. data/spec/unit/face/plugin_spec.rb +73 -33
  212. data/spec/unit/file_bucket/file_spec.rb +1 -1
  213. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -18
  214. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  215. data/spec/unit/functions/camelcase_spec.rb +1 -1
  216. data/spec/unit/functions/capitalize_spec.rb +1 -1
  217. data/spec/unit/functions/downcase_spec.rb +1 -1
  218. data/spec/unit/functions/upcase_spec.rb +1 -1
  219. data/spec/unit/http/client_spec.rb +7 -8
  220. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  221. data/spec/unit/http/external_client_spec.rb +4 -4
  222. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  223. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  224. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  225. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  226. data/spec/unit/http/resolver_spec.rb +13 -13
  227. data/spec/unit/http/service/compiler_spec.rb +0 -62
  228. data/spec/unit/http/service/file_server_spec.rb +3 -3
  229. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  230. data/spec/unit/http/service_spec.rb +0 -1
  231. data/spec/unit/http/session_spec.rb +16 -14
  232. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  233. data/spec/unit/indirector/facts/facter_spec.rb +113 -0
  234. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  235. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  236. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  237. data/spec/unit/indirector/file_server_spec.rb +1 -15
  238. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  239. data/spec/unit/indirector/request_spec.rb +0 -264
  240. data/spec/unit/indirector/rest_spec.rb +98 -752
  241. data/spec/unit/network/authconfig_spec.rb +2 -129
  242. data/spec/unit/network/authorization_spec.rb +2 -55
  243. data/spec/unit/network/formats_spec.rb +45 -4
  244. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -92
  245. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  246. data/spec/unit/network/http/api_spec.rb +10 -0
  247. data/spec/unit/network/http/connection_spec.rb +19 -41
  248. data/spec/unit/network/http/handler_spec.rb +0 -1
  249. data/spec/unit/network/http_pool_spec.rb +0 -4
  250. data/spec/unit/node/environment_spec.rb +33 -21
  251. data/spec/unit/node_spec.rb +2 -54
  252. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  253. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  254. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  255. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  256. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  257. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  258. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  259. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  260. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  261. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  262. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  263. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  264. data/spec/unit/pops/visitor_spec.rb +1 -1
  265. data/spec/unit/provider/nameservice_spec.rb +0 -57
  266. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  267. data/spec/unit/provider/package/gem_spec.rb +32 -0
  268. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  269. data/spec/unit/provider/service/smf_spec.rb +401 -165
  270. data/spec/unit/provider/service/windows_spec.rb +0 -1
  271. data/spec/unit/provider_spec.rb +0 -12
  272. data/spec/unit/resource/type_collection_spec.rb +2 -22
  273. data/spec/unit/resource_spec.rb +0 -56
  274. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  275. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  276. data/spec/unit/settings/port_setting_spec.rb +31 -0
  277. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  278. data/spec/unit/settings_spec.rb +17 -0
  279. data/spec/unit/ssl/base_spec.rb +36 -3
  280. data/spec/unit/ssl/certificate_request_spec.rb +19 -55
  281. data/spec/unit/ssl/certificate_spec.rb +2 -11
  282. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  283. data/spec/unit/ssl/verifier_spec.rb +0 -21
  284. data/spec/unit/transaction/report_spec.rb +0 -2
  285. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  286. data/spec/unit/transaction_spec.rb +45 -79
  287. data/spec/unit/type/file/checksum_spec.rb +6 -6
  288. data/spec/unit/type/file/content_spec.rb +1 -1
  289. data/spec/unit/type/file/ensure_spec.rb +1 -1
  290. data/spec/unit/type/file/mode_spec.rb +1 -1
  291. data/spec/unit/type/file/source_spec.rb +0 -1
  292. data/spec/unit/type/file_spec.rb +12 -6
  293. data/spec/unit/type/package_spec.rb +1 -1
  294. data/spec/unit/type_spec.rb +20 -0
  295. data/spec/unit/util/backups_spec.rb +0 -2
  296. data/spec/unit/util/execution_spec.rb +0 -29
  297. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  298. data/spec/unit/util/run_mode_spec.rb +21 -121
  299. data/spec/unit/util/windows/string_spec.rb +1 -3
  300. data/spec/unit/util/yaml_spec.rb +0 -54
  301. data/spec/unit/util_spec.rb +0 -18
  302. metadata +47 -162
  303. data/conf/auth.conf +0 -150
  304. data/lib/puppet/application/cert.rb +0 -76
  305. data/lib/puppet/application/key.rb +0 -4
  306. data/lib/puppet/application/man.rb +0 -4
  307. data/lib/puppet/application/status.rb +0 -4
  308. data/lib/puppet/face/key.rb +0 -16
  309. data/lib/puppet/face/man.rb +0 -145
  310. data/lib/puppet/face/module/build.rb +0 -14
  311. data/lib/puppet/face/module/generate.rb +0 -14
  312. data/lib/puppet/face/module/search.rb +0 -103
  313. data/lib/puppet/face/status.rb +0 -51
  314. data/lib/puppet/indirector/certificate/file.rb +0 -9
  315. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  316. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  317. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  318. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  319. data/lib/puppet/indirector/file_content/http.rb +0 -22
  320. data/lib/puppet/indirector/key/file.rb +0 -46
  321. data/lib/puppet/indirector/key/memory.rb +0 -7
  322. data/lib/puppet/indirector/ssl_file.rb +0 -162
  323. data/lib/puppet/indirector/status.rb +0 -3
  324. data/lib/puppet/indirector/status/local.rb +0 -12
  325. data/lib/puppet/indirector/status/rest.rb +0 -27
  326. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  327. data/lib/puppet/network/auth_config_parser.rb +0 -90
  328. data/lib/puppet/network/authstore.rb +0 -283
  329. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  330. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  331. data/lib/puppet/network/http/base_pool.rb +0 -36
  332. data/lib/puppet/network/http/compression.rb +0 -127
  333. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  334. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  335. data/lib/puppet/network/rest_controller.rb +0 -2
  336. data/lib/puppet/network/rights.rb +0 -210
  337. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  338. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  339. data/lib/puppet/parser/environment_compiler.rb +0 -202
  340. data/lib/puppet/pops/types/enumeration.rb +0 -16
  341. data/lib/puppet/resource/capability_finder.rb +0 -154
  342. data/lib/puppet/rest/errors.rb +0 -15
  343. data/lib/puppet/rest/response.rb +0 -35
  344. data/lib/puppet/rest/route.rb +0 -85
  345. data/lib/puppet/rest/routes.rb +0 -135
  346. data/lib/puppet/ssl/host.rb +0 -505
  347. data/lib/puppet/ssl/key.rb +0 -61
  348. data/lib/puppet/ssl/validator.rb +0 -61
  349. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  350. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  351. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  352. data/lib/puppet/status.rb +0 -40
  353. data/lib/puppet/util/connection.rb +0 -88
  354. data/lib/puppet/util/fact_dif.rb +0 -62
  355. data/lib/puppet/util/ssl.rb +0 -83
  356. data/lib/puppet/util/windows/api_types.rb +0 -309
  357. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  358. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  359. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  360. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  361. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  362. data/lib/puppet/vendor/pathspec/README.md +0 -53
  363. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  364. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  365. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  366. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  367. data/man/man8/puppet-key.8 +0 -126
  368. data/man/man8/puppet-man.8 +0 -76
  369. data/man/man8/puppet-status.8 +0 -108
  370. data/spec/integration/network/authconfig_spec.rb +0 -256
  371. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  372. data/spec/unit/application/man_spec.rb +0 -52
  373. data/spec/unit/capability_spec.rb +0 -414
  374. data/spec/unit/face/key_spec.rb +0 -9
  375. data/spec/unit/face/module/search_spec.rb +0 -231
  376. data/spec/unit/face/status_spec.rb +0 -9
  377. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  378. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  379. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  380. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  381. data/spec/unit/indirector/key/file_spec.rb +0 -78
  382. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  383. data/spec/unit/indirector/status/local_spec.rb +0 -10
  384. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  385. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  386. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  387. data/spec/unit/network/authstore_spec.rb +0 -422
  388. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  389. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  390. data/spec/unit/network/http/compression_spec.rb +0 -240
  391. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  392. data/spec/unit/network/http_spec.rb +0 -9
  393. data/spec/unit/network/rights_spec.rb +0 -439
  394. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  395. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  396. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  397. data/spec/unit/rest/route_spec.rb +0 -132
  398. data/spec/unit/ssl/host_spec.rb +0 -645
  399. data/spec/unit/ssl/key_spec.rb +0 -173
  400. data/spec/unit/ssl/validator_spec.rb +0 -278
  401. data/spec/unit/status_spec.rb +0 -45
  402. data/spec/unit/util/ssl_spec.rb +0 -91
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a276ad05a056a465b7a0a2c8a3c6e8ca1027a12614be90761c61c884237aefc8
4
- data.tar.gz: 69bc653c7fcf75a6893083bd7fe216d8628e9f03e5a1ded3567f0f8f94891e8d
3
+ metadata.gz: 1dc7fca54856073eca2fb108213f2870e9d9cbe9c176bf4c0ff1820182aa1487
4
+ data.tar.gz: 0e73ef249f8a19167ba68b84e3d8ddf2a5fcf82a5689d7955ed777feff43c5cf
5
5
  SHA512:
6
- metadata.gz: 7e0ff67c06a24ed7a113c00b3fb60da8258940b8bf7642fa37bfd562200b169a928d7d0d8b35c6019f88f5155042c39f2bb3a3647ae8bd32e8472d83fa0139c5
7
- data.tar.gz: 335aa790b52bf6c92f866c056f8b3103b583828d3c9face8a375c0488e683dd82bd51e2eaca88ec1c95e21291ce0781a5091e57d6eb92c5f86a2d7800f1a3cbb
6
+ metadata.gz: 313206ed5d0288d41c429eaef41b6507afd490298ff4b549bae911dffcbd06c2a1579329e4cf9ae94d5a1c2888d981c51730ec38450298cfd63b35f07cd34ca3
7
+ data.tar.gz: a9204bfb79227de4126b352a12dce922723de2910c621ebfa28e220756440c3b76f34d4e489e7c5d898a93a9f79297c044ac3bb8dff420279493dc8f75098a1a
data/Gemfile CHANGED
@@ -14,13 +14,10 @@ end
14
14
 
15
15
  # override .gemspec deps - may issue warning depending on Bundler version
16
16
  gem "facter", *location_for(ENV['FACTER_LOCATION']) if ENV.has_key?('FACTER_LOCATION')
17
- gem "facter-ng", *location_for(ENV['FACTER_NG_LOCATION']) if ENV.has_key?('FACTER_NG_LOCATION')
18
17
  gem "hiera", *location_for(ENV['HIERA_LOCATION']) if ENV.has_key?('HIERA_LOCATION')
19
18
  gem "semantic_puppet", *location_for(ENV['SEMANTIC_PUPPET_LOCATION'] || ["~> 1.0"])
20
19
  gem "puppet-resource_api", *location_for(ENV['RESOURCE_API_LOCATION'] || ["~> 1.5"])
21
20
 
22
- gem "scanf" if RUBY_VERSION.to_f >= 2.7
23
-
24
21
  group(:features) do
25
22
  gem 'diff-lcs', '~> 1.3', require: false
26
23
  gem 'hiera-eyaml', *location_for(ENV['HIERA_EYAML_LOCATION'])
@@ -34,7 +31,7 @@ group(:features) do
34
31
  # gem 'ruby-augeas', require: false, platforms: [:ruby]
35
32
  # requires native ldap headers/libs
36
33
  # gem 'ruby-ldap', '~> 0.9', require: false, platforms: [:ruby]
37
- gem 'puppetserver-ca', '~> 1.1', require: false
34
+ gem 'puppetserver-ca', '~> 2.0', require: false
38
35
  end
39
36
 
40
37
  group(:test) do
data/Gemfile.lock CHANGED
@@ -1,16 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- puppet (6.21.1)
4
+ puppet (7.4.1)
5
5
  CFPropertyList (~> 2.2)
6
6
  concurrent-ruby (~> 1.0)
7
7
  deep_merge (~> 1.0)
8
8
  facter (>= 2.4.0, < 5)
9
9
  fast_gettext (~> 1.1)
10
10
  hiera (>= 3.2.1, < 4)
11
- httpclient (~> 2.8)
12
11
  locale (~> 2.1)
13
12
  multi_json (~> 1.13)
13
+ scanf (~> 1.0)
14
14
  semantic_puppet (~> 1.0)
15
15
 
16
16
  GEM
@@ -49,7 +49,6 @@ GEM
49
49
  highline (1.6.21)
50
50
  hocon (1.3.1)
51
51
  hpricot (0.8.6)
52
- httpclient (2.8.3)
53
52
  json-schema (2.8.1)
54
53
  addressable (>= 2.4)
55
54
  locale (2.1.3)
@@ -75,7 +74,7 @@ GEM
75
74
  public_suffix (4.0.6)
76
75
  puppet-resource_api (1.8.13)
77
76
  hocon (>= 1.0)
78
- puppetserver-ca (1.9.1)
77
+ puppetserver-ca (2.0.1)
79
78
  facter (>= 2.0.1, < 5)
80
79
  racc (1.4.9)
81
80
  rainbow (2.2.2)
@@ -118,6 +117,7 @@ GEM
118
117
  rubocop (~> 0.49.0)
119
118
  ruby-prof (1.4.2)
120
119
  ruby-progressbar (1.11.0)
120
+ scanf (1.0.0)
121
121
  semantic_puppet (1.0.3)
122
122
  text (1.3.1)
123
123
  thor (1.1.0)
@@ -146,7 +146,7 @@ DEPENDENCIES
146
146
  pry
147
147
  puppet!
148
148
  puppet-resource_api (~> 1.5)
149
- puppetserver-ca (~> 1.1)
149
+ puppetserver-ca (~> 2.0)
150
150
  racc (= 1.4.9)
151
151
  rake (~> 12.2)
152
152
  rdoc (~> 6.0)
data/README.md CHANGED
@@ -15,7 +15,7 @@ Documentation for Puppet and related projects can be found online at the
15
15
 
16
16
  ### HTTP API
17
17
 
18
- [HTTP API Index](https://puppet.com/docs/puppet/5.5/http_api/http_api_index.html)
18
+ [HTTP API Index](https://puppet.com/docs/puppet/latest/http_api/http_api_index.html)
19
19
 
20
20
  ## Installation
21
21
 
data/conf/fileserver.conf CHANGED
@@ -12,10 +12,9 @@
12
12
  #
13
13
  # [extra_files]
14
14
  # path /etc/puppetlabs/puppet/files
15
- # allow *
16
15
  #
17
- # In the example above, anything in /etc/puppetlabs/puppet/files/<file name> would be
18
- # available to authenticated nodes at puppet:///extra_files/<file name>.
16
+ # In the example above, anything in /etc/puppetlabs/puppet/files/<file name>
17
+ # would be available to authenticated nodes at puppet:///extra_files/<file name>.
19
18
  #
20
19
  # Mount points may also use three placeholders as part of their path:
21
20
  #
@@ -28,10 +27,6 @@
28
27
  # PERMISSIONS
29
28
 
30
29
  # The ability to set permissions - for example, using the allow, allow_ip, or
31
- # deny directives - has been removed. Instead, you can control file access in
32
- # auth.conf by controlling the /file_metadata(s)/<mount point> and
33
- # /file_content(s)/<mount point> paths.
34
- #
35
- # For details and an example, see the auth.conf file. If you're using Puppet
36
- # Server, see the Puppet Server documentation at
37
- # https://puppet.com/docs/puppetserver/latest/config_file_auth.html.
30
+ # deny directives - has been removed from fileserver.conf. Instead, you can
31
+ # control file access in Puppet Server's auth.conf file. See the documentation
32
+ # at https://puppet.com/docs/puppetserver/latest/config_file_auth.html.
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  packager: 'puppetlabs'
3
- gpg_key: '7F438280EF8D349F'
4
3
 
5
4
  # These are the build targets used by the packaging repo. Uncomment to allow use.
6
5
  #final_mocks: 'pl-el-5-i386 pl-el-6-i386 pl-el-7-x86_64'
@@ -16,4 +15,4 @@ apt_signing_server: 'apt.puppetlabs.com'
16
15
  apt_repo_url: 'http://apt.puppetlabs.com'
17
16
  apt_repo_path: '/opt/repository/incoming'
18
17
  tar_host: 'downloads.puppetlabs.com'
19
- nonfinal_gem_path: '/opt/repository-nightlies/downloads/gems/puppet6-nightly'
18
+ nonfinal_gem_path: '/opt/repository-nightlies/downloads/gems/puppet7-nightly'
@@ -15,11 +15,6 @@ directories:
15
15
  group: 'wheel'
16
16
  perms: '0755'
17
17
  files:
18
- 'conf/auth.conf':
19
- path: 'private/etc/puppet'
20
- owner: 'root'
21
- group: 'wheel'
22
- perms: '0644'
23
18
  'man/man5/puppet.conf.5':
24
19
  path: 'usr/share/man/man5'
25
20
  owner: 'root'
@@ -14,7 +14,7 @@ gem_test_files: 'spec/**/*'
14
14
  gem_executables: 'puppet'
15
15
  gem_default_executables: 'puppet'
16
16
  gem_forge_project: 'puppet'
17
- gem_required_ruby_version: '>= 2.3.0'
17
+ gem_required_ruby_version: '>= 2.5.0'
18
18
  gem_required_rubygems_version: '> 1.3.1'
19
19
  gem_runtime_dependencies:
20
20
  facter: ['> 2.0.1', '< 5']
@@ -23,10 +23,10 @@ gem_runtime_dependencies:
23
23
  fast_gettext: '~> 1.1'
24
24
  locale: '~> 2.1'
25
25
  multi_json: '~> 1.10'
26
- httpclient: '~> 2.8'
27
26
  puppet-resource_api: '~>1.5'
28
27
  concurrent-ruby: '~> 1.0'
29
28
  deep_merge: '~> 1.0'
29
+ scanf: '~> 1.0'
30
30
  gem_rdoc_options:
31
31
  - --title
32
32
  - "Puppet - Configuration Management"
@@ -40,22 +40,10 @@ gem_platform_dependencies:
40
40
  x86-mingw32:
41
41
  gem_runtime_dependencies:
42
42
  ffi: ['> 1.9.24', '< 2']
43
- # win32-xxxx gems are pinned due to PUP-6445
44
- win32-dir: '= 0.4.9'
45
- win32-process: '= 0.7.5'
46
- # Use of win32-security is deprecated
47
- win32-security: '= 0.2.5'
48
- win32-service: '= 0.8.8'
49
43
  minitar: '~> 0.9'
50
44
  x64-mingw32:
51
45
  gem_runtime_dependencies:
52
46
  ffi: ['> 1.9.24', '< 2']
53
- # win32-xxxx gems are pinned due to PUP-6445
54
- win32-dir: '= 0.4.9'
55
- win32-process: '= 0.7.5'
56
- # Use of win32-security is deprecated
57
- win32-security: '= 0.2.5'
58
- win32-service: '= 0.8.8'
59
47
  minitar: '~> 0.9'
60
48
  bundle_platforms:
61
49
  universal-darwin: all
@@ -199,7 +199,6 @@ touch %{buildroot}%{_localstatedir}/log/puppet/masterhttp.log
199
199
  %config(noreplace) %{_sysconfdir}/tmpfiles.d/%{name}.conf
200
200
  %endif
201
201
  %config(noreplace) %{_sysconfdir}/puppet/puppet.conf
202
- %config(noreplace) %{_sysconfdir}/puppet/auth.conf
203
202
  %config(noreplace) %{_sysconfdir}/logrotate.d/puppet
204
203
  # We don't want to require emacs or vim, so we need to own these dirs
205
204
  %{_datadir}/emacs
@@ -1,22 +1,23 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'fileutils'
4
- require 'win32/daemon'
5
- require 'win32/dir'
6
- require 'win32/process'
4
+ require 'puppet/util/windows/daemon'
7
5
 
8
6
  # This file defines utilities for logging to eventlog. While it lives inside
9
7
  # Puppet, it is completely independent and loads no other parts of Puppet, so we
10
8
  # can safely require *just* it.
11
9
  require 'puppet/util/windows/eventlog'
12
10
 
13
- class WindowsDaemon < Win32::Daemon
11
+ # monkey patches ruby Process to add .create method
12
+ require 'puppet/util/windows/monkey_patches/process'
13
+
14
+ class WindowsDaemon < Puppet::Util::Windows::Daemon
14
15
  CREATE_NEW_CONSOLE = 0x00000010
15
16
 
16
17
  @run_thread = nil
17
18
  @LOG_TO_FILE = false
18
19
  @loglevel = 0
19
- LOG_FILE = File.expand_path(File.join(Dir::COMMON_APPDATA, 'PuppetLabs', 'puppet', 'var', 'log', 'windows.log'))
20
+ LOG_FILE = File.expand_path(File.join(ENV['ALLUSERSPROFILE'], 'PuppetLabs', 'puppet', 'var', 'log', 'windows.log'))
20
21
  LEVELS = [:debug, :info, :notice, :warning, :err, :alert, :emerg, :crit]
21
22
  LEVELS.each do |level|
22
23
  define_method("log_#{level}") do |msg|
data/install.rb CHANGED
@@ -178,6 +178,9 @@ def prepare_installation
178
178
  opts.on('--vardir[=OPTIONAL]', 'Installation directory for var files', 'Default /opt/puppetlabs/puppet/cache') do |vardir|
179
179
  InstallOptions.vardir = vardir
180
180
  end
181
+ opts.on('--publicdir[=OPTIONAL]', 'Installation directory for public files such as the `last_run_summary.yaml` report', 'Default /opt/puppetlabs/puppet/public') do |publicdir|
182
+ InstallOptions.publicdir = publicdir
183
+ end
181
184
  opts.on('--rundir[=OPTIONAL]', 'Installation directory for state files', 'Default /var/run/puppetlabs') do |rundir|
182
185
  InstallOptions.rundir = rundir
183
186
  end
@@ -242,20 +245,10 @@ def prepare_installation
242
245
  $operatingsystem = Facter.value :operatingsystem
243
246
  end
244
247
 
245
- if $operatingsystem == "windows"
246
- begin
247
- # populates constants used to specify default Windows directories
248
- require 'win32/dir'
249
- rescue LoadError => e
250
- puts "Cannot run on Microsoft Windows without the win32-process, win32-dir & win32-service gems: #{e}"
251
- exit(-1)
252
- end
253
- end
254
-
255
248
  if not InstallOptions.configdir.nil?
256
249
  configdir = InstallOptions.configdir
257
250
  elsif $operatingsystem == "windows"
258
- configdir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "etc")
251
+ configdir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "etc")
259
252
  else
260
253
  configdir = "/etc/puppetlabs/puppet"
261
254
  end
@@ -263,7 +256,7 @@ def prepare_installation
263
256
  if not InstallOptions.codedir.nil?
264
257
  codedir = InstallOptions.codedir
265
258
  elsif $operatingsystem == "windows"
266
- codedir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "code")
259
+ codedir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "code")
267
260
  else
268
261
  codedir = "/etc/puppetlabs/code"
269
262
  end
@@ -271,15 +264,23 @@ def prepare_installation
271
264
  if not InstallOptions.vardir.nil?
272
265
  vardir = InstallOptions.vardir
273
266
  elsif $operatingsystem == "windows"
274
- vardir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "cache")
267
+ vardir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "cache")
275
268
  else
276
269
  vardir = "/opt/puppetlabs/puppet/cache"
277
270
  end
278
271
 
272
+ if not InstallOptions.publicdir.nil?
273
+ publicdir = InstallOptions.publicdir
274
+ elsif $operatingsystem == "windows"
275
+ publicdir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "public")
276
+ else
277
+ publicdir = "/opt/puppetlabs/puppet/public"
278
+ end
279
+
279
280
  if not InstallOptions.rundir.nil?
280
281
  rundir = InstallOptions.rundir
281
282
  elsif $operatingsystem == "windows"
282
- rundir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "var", "run")
283
+ rundir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "var", "run")
283
284
  else
284
285
  rundir = "/var/run/puppetlabs"
285
286
  end
@@ -287,7 +288,7 @@ def prepare_installation
287
288
  if not InstallOptions.logdir.nil?
288
289
  logdir = InstallOptions.logdir
289
290
  elsif $operatingsystem == "windows"
290
- logdir = File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "var", "log")
291
+ logdir = File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "var", "log")
291
292
  else
292
293
  logdir = "/var/log/puppetlabs/puppet"
293
294
  end
@@ -302,7 +303,7 @@ def prepare_installation
302
303
  localedir = InstallOptions.localedir
303
304
  else
304
305
  if $operatingsystem == "windows"
305
- localedir = File.join(Dir::PROGRAM_FILES, "Puppet Labs", "Puppet", "puppet", "share", "locale")
306
+ localedir = File.join(ENV['PROGRAMFILES'], "Puppet Labs", "Puppet", "puppet", "share", "locale")
306
307
  else
307
308
  localedir = "/opt/puppetlabs/puppet/share/locale"
308
309
  end
@@ -342,6 +343,7 @@ def prepare_installation
342
343
  configdir = join(destdir, configdir)
343
344
  codedir = join(destdir, codedir)
344
345
  vardir = join(destdir, vardir)
346
+ publicdir = join(destdir, publicdir)
345
347
  rundir = join(destdir, rundir)
346
348
  logdir = join(destdir, logdir)
347
349
  bindir = join(destdir, bindir)
@@ -355,6 +357,7 @@ def prepare_installation
355
357
  FileUtils.makedirs(mandir)
356
358
  FileUtils.makedirs(sitelibdir)
357
359
  FileUtils.makedirs(vardir)
360
+ FileUtils.makedirs(publicdir)
358
361
  FileUtils.makedirs(rundir)
359
362
  FileUtils.makedirs(logdir)
360
363
  FileUtils.makedirs(localedir)
@@ -366,6 +369,7 @@ def prepare_installation
366
369
  InstallOptions.lib_dir = libdir
367
370
  InstallOptions.man_dir = mandir
368
371
  InstallOptions.var_dir = vardir
372
+ InstallOptions.public_dir = publicdir
369
373
  InstallOptions.run_dir = rundir
370
374
  InstallOptions.log_dir = logdir
371
375
  InstallOptions.locale_dir = localedir
@@ -474,7 +478,7 @@ end
474
478
  # Change directory into the puppet root so we don't get the wrong files for install.
475
479
  FileUtils.cd File.dirname(__FILE__) do
476
480
  # Set these values to what you want installed.
477
- configs = glob(%w{conf/auth.conf conf/puppet.conf conf/hiera.yaml})
481
+ configs = glob(%w{conf/puppet.conf conf/hiera.yaml})
478
482
  bins = glob(%w{bin/*})
479
483
  #rdoc = glob(%w{bin/* lib/**/*.rb README* }).reject { |e| e=~ /\.(bat|cmd)$/ }
480
484
  #ri = glob(%w{bin/*.rb lib/**/*.rb}).reject { |e| e=~ /\.(bat|cmd)$/ }
data/lib/puppet.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  require 'puppet/version'
2
2
  require 'puppet/concurrent/synchronized'
3
3
 
4
- if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.3.0")
5
- raise LoadError, "Puppet #{Puppet.version} requires Ruby 2.3.0 or greater, found Ruby #{RUBY_VERSION.dup}."
4
+ if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.5.0")
5
+ raise LoadError, "Puppet #{Puppet.version} requires Ruby 2.5.0 or greater, found Ruby #{RUBY_VERSION.dup}."
6
6
  end
7
7
 
8
- Puppet::OLDEST_RECOMMENDED_RUBY_VERSION = '2.3.0'
8
+ Puppet::OLDEST_RECOMMENDED_RUBY_VERSION = '2.5.0'
9
9
 
10
10
  $LOAD_PATH.extend(Puppet::Concurrent::Synchronized)
11
11
 
@@ -27,16 +27,16 @@ require 'puppet/external/pson/pure'
27
27
  require 'puppet/gettext/config'
28
28
  require 'puppet/defaults'
29
29
 
30
-
31
- #------------------------------------------------------------
32
- # the top-level module
30
+ # Defines the `Puppet` module. There are different entry points into Puppet
31
+ # depending on your use case.
33
32
  #
34
- # all this really does is dictate how the whole system behaves, through
35
- # preferences for things like debugging
33
+ # To use puppet as a library, see {Puppet::Pal}.
36
34
  #
37
- # it's also a place to find top-level commands like 'debug'
38
-
39
- # The main Puppet class. Everything is contained here.
35
+ # To create a new application, see {Puppet::Application}.
36
+ #
37
+ # To create a new function, see {Puppet::Functions}.
38
+ #
39
+ # To access puppet's REST APIs, see https://puppet.com/docs/puppet/latest/http_api/http_api_index.html.
40
40
  #
41
41
  # @api public
42
42
  module Puppet
@@ -97,12 +97,6 @@ module Puppet
97
97
  # Load the base features.
98
98
  require 'puppet/feature/base'
99
99
 
100
- # Store a new default value.
101
- def self.define_settings(section, hash)
102
- Puppet.deprecation_warning('The method Puppet.define_settings is deprecated and will be removed in a future release')
103
- @@settings.define_settings(section, hash)
104
- end
105
-
106
100
  # setting access and stuff
107
101
  def self.[]=(param,value)
108
102
  @@settings[param] = value
@@ -245,7 +239,6 @@ module Puppet
245
239
 
246
240
  {
247
241
  :environments => Puppet::Environments::Cached.new(Puppet::Environments::Combined.new(*loaders)),
248
- :http_pool => proc { Puppet.runtime[:http].pool },
249
242
  :ssl_context => proc {
250
243
  begin
251
244
  cert = Puppet::X509::CertProvider.new
@@ -260,7 +253,6 @@ module Puppet
260
253
  raise e
261
254
  end
262
255
  },
263
- :ssl_host => proc { Puppet::SSL::Host.localhost(true) },
264
256
  :http_session => proc { Puppet.runtime[:http].create_session },
265
257
  :plugins => proc { Puppet::Plugins::Configuration.load_plugins },
266
258
  :rich_data => false
@@ -364,7 +356,6 @@ require 'puppet/ssl'
364
356
  require 'puppet/module'
365
357
  require 'puppet/data_binding'
366
358
  require 'puppet/util/storage'
367
- require 'puppet/status'
368
359
  require 'puppet/file_bucket/file'
369
360
  require 'puppet/plugins/configuration'
370
361
  require 'puppet/pal/pal_api'
@@ -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