puppet 6.13.0 → 6.18.0

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 (461) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +4 -2
  5. data/Gemfile.lock +36 -32
  6. data/README.md +17 -24
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/application/agent.rb +26 -17
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/describe.rb +7 -5
  13. data/lib/puppet/application/device.rb +2 -2
  14. data/lib/puppet/application/filebucket.rb +19 -15
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +58 -57
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  21. data/lib/puppet/confine.rb +2 -2
  22. data/lib/puppet/confine/any.rb +1 -1
  23. data/lib/puppet/context/trusted_information.rb +14 -8
  24. data/lib/puppet/daemon.rb +13 -27
  25. data/lib/puppet/defaults.rb +92 -12
  26. data/lib/puppet/environments.rb +4 -5
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/plugin.rb +2 -2
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  33. data/lib/puppet/file_serving/metadata.rb +4 -1
  34. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  35. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  36. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  37. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  38. data/lib/puppet/file_system/file_impl.rb +17 -13
  39. data/lib/puppet/file_system/uniquefile.rb +12 -16
  40. data/lib/puppet/forge.rb +1 -1
  41. data/lib/puppet/forge/cache.rb +1 -1
  42. data/lib/puppet/forge/repository.rb +4 -7
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  45. data/lib/puppet/functions/filter.rb +1 -0
  46. data/lib/puppet/functions/lstrip.rb +4 -4
  47. data/lib/puppet/functions/reduce.rb +2 -4
  48. data/lib/puppet/functions/reverse_each.rb +1 -1
  49. data/lib/puppet/functions/rstrip.rb +4 -4
  50. data/lib/puppet/functions/step.rb +1 -1
  51. data/lib/puppet/functions/strip.rb +4 -4
  52. data/lib/puppet/gettext/config.rb +5 -5
  53. data/lib/puppet/gettext/module_translations.rb +4 -4
  54. data/lib/puppet/http.rb +3 -0
  55. data/lib/puppet/http/client.rb +263 -73
  56. data/lib/puppet/http/external_client.rb +90 -0
  57. data/lib/puppet/http/redirector.rb +43 -7
  58. data/lib/puppet/http/resolver.rb +46 -3
  59. data/lib/puppet/http/resolver/server_list.rb +76 -16
  60. data/lib/puppet/http/resolver/settings.rb +23 -3
  61. data/lib/puppet/http/resolver/srv.rb +29 -3
  62. data/lib/puppet/http/response.rb +87 -1
  63. data/lib/puppet/http/retry_after_handler.rb +39 -0
  64. data/lib/puppet/http/service.rb +97 -12
  65. data/lib/puppet/http/service/ca.rb +76 -14
  66. data/lib/puppet/http/service/compiler.rb +249 -16
  67. data/lib/puppet/http/service/file_server.rb +141 -20
  68. data/lib/puppet/http/service/report.rb +47 -17
  69. data/lib/puppet/http/session.rb +96 -7
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/rest.rb +42 -0
  75. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  76. data/lib/puppet/indirector/file_content/http.rb +5 -0
  77. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  78. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  79. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/node/rest.rb +24 -0
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/report/rest.rb +19 -0
  85. data/lib/puppet/indirector/report/yaml.rb +23 -0
  86. data/lib/puppet/indirector/request.rb +1 -1
  87. data/lib/puppet/indirector/rest.rb +12 -0
  88. data/lib/puppet/indirector/status/rest.rb +18 -0
  89. data/lib/puppet/loaders.rb +6 -0
  90. data/lib/puppet/metatype/manager.rb +80 -80
  91. data/lib/puppet/module.rb +1 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  94. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  95. data/lib/puppet/network/http/base_pool.rb +7 -2
  96. data/lib/puppet/network/http/compression.rb +7 -0
  97. data/lib/puppet/network/http/connection.rb +2 -0
  98. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  99. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  100. data/lib/puppet/network/http/pool.rb +8 -5
  101. data/lib/puppet/network/http/route.rb +2 -2
  102. data/lib/puppet/network/http_pool.rb +2 -1
  103. data/lib/puppet/node/environment.rb +22 -5
  104. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  105. data/lib/puppet/pal/pal_impl.rb +30 -31
  106. data/lib/puppet/parameter.rb +1 -1
  107. data/lib/puppet/parser/ast/leaf.rb +5 -5
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  109. data/lib/puppet/parser/compiler.rb +43 -33
  110. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  111. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  112. data/lib/puppet/parser/environment_compiler.rb +4 -1
  113. data/lib/puppet/parser/functions.rb +18 -9
  114. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  115. data/lib/puppet/parser/functions/filter.rb +1 -0
  116. data/lib/puppet/parser/resource.rb +3 -2
  117. data/lib/puppet/parser/resource/param.rb +6 -0
  118. data/lib/puppet/parser/type_loader.rb +2 -2
  119. data/lib/puppet/pops/adaptable.rb +7 -13
  120. data/lib/puppet/pops/adapters.rb +8 -4
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  122. data/lib/puppet/pops/issues.rb +5 -0
  123. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  124. data/lib/puppet/pops/loaders.rb +24 -15
  125. data/lib/puppet/pops/lookup/context.rb +1 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/group/groupadd.rb +9 -4
  133. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  134. data/lib/puppet/provider/package/aix.rb +17 -2
  135. data/lib/puppet/provider/package/apt.rb +98 -1
  136. data/lib/puppet/provider/package/aptitude.rb +1 -1
  137. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  138. data/lib/puppet/provider/package/gem.rb +45 -9
  139. data/lib/puppet/provider/package/pacman.rb +2 -5
  140. data/lib/puppet/provider/package/pip.rb +143 -48
  141. data/lib/puppet/provider/package/pip3.rb +0 -2
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +16 -4
  144. data/lib/puppet/provider/package/portage.rb +2 -2
  145. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  146. data/lib/puppet/provider/package/rpm.rb +6 -213
  147. data/lib/puppet/provider/package/yum.rb +100 -20
  148. data/lib/puppet/provider/package/zypper.rb +62 -1
  149. data/lib/puppet/provider/service/systemd.rb +22 -4
  150. data/lib/puppet/provider/service/windows.rb +23 -7
  151. data/lib/puppet/provider/user/aix.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +16 -5
  154. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  155. data/lib/puppet/reports/http.rb +15 -9
  156. data/lib/puppet/resource.rb +2 -1
  157. data/lib/puppet/resource/type.rb +8 -0
  158. data/lib/puppet/resource/type_collection.rb +20 -16
  159. data/lib/puppet/runtime.rb +31 -1
  160. data/lib/puppet/settings.rb +3 -1
  161. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  162. data/lib/puppet/ssl.rb +1 -0
  163. data/lib/puppet/ssl/host.rb +4 -4
  164. data/lib/puppet/ssl/oids.rb +1 -0
  165. data/lib/puppet/ssl/ssl_context.rb +2 -2
  166. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  167. data/lib/puppet/ssl/state_machine.rb +81 -35
  168. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  169. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  170. data/lib/puppet/test/test_helper.rb +21 -14
  171. data/lib/puppet/transaction.rb +2 -2
  172. data/lib/puppet/transaction/persistence.rb +1 -1
  173. data/lib/puppet/transaction/report.rb +3 -3
  174. data/lib/puppet/trusted_external.rb +29 -1
  175. data/lib/puppet/type.rb +21 -8
  176. data/lib/puppet/type/file.rb +51 -13
  177. data/lib/puppet/type/file/checksum.rb +4 -4
  178. data/lib/puppet/type/file/source.rb +75 -64
  179. data/lib/puppet/type/notify.rb +2 -2
  180. data/lib/puppet/type/package.rb +41 -3
  181. data/lib/puppet/type/service.rb +59 -8
  182. data/lib/puppet/type/user.rb +19 -29
  183. data/lib/puppet/util.rb +41 -3
  184. data/lib/puppet/util/at_fork.rb +1 -1
  185. data/lib/puppet/util/autoload.rb +13 -25
  186. data/lib/puppet/util/character_encoding.rb +9 -5
  187. data/lib/puppet/util/checksums.rb +19 -4
  188. data/lib/puppet/util/execution.rb +2 -2
  189. data/lib/puppet/util/fileparsing.rb +2 -2
  190. data/lib/puppet/util/instance_loader.rb +14 -10
  191. data/lib/puppet/util/log/destinations.rb +1 -10
  192. data/lib/puppet/util/package/version/debian.rb +175 -0
  193. data/lib/puppet/util/package/version/gem.rb +15 -0
  194. data/lib/puppet/util/package/version/pip.rb +167 -0
  195. data/lib/puppet/util/package/version/range.rb +53 -0
  196. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  197. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  198. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  199. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  200. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  201. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  202. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  203. data/lib/puppet/util/package/version/rpm.rb +73 -0
  204. data/lib/puppet/util/pidlock.rb +13 -7
  205. data/lib/puppet/util/platform.rb +5 -0
  206. data/lib/puppet/util/provider_features.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/rpm_compare.rb +193 -0
  209. data/lib/puppet/util/windows.rb +1 -0
  210. data/lib/puppet/util/windows/adsi.rb +2 -2
  211. data/lib/puppet/util/windows/api_types.rb +60 -33
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  214. data/lib/puppet/util/windows/principal.rb +8 -6
  215. data/lib/puppet/util/windows/process.rb +15 -14
  216. data/lib/puppet/util/windows/registry.rb +11 -11
  217. data/lib/puppet/util/windows/security.rb +5 -4
  218. data/lib/puppet/util/windows/service.rb +43 -26
  219. data/lib/puppet/util/windows/sid.rb +3 -3
  220. data/lib/puppet/util/windows/user.rb +242 -8
  221. data/lib/puppet/version.rb +1 -1
  222. data/locales/puppet.pot +641 -511
  223. data/man/man5/puppet.conf.5 +75 -10
  224. data/man/man8/puppet-agent.8 +7 -7
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-catalog.8 +1 -1
  227. data/man/man8/puppet-config.8 +1 -1
  228. data/man/man8/puppet-describe.8 +1 -1
  229. data/man/man8/puppet-device.8 +2 -2
  230. data/man/man8/puppet-doc.8 +1 -1
  231. data/man/man8/puppet-epp.8 +1 -1
  232. data/man/man8/puppet-facts.8 +1 -1
  233. data/man/man8/puppet-filebucket.8 +17 -2
  234. data/man/man8/puppet-generate.8 +1 -1
  235. data/man/man8/puppet-help.8 +6 -3
  236. data/man/man8/puppet-key.8 +1 -1
  237. data/man/man8/puppet-lookup.8 +2 -2
  238. data/man/man8/puppet-man.8 +1 -1
  239. data/man/man8/puppet-module.8 +4 -1
  240. data/man/man8/puppet-node.8 +1 -1
  241. data/man/man8/puppet-parser.8 +1 -1
  242. data/man/man8/puppet-plugin.8 +1 -1
  243. data/man/man8/puppet-report.8 +1 -1
  244. data/man/man8/puppet-resource.8 +1 -1
  245. data/man/man8/puppet-script.8 +1 -1
  246. data/man/man8/puppet-ssl.8 +2 -2
  247. data/man/man8/puppet-status.8 +1 -1
  248. data/man/man8/puppet.8 +2 -2
  249. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  250. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  251. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  252. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  253. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  254. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  255. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  256. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  257. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  259. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  260. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  261. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  262. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
  263. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
  264. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
  265. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
  266. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
  267. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
  268. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
  269. data/spec/integration/application/agent_spec.rb +475 -0
  270. data/spec/integration/application/apply_spec.rb +279 -150
  271. data/spec/integration/application/config_spec.rb +74 -0
  272. data/spec/integration/application/doc_spec.rb +16 -6
  273. data/spec/integration/application/filebucket_spec.rb +239 -0
  274. data/spec/integration/application/help_spec.rb +42 -0
  275. data/spec/integration/application/lookup_spec.rb +13 -0
  276. data/spec/integration/application/module_spec.rb +68 -0
  277. data/spec/integration/application/plugin_spec.rb +123 -0
  278. data/spec/integration/data_binding_spec.rb +82 -0
  279. data/spec/integration/defaults_spec.rb +1 -2
  280. data/spec/integration/directory_environments_spec.rb +17 -17
  281. data/spec/integration/http/client_spec.rb +47 -37
  282. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  283. data/spec/integration/indirector/report/yaml.rb +83 -0
  284. data/spec/integration/network/http_pool_spec.rb +93 -20
  285. data/spec/integration/node/environment_spec.rb +15 -0
  286. data/spec/integration/parser/compiler_spec.rb +11 -0
  287. data/spec/integration/type/file_spec.rb +1 -1
  288. data/spec/integration/util/execution_spec.rb +22 -0
  289. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  290. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  291. data/spec/integration/util/windows/process_spec.rb +26 -32
  292. data/spec/integration/util/windows/registry_spec.rb +7 -7
  293. data/spec/integration/util/windows/user_spec.rb +47 -5
  294. data/spec/integration/util_spec.rb +7 -33
  295. data/spec/lib/puppet/test_ca.rb +2 -2
  296. data/spec/lib/puppet_spec/https.rb +16 -7
  297. data/spec/lib/puppet_spec/matchers.rb +0 -80
  298. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  299. data/spec/shared_contexts/https.rb +29 -0
  300. data/spec/unit/agent_spec.rb +80 -26
  301. data/spec/unit/application/agent_spec.rb +12 -9
  302. data/spec/unit/application/describe_spec.rb +88 -50
  303. data/spec/unit/application/device_spec.rb +2 -2
  304. data/spec/unit/application/face_base_spec.rb +6 -4
  305. data/spec/unit/application/facts_spec.rb +39 -10
  306. data/spec/unit/application/filebucket_spec.rb +22 -2
  307. data/spec/unit/application/man_spec.rb +52 -0
  308. data/spec/unit/application/resource_spec.rb +3 -1
  309. data/spec/unit/application/ssl_spec.rb +15 -2
  310. data/spec/unit/configurer/downloader_spec.rb +10 -0
  311. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  312. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  313. data/spec/unit/configurer_spec.rb +64 -46
  314. data/spec/unit/confine_spec.rb +2 -1
  315. data/spec/unit/context/trusted_information_spec.rb +25 -2
  316. data/spec/unit/daemon_spec.rb +5 -64
  317. data/spec/unit/defaults_spec.rb +24 -1
  318. data/spec/unit/environments_spec.rb +8 -0
  319. data/spec/unit/face/config_spec.rb +3 -1
  320. data/spec/unit/face/module/search_spec.rb +17 -0
  321. data/spec/unit/face/plugin_spec.rb +12 -10
  322. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  323. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  324. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  325. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  326. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  327. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  328. data/spec/unit/file_system_spec.rb +10 -0
  329. data/spec/unit/functions/lookup_spec.rb +13 -0
  330. data/spec/unit/http/client_spec.rb +321 -36
  331. data/spec/unit/http/external_client_spec.rb +201 -0
  332. data/spec/unit/http/resolver_spec.rb +34 -3
  333. data/spec/unit/http/response_spec.rb +75 -0
  334. data/spec/unit/http/service/ca_spec.rb +53 -12
  335. data/spec/unit/http/service/compiler_spec.rb +332 -28
  336. data/spec/unit/http/service/file_server_spec.rb +100 -12
  337. data/spec/unit/http/service/report_spec.rb +19 -9
  338. data/spec/unit/http/service_spec.rb +94 -6
  339. data/spec/unit/http/session_spec.rb +159 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  341. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  342. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  343. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  344. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  345. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  346. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  348. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  349. data/spec/unit/indirector/request_spec.rb +1 -1
  350. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  351. data/spec/unit/indirector/rest_spec.rb +13 -0
  352. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  353. data/spec/unit/interface_spec.rb +3 -3
  354. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  355. data/spec/unit/network/format_support_spec.rb +3 -2
  356. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  357. data/spec/unit/network/http/connection_spec.rb +552 -190
  358. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  359. data/spec/unit/network/http/pool_spec.rb +59 -13
  360. data/spec/unit/network/http_pool_spec.rb +63 -57
  361. data/spec/unit/network/http_spec.rb +1 -1
  362. data/spec/unit/node/environment_spec.rb +33 -0
  363. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  364. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  365. data/spec/unit/parser/scope_spec.rb +1 -1
  366. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  367. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  368. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  369. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  370. data/spec/unit/provider/group/groupadd_spec.rb +22 -8
  371. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  372. data/spec/unit/provider/package/aix_spec.rb +29 -0
  373. data/spec/unit/provider/package/apt_spec.rb +107 -0
  374. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  375. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  376. data/spec/unit/provider/package/gem_spec.rb +40 -0
  377. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  378. data/spec/unit/provider/package/pip_spec.rb +68 -19
  379. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  380. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  381. data/spec/unit/provider/package/portage_spec.rb +5 -0
  382. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  383. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  384. data/spec/unit/provider/package/yum_spec.rb +243 -1
  385. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  386. data/spec/unit/provider/service/init_spec.rb +42 -0
  387. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  388. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  389. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  390. data/spec/unit/provider/service/systemd_spec.rb +93 -18
  391. data/spec/unit/provider/service/windows_spec.rb +50 -14
  392. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  393. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  394. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  395. data/spec/unit/puppet_pal_2pec.rb +11 -0
  396. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  397. data/spec/unit/puppet_spec.rb +33 -0
  398. data/spec/unit/reports/http_spec.rb +70 -52
  399. data/spec/unit/reports/store_spec.rb +17 -13
  400. data/spec/unit/resource_spec.rb +3 -3
  401. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  402. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  403. data/spec/unit/ssl/host_spec.rb +4 -2
  404. data/spec/unit/ssl/oids_spec.rb +1 -0
  405. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  406. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  407. data/spec/unit/test/test_helper_spec.rb +17 -0
  408. data/spec/unit/transaction/persistence_spec.rb +15 -0
  409. data/spec/unit/transaction/report_spec.rb +5 -1
  410. data/spec/unit/transaction_spec.rb +0 -2
  411. data/spec/unit/type/file/ensure_spec.rb +1 -2
  412. data/spec/unit/type/file/source_spec.rb +89 -38
  413. data/spec/unit/type/file_spec.rb +122 -96
  414. data/spec/unit/type/service_spec.rb +218 -8
  415. data/spec/unit/type/user_spec.rb +32 -3
  416. data/spec/unit/type_spec.rb +50 -0
  417. data/spec/unit/util/at_fork_spec.rb +3 -2
  418. data/spec/unit/util/autoload_spec.rb +2 -1
  419. data/spec/unit/util/character_encoding_spec.rb +4 -4
  420. data/spec/unit/util/checksums_spec.rb +16 -0
  421. data/spec/unit/util/command_line_spec.rb +11 -6
  422. data/spec/unit/util/log/destinations_spec.rb +1 -29
  423. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  424. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  425. data/spec/unit/util/package/version/range_spec.rb +175 -0
  426. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  427. data/spec/unit/util/pidlock_spec.rb +102 -54
  428. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  429. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util/windows/sid_spec.rb +2 -2
  433. data/spec/unit/util_spec.rb +3 -3
  434. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  435. data/tasks/generate_cert_fixtures.rake +15 -1
  436. data/tasks/manpages.rake +5 -35
  437. metadata +84 -52
  438. data/COMMITTERS.md +0 -244
  439. data/spec/integration/faces/config_spec.rb +0 -91
  440. data/spec/integration/faces/documentation_spec.rb +0 -57
  441. data/spec/integration/faces/plugin_spec.rb +0 -61
  442. data/spec/integration/file_bucket/file_spec.rb +0 -50
  443. data/spec/integration/file_serving/content_spec.rb +0 -7
  444. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  445. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  446. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  447. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  448. data/spec/integration/module_tool/forge_spec.rb +0 -64
  449. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  450. data/spec/integration/provider/service/init_spec.rb +0 -48
  451. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  452. data/spec/integration/provider/service/windows_spec.rb +0 -50
  453. data/spec/integration/reference/providers_spec.rb +0 -21
  454. data/spec/integration/reports_spec.rb +0 -13
  455. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  456. data/spec/integration/ssl/host_spec.rb +0 -72
  457. data/spec/integration/ssl/key_spec.rb +0 -99
  458. data/spec/integration/test/test_helper_spec.rb +0 -31
  459. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  460. data/spec/unit/face/man_spec.rb +0 -25
  461. data/spec/unit/man_spec.rb +0 -31
