puppet 5.5.17-x64-mingw32 → 5.5.22-x64-mingw32

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

Potentially problematic release.


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

Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -5
  4. data/Gemfile.lock +59 -55
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +54 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet.rb +5 -2
  12. data/lib/puppet/agent.rb +5 -13
  13. data/lib/puppet/application.rb +1 -1
  14. data/lib/puppet/application/agent.rb +3 -1
  15. data/lib/puppet/application/apply.rb +2 -2
  16. data/lib/puppet/application/describe.rb +3 -9
  17. data/lib/puppet/application/doc.rb +1 -1
  18. data/lib/puppet/application/filebucket.rb +13 -0
  19. data/lib/puppet/application/lookup.rb +1 -1
  20. data/lib/puppet/application/script.rb +2 -2
  21. data/lib/puppet/configurer.rb +106 -31
  22. data/lib/puppet/configurer/downloader.rb +33 -16
  23. data/lib/puppet/daemon.rb +1 -1
  24. data/lib/puppet/defaults.rb +86 -40
  25. data/lib/puppet/error.rb +9 -1
  26. data/lib/puppet/external/nagios/base.rb +1 -1
  27. data/lib/puppet/face/ca.rb +1 -1
  28. data/lib/puppet/face/module/list.rb +5 -5
  29. data/lib/puppet/face/module/search.rb +1 -1
  30. data/lib/puppet/face/module/uninstall.rb +1 -1
  31. data/lib/puppet/face/module/upgrade.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  34. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  35. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  36. data/lib/puppet/file_system.rb +0 -8
  37. data/lib/puppet/file_system/memory_file.rb +1 -1
  38. data/lib/puppet/file_system/posix.rb +3 -2
  39. data/lib/puppet/file_system/uniquefile.rb +4 -0
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/functions/epp.rb +4 -4
  42. data/lib/puppet/functions/inline_epp.rb +5 -5
  43. data/lib/puppet/functions/new.rb +8 -3
  44. data/lib/puppet/functions/reduce.rb +2 -4
  45. data/lib/puppet/functions/reverse_each.rb +1 -1
  46. data/lib/puppet/functions/step.rb +1 -1
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +6 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/pool.rb +7 -1
  69. data/lib/puppet/network/http/rack/rest.rb +2 -2
  70. data/lib/puppet/network/http/site.rb +1 -1
  71. data/lib/puppet/network/resolver.rb +2 -2
  72. data/lib/puppet/node/environment.rb +11 -3
  73. data/lib/puppet/parser/ast.rb +1 -1
  74. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  75. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  76. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  77. data/lib/puppet/parser/environment_compiler.rb +3 -0
  78. data/lib/puppet/parser/functions.rb +14 -10
  79. data/lib/puppet/parser/functions/epp.rb +3 -3
  80. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  81. data/lib/puppet/parser/resource.rb +3 -2
  82. data/lib/puppet/parser/resource/param.rb +6 -0
  83. data/lib/puppet/pops/adaptable.rb +7 -13
  84. data/lib/puppet/pops/adapters.rb +8 -4
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  87. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  89. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  90. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  91. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  92. data/lib/puppet/pops/issues.rb +5 -0
  93. data/lib/puppet/pops/loaders.rb +1 -1
  94. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  95. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  96. data/lib/puppet/pops/merge_strategy.rb +22 -18
  97. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  98. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  99. data/lib/puppet/pops/parser/locator.rb +1 -1
  100. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  101. data/lib/puppet/pops/puppet_stack.rb +51 -48
  102. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  106. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  107. data/lib/puppet/pops/types/string_converter.rb +10 -10
  108. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  109. data/lib/puppet/pops/types/types.rb +3 -3
  110. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  111. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  112. data/lib/puppet/property.rb +1 -1
  113. data/lib/puppet/property/ensure.rb +1 -1
  114. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  115. data/lib/puppet/provider/cron/crontab.rb +1 -1
  116. data/lib/puppet/provider/exec.rb +6 -2
  117. data/lib/puppet/provider/group/groupadd.rb +19 -19
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  120. data/lib/puppet/provider/mount.rb +1 -1
  121. data/lib/puppet/provider/mount/parsed.rb +8 -8
  122. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  123. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +14 -3
  126. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  127. data/lib/puppet/provider/package/dpkg.rb +16 -18
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +4 -2
  130. data/lib/puppet/provider/package/openbsd.rb +14 -2
  131. data/lib/puppet/provider/package/pip.rb +37 -10
  132. data/lib/puppet/provider/package/pkg.rb +18 -5
  133. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  134. data/lib/puppet/provider/package/pkgng.rb +16 -4
  135. data/lib/puppet/provider/package/portage.rb +4 -4
  136. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  137. data/lib/puppet/provider/package/rpm.rb +6 -6
  138. data/lib/puppet/provider/package/windows/package.rb +1 -1
  139. data/lib/puppet/provider/package/yum.rb +28 -20
  140. data/lib/puppet/provider/package/zypper.rb +1 -0
  141. data/lib/puppet/provider/package_targetable.rb +5 -4
  142. data/lib/puppet/provider/parsedfile.rb +1 -1
  143. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  144. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  145. data/lib/puppet/provider/service/daemontools.rb +9 -9
  146. data/lib/puppet/provider/service/openbsd.rb +1 -1
  147. data/lib/puppet/provider/service/rcng.rb +2 -2
  148. data/lib/puppet/provider/service/runit.rb +2 -8
  149. data/lib/puppet/provider/service/systemd.rb +31 -13
  150. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  151. data/lib/puppet/provider/user/hpux.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +39 -20
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +1 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +10 -1
  164. data/lib/puppet/settings.rb +3 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +20 -12
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +8 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +7 -3
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +97 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +2 -8
  187. data/lib/puppet/type/user.rb +5 -9
  188. data/lib/puppet/util.rb +35 -12
  189. data/lib/puppet/util/autoload.rb +9 -7
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/http_proxy.rb +8 -14
  192. data/lib/puppet/util/instance_loader.rb +1 -1
  193. data/lib/puppet/util/log.rb +1 -1
  194. data/lib/puppet/util/log/destinations.rb +3 -12
  195. data/lib/puppet/util/logging.rb +30 -18
  196. data/lib/puppet/util/metric.rb +2 -2
  197. data/lib/puppet/util/monkey_patches.rb +1 -1
  198. data/lib/puppet/util/nagios_maker.rb +2 -2
  199. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  200. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  201. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  202. data/lib/puppet/util/pidlock.rb +12 -6
  203. data/lib/puppet/util/plist.rb +6 -0
  204. data/lib/puppet/util/provider_features.rb +2 -4
  205. data/lib/puppet/util/rdoc.rb +1 -1
  206. data/lib/puppet/util/reference.rb +1 -1
  207. data/lib/puppet/util/resource_template.rb +1 -1
  208. data/lib/puppet/util/selinux.rb +3 -1
  209. data/lib/puppet/util/windows/adsi.rb +60 -30
  210. data/lib/puppet/util/windows/api_types.rb +45 -32
  211. data/lib/puppet/util/windows/eventlog.rb +1 -6
  212. data/lib/puppet/util/windows/principal.rb +8 -6
  213. data/lib/puppet/util/windows/process.rb +16 -15
  214. data/lib/puppet/util/windows/registry.rb +17 -15
  215. data/lib/puppet/util/windows/security.rb +1 -0
  216. data/lib/puppet/util/windows/sid.rb +3 -3
  217. data/lib/puppet/vendor.rb +1 -1
  218. data/lib/puppet/version.rb +1 -1
  219. data/lib/puppet_pal.rb +2 -2
  220. data/locales/puppet.pot +362 -318
  221. data/man/man5/puppet.conf.5 +39 -9
  222. data/man/man8/puppet-agent.8 +2 -2
  223. data/man/man8/puppet-apply.8 +1 -1
  224. data/man/man8/puppet-ca.8 +1 -1
  225. data/man/man8/puppet-catalog.8 +1 -1
  226. data/man/man8/puppet-cert.8 +1 -1
  227. data/man/man8/puppet-certificate.8 +1 -1
  228. data/man/man8/puppet-certificate_request.8 +1 -1
  229. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  230. data/man/man8/puppet-config.8 +1 -1
  231. data/man/man8/puppet-describe.8 +1 -1
  232. data/man/man8/puppet-device.8 +1 -1
  233. data/man/man8/puppet-doc.8 +1 -1
  234. data/man/man8/puppet-epp.8 +1 -1
  235. data/man/man8/puppet-facts.8 +1 -1
  236. data/man/man8/puppet-filebucket.8 +16 -1
  237. data/man/man8/puppet-generate.8 +1 -1
  238. data/man/man8/puppet-help.8 +1 -1
  239. data/man/man8/puppet-key.8 +1 -1
  240. data/man/man8/puppet-lookup.8 +1 -1
  241. data/man/man8/puppet-man.8 +1 -1
  242. data/man/man8/puppet-master.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -1
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +1 -1
  250. data/man/man8/puppet-status.8 +1 -1
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  253. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  254. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  255. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  256. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  257. data/spec/integration/configurer_spec.rb +66 -0
  258. data/spec/integration/data_binding_spec.rb +1 -0
  259. data/spec/integration/defaults_spec.rb +1 -2
  260. data/spec/integration/faces/plugin_spec.rb +29 -47
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/type/notify_spec.rb +46 -0
  264. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  265. data/spec/integration/util/windows/registry_spec.rb +7 -7
  266. data/spec/shared_contexts/types_setup.rb +2 -0
  267. data/spec/unit/agent_spec.rb +34 -26
  268. data/spec/unit/application/apply_spec.rb +2 -12
  269. data/spec/unit/configurer/downloader_spec.rb +10 -0
  270. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  271. data/spec/unit/configurer_spec.rb +430 -415
  272. data/spec/unit/daemon_spec.rb +0 -1
  273. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  274. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  275. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  276. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  277. data/spec/unit/forge/forge_spec.rb +1 -3
  278. data/spec/unit/forge/repository_spec.rb +1 -3
  279. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  280. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  281. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  282. data/spec/unit/network/http/connection_spec.rb +43 -1
  283. data/spec/unit/network/http/pool_spec.rb +32 -0
  284. data/spec/unit/node_spec.rb +7 -4
  285. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  287. data/spec/unit/provider/exec_spec.rb +209 -0
  288. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  289. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  290. data/spec/unit/provider/package/aix_spec.rb +29 -0
  291. data/spec/unit/provider/package/apt_spec.rb +13 -2
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  293. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  294. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  295. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  296. data/spec/unit/provider/package/pip_spec.rb +93 -22
  297. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  298. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  299. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  300. data/spec/unit/provider/package/portage_spec.rb +4 -4
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  302. data/spec/unit/provider/package/yum_spec.rb +90 -0
  303. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  304. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  305. data/spec/unit/provider/selmodule_spec.rb +118 -47
  306. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  307. data/spec/unit/provider/service/runit_spec.rb +24 -0
  308. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  309. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  310. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  311. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  312. data/spec/unit/provider/user/useradd_spec.rb +81 -16
  313. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  314. data/spec/unit/puppet_pal_2pec.rb +3 -0
  315. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  316. data/spec/unit/ssl/certificate_spec.rb +7 -0
  317. data/spec/unit/ssl/host_spec.rb +2 -0
  318. data/spec/unit/test/test_helper_spec.rb +17 -0
  319. data/spec/unit/type/exec_spec.rb +6 -12
  320. data/spec/unit/type/file/content_spec.rb +9 -3
  321. data/spec/unit/type/file_spec.rb +9 -4
  322. data/spec/unit/type/package_spec.rb +8 -0
  323. data/spec/unit/type/selboolean_spec.rb +4 -6
  324. data/spec/unit/type/service_spec.rb +9 -8
  325. data/spec/unit/type/user_spec.rb +19 -13
  326. data/spec/unit/util/execution_spec.rb +16 -0
  327. data/spec/unit/util/http_proxy_spec.rb +97 -0
  328. data/spec/unit/util/log/destinations_spec.rb +2 -26
  329. data/spec/unit/util/log_spec.rb +0 -138
  330. data/spec/unit/util/logging_spec.rb +200 -0
  331. data/spec/unit/util/pidlock_spec.rb +67 -40
  332. data/spec/unit/util/plist_spec.rb +20 -0
  333. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  334. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  335. data/spec/unit/util/windows/sid_spec.rb +2 -2
  336. data/tasks/manpages.rake +1 -0
  337. metadata +16 -7
  338. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  339. data/locales/ja/puppet.po +0 -12114
  340. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -22,6 +22,7 @@ require 'puppet/external/pson/common'
22
22
  require 'puppet/external/pson/version'
23
23
  require 'puppet/external/pson/pure'
24
24
  require 'puppet/gettext/config'
25
+ require 'puppet/defaults'
25
26
 
26
27
 
27
28
  #------------------------------------------------------------
@@ -87,6 +88,7 @@ module Puppet
87
88
 
88
89
  # Store a new default value.
89
90
  def self.define_settings(section, hash)
91
+ Puppet.deprecation_warning('The method Puppet.define_settings is deprecated and will be removed in a future release')
90
92
  @@settings.define_settings(section, hash)
91
93
  end
92
94
 
@@ -121,8 +123,9 @@ module Puppet
121
123
  Puppet::Util::RunMode[@@settings.preferred_run_mode]
122
124
  end
123
125
 
124
- # Load all of the settings.
125
- require 'puppet/defaults'
126
+ # Modify the settings with defaults defined in `initialize_default_settings` method in puppet/defaults.rb. This can
127
+ # be used in the initialization of new Puppet::Settings objects in the puppetserver project.
128
+ Puppet.initialize_default_settings!(settings)
126
129
 
127
130
  # Now that settings are loaded we have the code loaded to be able to issue
128
131
  # deprecation warnings. Warn if we're on a deprecated ruby version.
@@ -61,15 +61,15 @@ class Puppet::Agent
61
61
  end