@@ -39,6 +39,7 @@ class Puppet::Application::Agent < Puppet::Application
39
39
  :graph => true,
40
40
  :fingerprint => false,
41
41
  :sourceaddress => nil,
42
+ :start_time => Time.now,
42
43
  }.each do |opt,val|
43
44
  options[opt] = val
44
45
  end
@@ -90,7 +91,7 @@ puppet-agent(8) -- #{summary}
90
91
 
91
92
  SYNOPSIS
92
93
  --------
93
- Retrieves the client configuration from the puppet master and applies it to
94
+ Retrieves the client configuration from the Puppet master and applies it to
94
95
  the local host.
95
96
 
96
97
  This service may be run as a daemon, run periodically using cron (or something
@@ -164,13 +165,15 @@ when signing certificates).
164
165
  only resources not tagged with the specified tags will be applied.
165
166
  Values must be comma-separated.
166
167
 
168
+
167
169
  OPTIONS
168
170
  -------
169
171
 
170
172
  Note that any Puppet setting that's valid in the configuration file is also a
171
173
  valid long argument. For example, 'server' is a valid setting, so you can
172
- specify '--server <servername>' as an argument. Boolean settings translate into
173
- '--setting' and '--no-setting' pairs.
174
+ specify '--server <servername>' as an argument. Boolean settings accept a '--no-'
175
+ prefix to turn off a behavior, translating into '--setting' and '--no-setting'
176
+ pairs, such as `--daemonize` and `--no-daemonize`.
174
177
 