62
62
  rescue Puppet::LockError
63
63
  Puppet.notice _("Run of %{client_class} already in progress; skipping (%{lockfile_path} exists)") % { client_class: client_class, lockfile_path: lockfile_path }
64
- return
64
+ nil
65
65
  rescue RunTimeoutError => detail
66
66
  Puppet.log_exception(detail, _("Execution of %{client_class} did not complete within %{runtimeout} seconds and was terminated.") %
67
67
  {client_class: client_class,
68
68
  runtimeout: Puppet[:runtimeout]})
69
- return 1
69
+ nil
70
70
  rescue StandardError => detail
71
71
  Puppet.log_exception(detail, _("Could not run %{client_class}: %{detail}") % { client_class: client_class, detail: detail })
72
- 1
72
+ nil
73
73
  end
74
74
  end
75
75
  end
@@ -95,11 +95,9 @@ class Puppet::Agent
95
95
  atForkHandler.child
96
96
  $0 = _("puppet agent: applying configuration")
97
97
  begin
98
- exit(yield)
99
- rescue SystemExit
100
- exit(-1)
98
+ exit(yield || 1)
101
99
  rescue NoMemoryError
102
- exit(-2)
100
+ exit(254)
103
101
  end
104
102
  end
105
103
  ensure
@@ -107,12 +105,6 @@ class Puppet::Agent
107
105
  end