175
178
  See the configuration file documentation at
176
179
  https://puppet.com/docs/puppet/latest/configuration.html for the
@@ -237,15 +240,14 @@ generated by running puppet agent with '--genconfig'.
237
240
  * --enable:
238
241
  Enable working on the local system. This removes any lock file,
239
242
  causing 'puppet agent' to start managing the local system again
240
- (although it will continue to use its normal scheduling, so it might
241
- not start for another half hour).
243
+ However, it continues to use its normal scheduling, so it might
244
+ not start for another half hour.
242
245
 
243
246
  'puppet agent' exits after executing this.
244
247
 
245
248
  * --evaltrace:
246
249
  Logs each resource as it is being evaluated. This allows you to interactively see exactly what is being done. (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-' prefix for boolean settings on the command line.)
247
250
 
248
-
249
251
  * --fingerprint:
250
252
  Display the current certificate or certificate signing request
251
253
  fingerprint and then exit. Use the '--digest' option to change the
@@ -256,7 +258,9 @@ generated by running puppet agent with '--genconfig'.
256
258
 
257
259
  * --job-id:
258
260
  Attach the specified job id to the catalog request and the report used for
259
- this agent run. This option only works when '--onetime' is used.
261
+ this agent run. This option only works when '--onetime' is used. When using
262
+ Puppet Enterprise this flag should not be used as the orchestrator sets the
263
+ job-id for you and it must be unique.
260
264
 
261
265
  * --logdest:
262
266
  Where to send log messages. Choose between 'syslog' (the POSIX syslog
@@ -278,7 +282,7 @@ generated by running puppet agent with '--genconfig'.
278
282
 
279
283
  * --noop:
280
284
  Use 'noop' mode where the daemon runs in a no-op or dry-run mode. This
281
- is useful for seeing what changes Puppet will make without actually
285
+ is useful for seeing what changes Puppet would make without actually
282
286
  executing the changes.
283
287
  (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-'
284
288
  prefix for boolean settings on the command line.)
@@ -302,8 +306,6 @@ generated by running puppet agent with '--genconfig'.
302
306
  * --trace
303
307
  Prints stack traces on some errors. (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-' prefix for boolean settings on the command line.)
304
308
 
305
-
306
-
307
309
  * --verbose:
308
310
  Turn on verbose reporting.
309
311
 
@@ -317,8 +319,7 @@ generated by running puppet agent with '--genconfig'.
317
319
  it to sign a certificate request. This is useful for the initial setup
318
320
  of a puppet client. You can turn off waiting for certificates by
319
321
  specifying a time of 0.
320
- (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-'
321
- prefix for boolean settings on the command line.)
322
+ (This is a Puppet setting, and can go in puppet.conf.)
322
323
 
323
324
 
324
325
  EXAMPLE
@@ -364,8 +365,17 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
364
365
  daemon.set_signal_traps
365
366
 
366
367
  log_config if Puppet[:daemonize]
367
-
368
- Puppet.override(ssl_context: wait_for_certificates) do
368
+
369
+ # run ssl state machine, waiting if needed
370
+ ssl_context = wait_for_certificates
371
+
372
+ # Each application is responsible for pushing loaders onto the context.
373
+ # Use the current environment that has already been established, though
374
+ # it may change later during the configurer run.
375
+ env = Puppet.lookup(:current_environment)
376
+ Puppet.override(ssl_context: ssl_context,
377
+ current_environment: env,
378
+ loaders: Puppet::Pops::Loaders.new(env, true)) do
369
379
  if Puppet[:onetime]
370
380
  onetime(daemon)
371
381
  else
@@ -407,7 +417,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
407
417
 
408
418
  def onetime(daemon)
409
419
  begin
410
- exitstatus = daemon.agent.run(:job_id => options[:job_id])
420
+ exitstatus = daemon.agent.run({:job_id => options[:job_id], :start_time => options[:start_time]})
411
421
  rescue => detail
412
422
  Puppet.log_exception(detail)
413
423
  end
@@ -490,9 +500,8 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
490
500
  end
491
501
 
492
502
  def daemonize_process_when(should_daemonize)
493
- daemon = Puppet::Daemon.new(Puppet::Util::Pidlock.new(Puppet[:pidfile]))
503
+ daemon = Puppet::Daemon.new(@agent, Puppet::Util::Pidlock.new(Puppet[:pidfile]))
494
504
  daemon.argv = @argv
495
- daemon.agent = @agent
496
505
 
497
506
  daemon.daemonize if should_daemonize
498
507
 
@@ -190,7 +190,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
190
190
  text = Puppet::FileSystem.read(options[:catalog], :encoding => 'utf-8')
191
191
  end
192
192
  env = Puppet.lookup(:environments).get(Puppet[:environment])
193
- Puppet.override(:current_environment => env, :loaders => Puppet::Pops::Loaders.new(env)) do
193
+ Puppet.override(:current_environment => env, :loaders => create_loaders(env)) do
194
194
  catalog = read_catalog(text)
195
195
  apply_catalog(catalog)
196
196
  end
@@ -204,7 +204,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
204
204
  apply_environment = get_configured_environment(node, manifest)
205
205
 
206
206
  # TRANSLATORS "puppet apply" is a program command and should not be translated
207
- Puppet.override({:current_environment => apply_environment}, _("For puppet apply")) do
207
+ Puppet.override({:current_environment => apply_environment, :loaders => create_loaders(apply_environment)}, _("For puppet apply")) do
208
208
  configure_node_facts(node, facts)
209
209
 
210
210
  # Allow users to load the classes that puppet agent creates.
@@ -235,30 +235,23 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
235
235
  exit(1)
236
236
  end
237
237
 
238
- # Loaders are required when resolving deferred values and at the end
239
- # when apply_catalog is called - it is therefore used around all of the
240
- # required steps as it is expensive to set up loaders twice (once for
241
- # resolution and once for the apply).
242
- #
243
- exit_status = Puppet.override(:loaders => Puppet::Pops::Loaders.new(apply_environment)) do
238
+ # Resolve all deferred values and replace them / mutate the catalog
239
+ Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(node.facts, catalog)
244
240
 
245
- # Resolve all deferred values and replace them / mutate the catalog
246
- Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(node.facts, catalog)
241
+ # Translate it to a RAL catalog
242
+ catalog = catalog.to_ral
247
243
 
248
- # Translate it to a RAL catalog
249
- catalog = catalog.to_ral
244
+ catalog.finalize
250
245
 
251
- catalog.finalize
246
+ catalog.retrieval_duration = Time.now - starttime
252
247
 
253
- catalog.retrieval_duration = Time.now - starttime
248
+ if options[:write_catalog_summary]
249
+ catalog.write_class_file
250
+ catalog.write_resource_file
251
+ end
254
252
 
255
- if options[:write_catalog_summary]
256
- catalog.write_class_file
257
- catalog.write_resource_file
258
- end
253
+ exit_status = apply_catalog(catalog)
259
254
 
260
- apply_catalog(catalog)
261
- end
262
255
  if not exit_status
263
256
  exit(1)
264
257
  elsif options[:detailed_exitcodes] then
@@ -313,6 +306,11 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
313
306
 
314
307
  private
315
308
 
309
+ def create_loaders(env)
310
+ # Ignore both 'cached_puppet_lib' and pcore resource type loaders
311
+ Puppet::Pops::Loaders.new(env, false, false)
312
+ end
313
+
316
314
  def read_catalog(text)
317
315
  facts = get_facts()
318
316
  node = get_node()
@@ -67,13 +67,15 @@ class TypeDoc
67
67
  @types.keys.sort_by(&:to_s).each do |name|
68
68
  type = @types[name]
69
69
  s = type.doc.gsub(/\s+/, " ")
70
- n = s.index(". ")
71
- if n.nil?
70
+ if s.empty?
72
71
  s = ".. no documentation .."
73
- elsif n > 45
74
- s = s[0, 45] + " ..."
75
72
  else
76
- s = s[0, n]
73
+ n = s.index(".") || s.length
74
+ if n > 45
75
+ s = s[0, 45] + " ..."
76
+ else
77
+ s = s[0, n]
78
+ end
77
79
  end
78
80
  printf "%-15s - %s\n", name, s
79
81
  end
@@ -194,7 +194,7 @@ you can specify '--server <servername>' as an argument.
194
194
 
195
195
  * --resource:
196
196
  Displays a resource state as Puppet code, roughly equivalent to
197
- `puppet resource`. Can be filterd by title. Requires --target be specified.
197
+ `puppet resource`. Can be filtered by title. Requires --target be specified.
198
198
 
199
199
  * --target:
200
200
  Target a specific device/certificate in the device.conf. Doing so will perform a
@@ -259,7 +259,7 @@ Licensed under the Apache 2.0 License
259
259
  end
260
260
  end
261
261
  devices.collect do |devicename,device|
262
- pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
262
+ pool = Puppet.runtime[:http].pool
263
263
  Puppet.override(:http_pool => pool) do
264
264
  # TODO when we drop support for ruby < 2.5 we can remove the extra block here
265
265
  begin
@@ -69,6 +69,19 @@ running as a user with valid Puppet certificates. Alternatively, you can
69
69
  use your local file bucket by specifying '--local', or by specifying
70
70
  '--bucket' with a local path.
71
71
 
72
+ > **Note**: Enabling and using the backup option, and by extension the
73
+ filebucket resource, requires appropriate planning and management to ensure
74
+ that sufficient disk space is available for the file backups. Generally, you
75
+ can implement this using one of the following two options:
76
+ - Use a `find` command and `crontab` entry to retain only the last X days
77
+ of file backups. For example:
78
+
79
+ ```shell
80
+ find /opt/puppetlabs/server/data/puppetserver/bucket -type f -mtime +45 -atime +45 -print0 | xargs -0 rm
81
+ ```
82
+
83
+ - Restrict the directory to a maximum size after which the oldest items are removed.
84
+
72
85
 
73
86
  OPTIONS
74
87
  -------
@@ -108,7 +121,7 @@ configuration options can also be generated by running puppet with
108
121
  by default.
109
122
 
110
123
  * --server_list:
111
- A list of comma seperated servers; only the first entry is used for file storage.
124
+ A list of comma separated servers; only the first entry is used for file storage.
112
125
  This setting takes precidence over `server`.
113
126
 
114
127
  * --server:
@@ -279,7 +292,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
279
292
  Puppet::Log.level = :info
280
293
  end
281
294
 
282
- exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
295
+ exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
283
296
 
284
297
  require 'puppet/file_bucket/dipper'
285
298
  begin
@@ -287,19 +300,10 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
287
300
  path = options[:bucket] || Puppet[:clientbucketdir]
288
301
  @client = Puppet::FileBucket::Dipper.new(:Path => path)
289
302
  else
290
- if Puppet[:server_list] && !Puppet[:server_list].empty?
291
- server = Puppet[:server_list].first
292
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
293
- Puppet.debug _("Selected server from first entry of the `server_list` setting: %{server}:%{port}") % {server: server[0], port: server[1]}
294
- @client = Puppet::FileBucket::Dipper.new(
295
- :Server => server[0],
296
- :Port => server[1]
297
- )
298
- else
299
- #TRANSLATORS 'server' is the name of a setting and should not be translated
300
- Puppet.debug _("Selected server from the `server` setting: %{server}") % {server: Puppet[:server]}
301
- @client = Puppet::FileBucket::Dipper.new(:Server => Puppet[:server])
302
- end
303
+ session = Puppet.lookup(:http_session)
304
+ api = session.route_to(:puppet)
305
+
306
+ @client = Puppet::FileBucket::Dipper.new(Server: api.url.host, Port: api.url.port)
303
307
  end
304
308
  rescue => detail
305
309
  Puppet.log_exception(detail)
@@ -90,8 +90,14 @@ class Puppet::Application::Lookup < Puppet::Application
90
90
 
91
91
  exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
92
92
 
93
- Puppet.settings.use :main, :master, :ssl, :metrics
94
-
93
+ if options[:node]
94
+ Puppet::Util.skip_external_facts do
95
+ Puppet.settings.use :main, :master, :ssl, :metrics
96
+ end
97
+ else
98
+ Puppet.settings.use :main, :master, :ssl, :metrics
99
+ end
100
+
95
101
  setup_terminuses
96
102
  end
97
103
 
@@ -102,7 +108,7 @@ class Puppet::Application::Lookup < Puppet::Application
102
108
  def help
103
109
  <<-HELP
104
110
 
105
- puppet lookup(8) -- #{summary}
111
+ puppet-lookup(8) -- #{summary}
106
112
  ========
107
113
 
108
114
  SYNOPSIS
@@ -364,6 +370,12 @@ Copyright (c) 2015 Puppet Inc., LLC Licensed under the Apache 2.0 License
364
370
 
365
371
  Puppet[:code] = 'undef' unless options[:compile]
366
372
  compiler = Puppet::Parser::Compiler.new(node)
367
- compiler.compile { |catalog| yield(compiler.topscope); catalog }
373
+ if options[:node]
374
+ Puppet::Util.skip_external_facts do
375
+ compiler.compile { |catalog| yield(compiler.topscope); catalog }
376
+ end
377
+ else
378
+ compiler.compile { |catalog| yield(compiler.topscope); catalog }
379
+ end
368
380
  end
369
381
  end
@@ -1,3 +1,4 @@
1
1
  require 'puppet/application/face_base'
2
2
  class Puppet::Application::Plugin < Puppet::Application::FaceBase
3
+ environment_mode :not_required
3
4
  end
@@ -28,7 +28,7 @@ OPTIONS
28
28
  -------
29
29
 
30
30
  * --help:
31
- Print this help messsge.
31
+ Print this help message.
32
32
 
33
33
  * --verbose:
34
34
  Print extra information.
@@ -90,7 +90,7 @@ HELP
90
90
  @cert_provider = Puppet::X509::CertProvider.new
91
91
  @ssl_provider = Puppet::SSL::SSLProvider.new
92
92
  @machine = Puppet::SSL::StateMachine.new
93
- @session = Puppet.runtime['http'].create_session
93
+ @session = Puppet.runtime[:http].create_session
94
94
  end
95
95
 
96
96
  def setup_logs
@@ -182,7 +182,7 @@ HELP
182
182
  route = create_route(ssl_context)
183
183
  Puppet.info _("Downloading certificate '%{name}' from %{url}") % { name: Puppet[:certname], url: route.url }
184
184
 
185
- x509 = route.get_certificate(Puppet[:certname], ssl_context: ssl_context)
185
+ _, x509 = route.get_certificate(Puppet[:certname], ssl_context: ssl_context)
186
186
  cert = OpenSSL::X509::Certificate.new(x509)
187
187
  Puppet.notice _("Downloaded certificate '%{name}' with fingerprint %{fingerprint}") % { name: Puppet[:certname], fingerprint: fingerprint(cert) }
188
188
 
@@ -226,7 +226,7 @@ HELP
226
226
  begin
227
227
  ssl_context = @machine.ensure_ca_certificates
228
228
  route = create_route(ssl_context)
229
- cert = route.get_certificate(certname, ssl_context: ssl_context)
229
+ _, cert = route.get_certificate(certname, ssl_context: ssl_context)
230
230
  rescue Puppet::HTTP::ResponseError => e
231
231
  if e.response.code.to_i != 404
232
232
  raise Puppet::Error.new(_("Failed to connect to the CA to determine if certificate %{certname} has been cleaned") % { certname: certname }, e)
@@ -1,6 +1,5 @@
1
1
  # The client for interacting with the puppetmaster config server.
2
2
  require 'timeout'
3
- require 'puppet/network/http_pool'
4
3
  require 'puppet/util'
5
4
  require 'securerandom'
6
5
  #require 'puppet/parser/script_compiler'
@@ -64,7 +63,7 @@ class Puppet::Configurer
64
63
  end
65
64
 
66
65
  # Get the remote catalog, yo. Returns nil if no catalog can be found.
67
- def retrieve_catalog(query_options)
66
+ def retrieve_catalog(facts, query_options)
68
67
  query_options ||= {}
69
68
  result = retrieve_catalog_from_cache(query_options) if Puppet[:use_cached_catalog]
70
69
  if result
@@ -72,7 +71,7 @@ class Puppet::Configurer
72
71
 
73
72
  Puppet.info _("Using cached catalog from environment '%{environment}'") % { environment: result.environment }
74
73
  else
75
- result = retrieve_new_catalog(query_options)
74
+ result = retrieve_new_catalog(facts, query_options)
76
75
 
77
76
  if !result
78
77
  if !Puppet[:usecacheonfailure]
@@ -99,12 +98,11 @@ class Puppet::Configurer
99
98
  end
100
99
 
101
100
  # Convert a plain resource catalog into our full host catalog.
102
- def convert_catalog(result, duration, options = {})
101
+ def convert_catalog(result, duration, facts, options = {})
103
102
  catalog = nil
104
103
 
105
104
  catalog_conversion_time = thinmark do
106
105
  # Will mutate the result and replace all Deferred values with resolved values
107
- facts = options[:convert_with_facts]
108
106
  if facts
109
107
  Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(facts, result)
110
108
  end
@@ -133,6 +131,7 @@ class Puppet::Configurer
133
131
  end
134
132
 
135
133
  facts_hash = {}
134
+ facts = nil
136
135
  if Puppet::Resource::Catalog.indirection.terminus_class == :rest
137
136
  # This is a bit complicated. We need the serialized and escaped facts,
138
137
  # and we need to know which format they're encoded in. Thus, we
@@ -141,15 +140,14 @@ class Puppet::Configurer
141
140
  # facts_for_uploading may set Puppet[:node_name_value] as a side effect
142
141
  facter_time = thinmark do
143
142
  facts = find_facts
144
- options[:convert_with_facts] = facts
145
143
  facts_hash = encode_facts(facts) # encode for uploading # was: facts_for_uploading
146
144
  end
147
145
  options[:report].add_times(:fact_generation, facter_time) if options[:report]
148
146
  end
149
- facts_hash
147
+ [facts_hash, facts]
150
148
  end
151
149
 
152
- def prepare_and_retrieve_catalog(cached_catalog, options, query_options)
150
+ def prepare_and_retrieve_catalog(cached_catalog, facts, options, query_options)
153
151
  # set report host name now that we have the fact
154
152
  options[:report].host = Puppet[:node_name_value]
155
153
 
@@ -165,7 +163,7 @@ class Puppet::Configurer
165
163
  catalog = cached_catalog || options[:catalog]
166
164
  unless catalog
167
165
  # retrieve_catalog returns resource catalog
168
- catalog = retrieve_catalog(query_options)
166
+ catalog = retrieve_catalog(facts, query_options)
169
167
  Puppet.err _("Could not retrieve catalog; skipping run") unless catalog
170
168
  end
171
169
  catalog
@@ -196,12 +194,12 @@ class Puppet::Configurer
196
194
  # This just passes any options on to the catalog,
197
195
  # which accepts :tags and :ignoreschedules.
198
196
  def run(options = {})
199
- pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
197
+ pool = Puppet.runtime[:http].pool
200
198
  # We create the report pre-populated with default settings for
201
199
  # environment and transaction_uuid very early, this is to ensure
202
200
  # they are sent regardless of any catalog compilation failures or
203
201
  # exceptions.
204
- options[:report] ||= Puppet::Transaction::Report.new(nil, @environment, @transaction_uuid, @job_id)
202
+ options[:report] ||= Puppet::Transaction::Report.new(nil, @environment, @transaction_uuid, @job_id, options[:start_time] || Time.now)
205
203
  report = options[:report]
206
204
  init_storage
207
205
 
@@ -210,13 +208,9 @@ class Puppet::Configurer
210
208
  completed = nil
211
209
  begin
212
210
  Puppet.override(:http_pool => pool) do
213
-
214
211
  # Skip failover logic if the server_list setting is empty
215
- if Puppet.settings[:server_list].nil? || Puppet.settings[:server_list].empty?
216
- do_failover = false
217
- else
218
- do_failover = true
219
- end
212
+ do_failover = Puppet.settings[:server_list] && !Puppet.settings[:server_list].empty?
213
+
220
214
  # When we are passed a catalog, that means we're in apply
221
215
  # mode. We shouldn't try to do any failover in that case.
222
216
  if options[:catalog].nil? && do_failover
@@ -224,8 +218,6 @@ class Puppet::Configurer
224
218
  if server.nil?
225
219
  raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: Puppet.settings.value(:server_list, Puppet[:environment].to_sym, true) }
226
220
  else
227
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
228
- Puppet.debug _("Selected puppet server from the `server_list` setting: %{server}:%{port}") % { server: server, port: port }
229
221
  report.master_used = "#{server}:#{port}"
230
222
  end
231
223
  Puppet.override(server: server, serverport: port) do
@@ -243,9 +235,13 @@ class Puppet::Configurer
243
235
  end
244
236
 
245
237
  def run_internal(options)
246
- start = Time.now
247
238
  report = options[:report]
248
239
 
240
+ if options[:start_time]
241
+ startup_time = Time.now - options[:start_time]
242
+ report.add_times(:startup_time, startup_time)
243
+ end
244
+
249
245
  # If a cached catalog is explicitly requested, attempt to retrieve it. Skip the node request,
250
246
  # don't pluginsync and switch to the catalog's environment if we successfully retrieve it.
251
247
  if Puppet[:use_cached_catalog]
@@ -273,7 +269,7 @@ class Puppet::Configurer
273
269
 
274
270
  begin
275
271
  unless Puppet[:node_name_fact].empty?
276
- query_options = get_facts(options)
272
+ query_options, facts = get_facts(options)
277
273
  end
278
274
 
279
275
  configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
@@ -306,6 +302,16 @@ class Puppet::Configurer
306
302
  @environment = node.environment.to_s
307
303
  report.environment = @environment
308
304
  query_options = nil
305
+ facts = nil
306
+
307
+ new_env = Puppet::Node::Environment.remote(@environment)
308
+ Puppet.push_context(
309
+ {
310
+ current_environment: new_env,
311
+ loaders: Puppet::Pops::Loaders.new(new_env, true)
312
+ },
313
+ "Local node environment #{@environment} for configurer transaction"
314
+ )
309
315
  else
310
316
  Puppet.info _("Using configured environment '%{env}'") % { env: @environment }
311
317
  end
@@ -316,25 +322,24 @@ class Puppet::Configurer
316
322
  end
317
323
  end
318
324
 
319
- current_environment = Puppet.lookup(:current_environment)
320
- if current_environment.name == @environment.intern
321
- local_node_environment = current_environment
322
- else
323
- local_node_environment = Puppet::Node::Environment.create(@environment,
324
- current_environment.modulepath,
325
- current_environment.manifest,
326
- current_environment.config_version)
325
+ # This is to maintain compatibility with anyone using this class
326
+ # aside from agent, apply, device.
327
+ unless Puppet.lookup(:loaders) { nil }
328
+ new_env = Puppet::Node::Environment.remote(@environment)
329
+ Puppet.push_context(
330
+ {
331
+ current_environment: new_env,
332
+ loaders: Puppet::Pops::Loaders.new(new_env, true)
333
+ },
334
+ "Local node environment #{@environment} for configurer transaction"
335
+ )
327
336
  end
328
- Puppet.push_context({
329
- :current_environment => local_node_environment,
330
- :loaders => Puppet::Pops::Loaders.new(local_node_environment, true)
331
- }, "Local node environment for configurer transaction")
332
337
 
333
- query_options = get_facts(options) unless query_options
338
+ query_options, facts = get_facts(options) unless query_options
334
339
  query_options[:configured_environment] = configured_environment
335
340
  options[:convert_for_node] = node
336
341
 
337
- catalog = prepare_and_retrieve_catalog(cached_catalog, options, query_options)
342
+ catalog = prepare_and_retrieve_catalog(cached_catalog, facts, options, query_options)
338
343
  unless catalog
339
344
  return nil
340
345
  end
@@ -357,11 +362,11 @@ class Puppet::Configurer
357
362
  @environment = catalog.environment
358
363
  report.environment = @environment
359
364
 
360
- query_options = get_facts(options)
365
+ query_options, facts = get_facts(options)
361
366
  query_options[:configured_environment] = configured_environment
362
367
 
363
368
  # if we get here, ignore the cached catalog
364
- catalog = prepare_and_retrieve_catalog(nil, options, query_options)
369
+ catalog = prepare_and_retrieve_catalog(nil, facts, options, query_options)
365
370
  return nil unless catalog
366
371
  tries += 1
367
372
  end
@@ -373,7 +378,7 @@ class Puppet::Configurer
373
378
  else
374
379
  # REMIND @duration is the time spent loading the last catalog, and doesn't
375
380
  # account for things like we failed to download and fell back to the cache
376
- ral_catalog = convert_catalog(catalog, @duration, options)
381
+ ral_catalog = convert_catalog(catalog, @duration, facts, options)
377
382
 
378
383
  # If not noop, commit the cached resource catalog (not ral catalog). Ideally
379
384
  # we'd just copy the downloaded response body, instead of serializing the
@@ -409,7 +414,7 @@ class Puppet::Configurer
409
414
  end
410
415
 
411
416
  report.cached_catalog_status ||= @cached_catalog_status
412
- report.add_times(:total, Time.now - start)
417
+ report.add_times(:total, Time.now - report.time)
413
418
  report.finalize_report
414
419
  Puppet::Util::Log.close(report)
415
420
  send_report(report)
@@ -418,21 +423,16 @@ class Puppet::Configurer
418
423
  private :run_internal
419
424
 
420
425
  def find_functional_server
421
- Puppet.settings[:server_list].each do |server|
422
- host = server[0]
423
- port = server[1] || Puppet[:masterport]
424
- begin
425
- ssl_context = Puppet.lookup(:ssl_context)
426
- http = Puppet::Network::HttpPool.connection(host, port.to_i, ssl_context: ssl_context)
427
- response = http.get('/status/v1/simple/master')
428
- return [host, port] if response.is_a?(Net::HTTPOK)
429
-
430
- Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
431
- { host: host, port: port, code: response.code, reason: response.message })
432
- rescue => detail
433
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
434
- Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
435
- end
426
+ begin
427
+ session = Puppet.lookup(:http_session)
428
+ service = session.route_to(:puppet)
429
+ return [service.url.host, service.url.port]
430
+ rescue Puppet::HTTP::ResponseError => e
431
+ Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
432
+ { host: e.response.url.host, port: e.response.url.port, code: e.response.code, reason: e.response.reason })
433
+ rescue => detail
434
+ #TRANSLATORS 'server_list' is the name of a setting and should not be translated
435
+ Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
436
436
  end
437
437
  [nil, nil]
438
438
  end
@@ -467,7 +467,7 @@ class Puppet::Configurer
467
467
  ::Facter.clear
468
468
  facts = find_facts
469
469
 
470
- client = Puppet.runtime['http']
470
+ client = Puppet.runtime[:http]
471
471
  session = client.create_session
472
472
  puppet = session.route_to(:puppet)
473
473
 
@@ -516,7 +516,7 @@ class Puppet::Configurer
516
516
  return nil
517
517
  end
518
518
 
519
- def retrieve_new_catalog(query_options)
519
+ def retrieve_new_catalog(facts, query_options)
520
520
  result = nil
521
521
  @duration = thinmark do
522
522
  result = Puppet::Resource::Catalog.indirection.find(
@@ -526,7 +526,8 @@ class Puppet::Configurer
526
526
  # don't update cache until after environment converges
527
527
  :ignore_cache_save => true,
528
528
  :environment => Puppet::Node::Environment.remote(@environment),
529
- :fail_on_404 => true
529
+ :fail_on_404 => true,
530
+ :facts_for_catalog => facts
530
531
  )
531
532
  )
532
533
  end