108
106
 
109
107
  exit_code = Process.waitpid2(child_pid)
110
- case exit_code[1].exitstatus
111
- when -1
112
- raise SystemExit
113
- when -2
114
- raise NoMemoryError
115
- end
116
108
  exit_code[1].exitstatus
117
109
  end
118
110
 
@@ -183,7 +183,7 @@ class Application
183
183
 
184
184
  # used to declare code that handle an option
185
185
  def option(*options, &block)
186
- long = options.find { |opt| opt =~ /^--/ }.gsub(/^--(?:\[no-\])?([^ =]+).*$/, '\1' ).gsub('-','_')
186
+ long = options.find { |opt| opt =~ /^--/ }.gsub(/^--(?:\[no-\])?([^ =]+).*$/, '\1' ).tr('-','_')
187
187
  fname = "handle_#{long}".intern
188
188
  if (block_given?)
189
189
  define_method(fname, &block)
@@ -245,7 +245,9 @@ generated by running puppet agent with '--genconfig'.
245
245
 
246
246
  * --job-id:
247
247
  Attach the specified job id to the catalog request and the report used for
248
- this agent run. This option only works when '--onetime' is used.
248
+ this agent run. This option only works when '--onetime' is used. When using
249
+ Puppet Enterprise this flag should not be used as the orchestrator sets the
250
+ job-id for you and it must be unique.
249
251
 
250
252
  * --logdest:
251
253
  Where to send log messages. Choose between 'syslog' (the POSIX syslog
@@ -260,8 +260,8 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
260
260
  catalog =
261
261
  begin
262
262
  Puppet::Resource::Catalog.indirection.find(node.name, :use_node => node)
263
- rescue Puppet::ParseErrorWithIssue, Puppet::Error
264
- # already logged and handled by the compiler for these two cases
263
+ rescue Puppet::Error
264
+ # already logged and handled by the compiler, including Puppet::ParseErrorWithIssue
265
265
  exit(1)
266
266
  end
267
267
 
@@ -64,9 +64,7 @@ class TypeDoc
64
64
 
65
65
  def list_types
66
66
  puts "These are the types known to puppet:\n"
67
- @types.keys.sort { |a, b|
68
- a.to_s <=> b.to_s
69
- }.each do |name|
67
+ @types.keys.sort_by(&:to_s).each do |name|
70
68
  type = @types[name]
71
69
  s = type.doc.gsub(/\s+/, " ")
72
70
  n = s.index(". ")
@@ -149,18 +147,14 @@ class TypeDoc
149
147
  end
150
148
 
151
149
  def format_providers(type)
152
- type.providers.sort { |a,b|
153
- a.to_s <=> b.to_s
154
- }.each { |prov|
150
+ type.providers.sort_by(&:to_s).each { |prov|
155
151
  puts "\n- **#{prov}**"
156
152
  puts @format.wrap(type.provider(prov).doc, :indent => 4, :scrub => true)
157
153
  }
158
154
  end
159
155
 
160
156
  def list_providers(type)
161
- list = type.providers.sort { |a,b|
162
- a.to_s <=> b.to_s
163
- }.join(", ")
157
+ list = type.providers.sort_by(&:to_s).join(", ")
164
158
  puts @format.wrap(list, :indent => 4)
165
159
  end
166
160
 
@@ -154,7 +154,7 @@ HELP
154
154
  with_contents = options[:references].length <= 1
155
155
  exit_code = 0
156
156
  require 'puppet/util/reference'
157
- options[:references].sort { |a,b| a.to_s <=> b.to_s }.each do |name|
157
+ options[:references].sort_by(&:to_s).each do |name|
158
158
  raise _("Could not find reference %{name}") % { name: name } unless section = Puppet::Util::Reference.reference(name)
159
159
 
160
160
  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
  -------
@@ -283,7 +283,7 @@ Copyright (c) 2015 Puppet Inc., LLC Licensed under the Apache 2.0 License
283
283
  'merge_hash_arrays' => !options[:merge_hash_arrays].nil?}
284
284
 
285
285
  if options[:prefix]
286
- merge_options.merge!({'knockout_prefix' => options[:prefix]})
286
+ merge_options['knockout_prefix'] = options[:prefix]
287
287
  end
288
288
 
289
289
  else
@@ -209,8 +209,8 @@ Copyright (c) 2017 Puppet Inc., LLC Licensed under the Apache 2.0 License
209
209
 
210
210
  compiler.compile()
211
211
 
212
- rescue Puppet::ParseErrorWithIssue, Puppet::Error
213
- # already logged and handled by the compiler for these two cases
212
+ rescue Puppet::Error
213
+ # already logged and handled by the compiler, including Puppet::ParseErrorWithIssue
214
214
  exit(1)
215
215
  end
216
216
 
@@ -58,6 +58,7 @@ class Puppet::Configurer
58
58
  def initialize(transaction_uuid = nil, job_id = nil)
59
59
  @running = false
60
60
  @splayed = false
61
+ @pluginsync_failed = false
61
62
  @cached_catalog_status = 'not_used'
62
63
  @environment = Puppet[:environment]
63
64
  @transaction_uuid = transaction_uuid || SecureRandom.uuid
@@ -70,8 +71,16 @@ class Puppet::Configurer
70
71
  # Get the remote catalog, yo. Returns nil if no catalog can be found.
71
72
  def retrieve_catalog(query_options)
72
73
  query_options ||= {}
73
- if (Puppet[:use_cached_catalog] && result = retrieve_catalog_from_cache(query_options))
74
- @cached_catalog_status = 'explicitly_requested'
74
+ if Puppet[:use_cached_catalog] || @pluginsync_failed
75
+ result = retrieve_catalog_from_cache(query_options)
76
+ end
77
+
78
+ if result
79
+ if Puppet[:use_cached_catalog]
80
+ @cached_catalog_status = 'explicitly_requested'
81
+ elsif @pluginsync_failed
82
+ @cached_catalog_status = 'on_failure'
83
+ end
75
84
 
76
85
  Puppet.info _("Using cached catalog from environment '%{environment}'") % { environment: result.environment }
77
86
  else
@@ -144,9 +153,10 @@ class Puppet::Configurer
144
153
  facts_hash
145
154
  end
146
155
 
147
- def prepare_and_retrieve_catalog(options, query_options)
156
+ def prepare_and_retrieve_catalog(cached_catalog, options, query_options)
148
157
  # set report host name now that we have the fact
149
158
  options[:report].host = Puppet[:node_name_value]
159
+
150
160
  query_options[:transaction_uuid] = @transaction_uuid
151
161
  query_options[:job_id] = @job_id
152
162
  query_options[:static_catalog] = @static_catalog
@@ -156,24 +166,19 @@ class Puppet::Configurer
156
166
  query_options[:checksum_type] = @checksum_type.join('.')
157
167
 
158
168
  # apply passes in ral catalog
159
- catalog = options.delete(:catalog)
160
- return catalog if catalog
161
-
162
- # retrieve_catalog returns json catalog
163
- catalog = retrieve_catalog(query_options)
164
- return convert_catalog(catalog, @duration, options) if catalog
165
-
166
- Puppet.err _("Could not retrieve catalog; skipping run")
167
- nil
169
+ catalog = cached_catalog || options[:catalog]
170
+ unless catalog
171
+ # retrieve_catalog returns resource catalog
172
+ catalog = retrieve_catalog(query_options)
173
+ Puppet.err _("Could not retrieve catalog; skipping run") unless catalog
174
+ end
175
+ catalog
168
176
  end
169
177
 
170
178
  def prepare_and_retrieve_catalog_from_cache(options = {})
171
179
  result = retrieve_catalog_from_cache({:transaction_uuid => @transaction_uuid, :static_catalog => @static_catalog})
172
- if result
173
- Puppet.info _("Using cached catalog from environment '%{catalog_env}'") % { catalog_env: result.environment }
174
- return convert_catalog(result, @duration, options)
175
- end
176
- nil
180
+ Puppet.info _("Using cached catalog from environment '%{catalog_env}'") % { catalog_env: result.environment } if result
181
+ result
177
182
  end
178
183
 
179
184
  # Apply supplied catalog and return associated application report
@@ -251,13 +256,12 @@ class Puppet::Configurer
251
256
  Puppet::GettextConfig.reset_text_domain('agent')
252
257
  Puppet::ModuleTranslations.load_from_vardir(Puppet[:vardir])
253
258
 
254
- if catalog = prepare_and_retrieve_catalog_from_cache(options)
255
- options[:catalog] = catalog
259
+ if cached_catalog = prepare_and_retrieve_catalog_from_cache(options)
256
260
  @cached_catalog_status = 'explicitly_requested'
257
261
 
258
- if @environment != catalog.environment && !Puppet[:strict_environment_mode]
259
- Puppet.notice _("Local environment: '%{local_env}' doesn't match the environment of the cached catalog '%{catalog_env}', switching agent to '%{catalog_env}'.") % { local_env: @environment, catalog_env: catalog.environment }
260
- @environment = catalog.environment
262
+ if @environment != cached_catalog.environment && !Puppet[:strict_environment_mode]
263
+ Puppet.notice _("Local environment: '%{local_env}' doesn't match the environment of the cached catalog '%{catalog_env}', switching agent to '%{catalog_env}'.") % { local_env: @environment, catalog_env: cached_catalog.environment }
264
+ @environment = cached_catalog.environment
261
265
  end
262
266
 
263
267
  report.environment = @environment
@@ -278,7 +282,7 @@ class Puppet::Configurer
278
282
  configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
279
283
 
280
284
  # We only need to find out the environment to run in if we don't already have a catalog
281
- unless (options[:catalog] || Puppet[:strict_environment_mode])
285
+ unless (cached_catalog || options[:catalog] || Puppet[:strict_environment_mode])
282
286
  begin
283
287
  node = nil
284
288
  node_retr_time = thinmark do
@@ -329,7 +333,7 @@ class Puppet::Configurer
329
333
  query_options = get_facts(options) unless query_options
330
334
  query_options[:configured_environment] = configured_environment
331
335
 
332
- unless catalog = prepare_and_retrieve_catalog(options, query_options)
336
+ unless catalog = prepare_and_retrieve_catalog(cached_catalog, options, query_options)
333
337
  return nil
334
338
  end
335
339
 
@@ -354,16 +358,37 @@ class Puppet::Configurer
354
358
  query_options = get_facts(options)
355
359
  query_options[:configured_environment] = configured_environment
356
360
 
357
- return nil unless catalog = prepare_and_retrieve_catalog(options, query_options)
361
+ # if we get here, ignore the cached catalog
362
+ return nil unless catalog = prepare_and_retrieve_catalog(nil, options, query_options)
358
363
  tries += 1
359
364
  end
360
365
 
366
+ # now that environment has converged, convert resource catalog into ral catalog
367
+ # unless we were given a RAL catalog
368
+ if !cached_catalog && options[:catalog]
369
+ ral_catalog = options[:catalog]
370
+ else
371
+ # REMIND @duration is the time spent loading the last catalog, and doesn't
372
+ # account for things like we failed to download and fell back to the cache
373
+ ral_catalog = convert_catalog(catalog, @duration, options)
374
+
375
+ # If not noop, commit the cached resource catalog (not ral catalog). Ideally
376
+ # we'd just copy the downloaded response body, instead of serializing the
377
+ # in-memory catalog, but that's hard due to the indirector.
378
+ indirection = Puppet::Resource::Catalog.indirection
379
+ if !Puppet[:noop] && indirection.cache?
380
+ request = indirection.request(:save, nil, catalog, environment: Puppet::Node::Environment.remote(catalog.environment))
381
+ Puppet.info("Caching catalog for #{request.key}")
382
+ indirection.cache.save(request)
383
+ end
384
+ end
385
+
361
386
  execute_prerun_command or return nil
362
387
 
363
- options[:report].code_id = catalog.code_id
364
- options[:report].catalog_uuid = catalog.catalog_uuid
388
+ options[:report].code_id = ral_catalog.code_id
389
+ options[:report].catalog_uuid = ral_catalog.catalog_uuid
365
390
  options[:report].cached_catalog_status = @cached_catalog_status
366
- apply_catalog(catalog, options)
391
+ apply_catalog(ral_catalog, options)
367
392
  true
368
393
  rescue => detail
369
394
  Puppet.log_exception(detail, _("Failed to apply catalog: %{detail}") % { detail: detail })
@@ -372,6 +397,14 @@ class Puppet::Configurer
372
397
  execute_postrun_command or return nil
373
398
  end
374
399
  ensure
400
+ if Puppet[:resubmit_facts]
401
+ # TODO: Should mark the report as "failed" if an error occurs and
402
+ # resubmit_facts returns false. There is currently no API for this.
403
+ resubmit_facts_time = thinmark { resubmit_facts }
404
+
405
+ report.add_times(:resubmit_facts, resubmit_facts_time)
406
+ end
407
+
375
408
  report.cached_catalog_status ||= @cached_catalog_status
376
409
  report.add_times(:total, Time.now - start)
377
410
  report.finalize_report
@@ -418,6 +451,40 @@ class Puppet::Configurer
418
451
  Puppet.log_exception(detail, _("Could not save last run local report: %{detail}") % { detail: detail })
419
452
  end
420
453
 
454
+ # Submit updated facts to the Puppet Server
455
+ #
456
+ # This method will clear all current fact values, load a fresh set of
457
+ # fact data, and then submit it to the Puppet Server.
458
+ #
459
+ # @return [true] If fact submission succeeds.
460
+ # @return [false] If an exception is raised during fact generation or
461
+ # submission.
462
+ def resubmit_facts
463
+ ::Facter.clear
464
+ facts = find_facts
465
+
466
+ saved_fact_terminus = Puppet::Node::Facts.indirection.terminus_class
467
+ begin
468
+ Puppet::Node::Facts.indirection.terminus_class = :rest
469
+
470
+ server = Puppet::Node::Facts::Rest.server
471
+ Puppet.info(_("Uploading facts for %{node} to %{server}") % {
472
+ node: facts.name,
473
+ server: server})
474
+
475
+ Puppet::Node::Facts.indirection.save(facts, nil, :environment => Puppet::Node::Environment.remote(@environment))
476
+
477
+ return true
478
+ ensure
479
+ Puppet::Node::Facts.indirection.terminus_class = saved_fact_terminus
480
+ end
481
+ rescue => detail
482
+ Puppet.log_exception(detail, _("Failed to submit facts: %{detail}") %
483
+ { detail: detail })
484
+
485
+ return false
486
+ end
487
+
421
488
  private
422
489
 
423
490
  def execute_from_setting(setting)
@@ -456,8 +523,8 @@ class Puppet::Configurer
456
523
  Puppet[:node_name_value],
457
524
  query_options.merge(
458
525
  :ignore_cache => true,
459
- # We never want to update the cached Catalog if we're running in noop mode.
460
- :ignore_cache_save => Puppet[:noop],
526
+ # don't update cache until after environment converges
527
+ :ignore_cache_save => true,
461
528
  :environment => Puppet::Node::Environment.remote(@environment),
462
529
  :fail_on_404 => true
463
530
  )
@@ -470,6 +537,14 @@ class Puppet::Configurer
470
537
  end
471
538
 
472
539
  def download_plugins(remote_environment_for_plugins)
473
- @handler.download_plugins(remote_environment_for_plugins)
540
+ begin
541
+ @handler.download_plugins(remote_environment_for_plugins)
542
+ rescue Puppet::Error => detail
543
+ if !Puppet[:ignore_plugin_errors] && Puppet[:usecacheonfailure]
544
+ @pluginsync_failed = true
545
+ else
546
+ raise detail
547
+ end
548
+ end
474
549
  end
475
550
  end
@@ -11,32 +11,53 @@ class Puppet::Configurer::Downloader
11
11
  files = []
12
12
  begin
13
13
  catalog.apply do |trans|
14
+ unless Puppet[:ignore_plugin_errors]
15
+ # Propagate the first failure associated with the transaction. The any_failed?
16
+ # method returns the first resource status that failed or nil, not a boolean.
17
+ first_failure = trans.any_failed?
18
+ if first_failure
19
+ event = (first_failure.events || []).first
20
+ detail = event ? event.message : 'unknown'
21
+ raise Puppet::Error.new(_("Failed to retrieve %{name}: %{detail}") % { name: name, detail: detail })
22
+ end
23
+ end
24
+
14
25
  trans.changed?.each do |resource|
15
26
  yield resource if block_given?
16
27
  files << resource[:path]
17
28
  end
18
29
  end
19
30
  rescue Puppet::Error => detail
20
- Puppet.log_exception(detail, _("Could not retrieve %{name}: %{detail}") % { name: name, detail: detail })
31
+ if Puppet[:ignore_plugin_errors]
32
+ Puppet.log_exception(detail, _("Could not retrieve %{name}: %{detail}") % { name: name, detail: detail })
33
+ else
34
+ raise detail
35
+ end
21
36
  end
22
37
  files
23
38
  end
24
39
 
25
40
  def initialize(name, path, source, ignore = nil, environment = nil, source_permissions = :ignore)
26
41
  @name, @path, @source, @ignore, @environment, @source_permissions = name, path, source, ignore, environment, source_permissions
27
- end
28
42
 
29
- def catalog
30
- catalog = Puppet::Resource::Catalog.new("PluginSync", @environment)
31
- catalog.host_config = false
32
- catalog.add_resource(file)
33
- catalog
34
43
  end
35
44
 
36
45
  def file
37
- args = default_arguments.merge(:path => path, :source => source)
38
- args[:ignore] = ignore.split if ignore
39
- Puppet::Type.type(:file).new(args)
46
+ unless @file
47
+ args = default_arguments.merge(:path => path, :source => source)
48
+ args[:ignore] = ignore.split if ignore
49
+ @file = Puppet::Type.type(:file).new(args)
50
+ end
51
+ @file
52
+ end
53
+
54
+ def catalog
55
+ unless @catalog
56
+ @catalog = Puppet::Resource::Catalog.new("PluginSync", @environment)
57
+ @catalog.host_config = false
58
+ @catalog.add_resource(file)
59
+ end
60
+ @catalog
40
61
  end
41
62
 
42
63
  private
@@ -55,12 +76,8 @@ class Puppet::Configurer::Downloader
55
76
  :noop => false
56
77
  }
57
78
  if !Puppet.features.microsoft_windows?
58
- defargs.merge!(
59
- {
60
- :owner => Process.uid,
61
- :group => Process.gid
62
- }
63
- )
79
+ defargs[:owner] = Process.uid
80
+ defargs[:group] = Process.gid
64
81
  end
65
82
  return defargs
66
83
  end