puppet 6.18.0-x64-mingw32 → 6.21.1-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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +37 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +3 -2
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +5 -5
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/defaults.rb +67 -35
  19. data/lib/puppet/environments.rb +84 -59
  20. data/lib/puppet/face/catalog.rb +1 -1
  21. data/lib/puppet/face/config.rb +56 -16
  22. data/lib/puppet/face/epp.rb +12 -2
  23. data/lib/puppet/face/facts.rb +60 -0
  24. data/lib/puppet/face/node.rb +3 -3
  25. data/lib/puppet/face/node/clean.rb +2 -2
  26. data/lib/puppet/face/status.rb +1 -1
  27. data/lib/puppet/ffi/posix.rb +10 -0
  28. data/lib/puppet/ffi/posix/constants.rb +14 -0
  29. data/lib/puppet/ffi/posix/functions.rb +24 -0
  30. data/lib/puppet/file_bucket/dipper.rb +1 -1
  31. data/lib/puppet/functions/epp.rb +1 -0
  32. data/lib/puppet/functions/inline_epp.rb +1 -0
  33. data/lib/puppet/functions/new.rb +8 -3
  34. data/lib/puppet/http.rb +1 -0
  35. data/lib/puppet/http/client.rb +1 -1
  36. data/lib/puppet/http/resolver.rb +5 -8
  37. data/lib/puppet/http/resolver/server_list.rb +18 -36
  38. data/lib/puppet/http/resolver/settings.rb +4 -4
  39. data/lib/puppet/http/resolver/srv.rb +5 -5
  40. data/lib/puppet/http/service.rb +3 -1
  41. data/lib/puppet/http/service/compiler.rb +1 -1
  42. data/lib/puppet/http/service/file_server.rb +1 -1
  43. data/lib/puppet/http/service/puppetserver.rb +39 -0
  44. data/lib/puppet/http/session.rb +5 -4
  45. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  46. data/lib/puppet/indirector/fact_search.rb +60 -0
  47. data/lib/puppet/indirector/facts/json.rb +27 -0
  48. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  49. data/lib/puppet/indirector/json.rb +5 -1
  50. data/lib/puppet/indirector/msgpack.rb +1 -1
  51. data/lib/puppet/indirector/node/json.rb +8 -0
  52. data/lib/puppet/indirector/report/json.rb +34 -0
  53. data/lib/puppet/indirector/request.rb +4 -4
  54. data/lib/puppet/indirector/yaml.rb +1 -1
  55. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  56. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  57. data/lib/puppet/network/formats.rb +2 -1
  58. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  59. data/lib/puppet/node/facts.rb +17 -0
  60. data/lib/puppet/pal/pal_impl.rb +70 -17
  61. data/lib/puppet/parser/ast/leaf.rb +3 -2
  62. data/lib/puppet/parser/templatewrapper.rb +1 -1
  63. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  64. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  65. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  66. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  67. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  68. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  69. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  70. data/lib/puppet/property/list.rb +1 -1
  71. data/lib/puppet/provider/group/groupadd.rb +13 -8
  72. data/lib/puppet/provider/package/apt.rb +34 -2
  73. data/lib/puppet/provider/package/aptitude.rb +6 -0
  74. data/lib/puppet/provider/package/dpkg.rb +1 -1
  75. data/lib/puppet/provider/package/pip2.rb +17 -0
  76. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  77. data/lib/puppet/provider/package/yum.rb +1 -0
  78. data/lib/puppet/provider/service/debian.rb +2 -0
  79. data/lib/puppet/provider/user/aix.rb +2 -2
  80. data/lib/puppet/provider/user/useradd.rb +62 -8
  81. data/lib/puppet/reference/configuration.rb +6 -5
  82. data/lib/puppet/resource/type.rb +2 -1
  83. data/lib/puppet/rest/route.rb +2 -2
  84. data/lib/puppet/settings.rb +62 -20
  85. data/lib/puppet/settings/alias_setting.rb +37 -0
  86. data/lib/puppet/settings/base_setting.rb +26 -2
  87. data/lib/puppet/transaction/report.rb +11 -7
  88. data/lib/puppet/type/file/source.rb +1 -1
  89. data/lib/puppet/type/filebucket.rb +1 -1
  90. data/lib/puppet/type/package.rb +3 -3
  91. data/lib/puppet/util/autoload.rb +1 -8
  92. data/lib/puppet/util/connection.rb +8 -8
  93. data/lib/puppet/util/fact_dif.rb +62 -0
  94. data/lib/puppet/util/posix.rb +54 -5
  95. data/lib/puppet/util/rubygems.rb +5 -1
  96. data/lib/puppet/util/run_mode.rb +5 -1
  97. data/lib/puppet/util/windows/service.rb +1 -1
  98. data/lib/puppet/version.rb +1 -1
  99. data/locales/puppet.pot +289 -268
  100. data/man/man5/puppet.conf.5 +33 -17
  101. data/man/man8/puppet-agent.8 +7 -4
  102. data/man/man8/puppet-apply.8 +2 -2
  103. data/man/man8/puppet-catalog.8 +1 -1
  104. data/man/man8/puppet-config.8 +6 -6
  105. data/man/man8/puppet-describe.8 +1 -1
  106. data/man/man8/puppet-device.8 +2 -2
  107. data/man/man8/puppet-doc.8 +1 -1
  108. data/man/man8/puppet-epp.8 +1 -1
  109. data/man/man8/puppet-facts.8 +32 -1
  110. data/man/man8/puppet-filebucket.8 +3 -3
  111. data/man/man8/puppet-generate.8 +1 -1
  112. data/man/man8/puppet-help.8 +1 -1
  113. data/man/man8/puppet-key.8 +1 -1
  114. data/man/man8/puppet-lookup.8 +1 -1
  115. data/man/man8/puppet-man.8 +1 -1
  116. data/man/man8/puppet-module.8 +1 -1
  117. data/man/man8/puppet-node.8 +7 -4
  118. data/man/man8/puppet-parser.8 +1 -1
  119. data/man/man8/puppet-plugin.8 +1 -1
  120. data/man/man8/puppet-report.8 +4 -1
  121. data/man/man8/puppet-resource.8 +1 -1
  122. data/man/man8/puppet-script.8 +2 -2
  123. data/man/man8/puppet-ssl.8 +1 -1
  124. data/man/man8/puppet-status.8 +2 -2
  125. data/man/man8/puppet.8 +2 -2
  126. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  127. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  128. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  129. data/spec/integration/application/agent_spec.rb +183 -22
  130. data/spec/integration/application/apply_spec.rb +19 -0
  131. data/spec/integration/application/filebucket_spec.rb +7 -7
  132. data/spec/integration/application/plugin_spec.rb +3 -3
  133. data/spec/integration/configurer_spec.rb +14 -0
  134. data/spec/integration/defaults_spec.rb +19 -1
  135. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  136. data/spec/integration/resource/type_collection_spec.rb +2 -6
  137. data/spec/integration/transaction_spec.rb +4 -9
  138. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  139. data/spec/integration/util/windows/registry_spec.rb +0 -10
  140. data/spec/lib/puppet_spec/settings.rb +6 -1
  141. data/spec/shared_contexts/types_setup.rb +2 -0
  142. data/spec/spec_helper.rb +1 -4
  143. data/spec/unit/agent_spec.rb +8 -6
  144. data/spec/unit/application/agent_spec.rb +0 -1
  145. data/spec/unit/application/config_spec.rb +224 -4
  146. data/spec/unit/application/doc_spec.rb +2 -2
  147. data/spec/unit/application/facts_spec.rb +3 -1
  148. data/spec/unit/application/filebucket_spec.rb +0 -2
  149. data/spec/unit/application_spec.rb +60 -13
  150. data/spec/unit/configurer_spec.rb +39 -6
  151. data/spec/unit/confine/feature_spec.rb +1 -1
  152. data/spec/unit/confine_spec.rb +8 -2
  153. data/spec/unit/defaults_spec.rb +20 -1
  154. data/spec/unit/environments_spec.rb +176 -32
  155. data/spec/unit/face/config_spec.rb +62 -11
  156. data/spec/unit/face/node_spec.rb +2 -13
  157. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  158. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  159. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  160. data/spec/unit/file_system_spec.rb +1 -2
  161. data/spec/unit/forge/module_release_spec.rb +2 -7
  162. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  163. data/spec/unit/http/resolver_spec.rb +24 -4
  164. data/spec/unit/http/service/ca_spec.rb +2 -2
  165. data/spec/unit/http/service/compiler_spec.rb +51 -2
  166. data/spec/unit/http/service/file_server_spec.rb +2 -2
  167. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  168. data/spec/unit/http/service/report_spec.rb +2 -2
  169. data/spec/unit/http/service_spec.rb +1 -1
  170. data/spec/unit/http/session_spec.rb +8 -20
  171. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  172. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  173. data/spec/unit/indirector/face_spec.rb +0 -1
  174. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  175. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  176. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  177. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  178. data/spec/unit/indirector/indirection_spec.rb +8 -12
  179. data/spec/unit/indirector/json_spec.rb +8 -8
  180. data/spec/unit/indirector/key/file_spec.rb +0 -1
  181. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  182. data/spec/unit/indirector/node/json_spec.rb +33 -0
  183. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  184. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  185. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  186. data/spec/unit/indirector/request_spec.rb +4 -4
  187. data/spec/unit/indirector/rest_spec.rb +1 -1
  188. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  189. data/spec/unit/indirector/yaml_spec.rb +7 -7
  190. data/spec/unit/indirector_spec.rb +2 -2
  191. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  192. data/spec/unit/network/authconfig_spec.rb +0 -3
  193. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  194. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  195. data/spec/unit/network/http/handler_spec.rb +0 -5
  196. data/spec/unit/parser/compiler_spec.rb +3 -19
  197. data/spec/unit/parser/resource_spec.rb +14 -8
  198. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  199. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  200. data/spec/unit/property_spec.rb +1 -0
  201. data/spec/unit/provider/exec_spec.rb +4 -3
  202. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  203. data/spec/unit/provider/nameservice_spec.rb +66 -65
  204. data/spec/unit/provider/package/apt_spec.rb +28 -23
  205. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  206. data/spec/unit/provider/package/base_spec.rb +6 -5
  207. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  208. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  209. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  210. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  211. data/spec/unit/provider/package/pip_spec.rb +6 -11
  212. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  213. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  214. data/spec/unit/provider/package/yum_spec.rb +31 -0
  215. data/spec/unit/provider/service/base_spec.rb +2 -4
  216. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  217. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  218. data/spec/unit/provider/service/debian_spec.rb +3 -5
  219. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  220. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  221. data/spec/unit/provider/service/init_spec.rb +4 -5
  222. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  223. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  224. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  225. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  226. data/spec/unit/provider/service/runit_spec.rb +2 -1
  227. data/spec/unit/provider/service/smf_spec.rb +1 -1
  228. data/spec/unit/provider/service/src_spec.rb +3 -5
  229. data/spec/unit/provider/service/systemd_spec.rb +3 -1
  230. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  231. data/spec/unit/provider/user/aix_spec.rb +5 -0
  232. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  233. data/spec/unit/provider/user/pw_spec.rb +2 -0
  234. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  235. data/spec/unit/provider_spec.rb +8 -10
  236. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  237. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  238. data/spec/unit/resource/type_spec.rb +1 -1
  239. data/spec/unit/resource_spec.rb +11 -10
  240. data/spec/unit/rest/route_spec.rb +4 -4
  241. data/spec/unit/settings_spec.rb +576 -239
  242. data/spec/unit/ssl/base_spec.rb +0 -1
  243. data/spec/unit/ssl/host_spec.rb +0 -5
  244. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  245. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  246. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  247. data/spec/unit/transaction/report_spec.rb +2 -0
  248. data/spec/unit/transaction_spec.rb +13 -4
  249. data/spec/unit/type/file/content_spec.rb +0 -1
  250. data/spec/unit/type/file/selinux_spec.rb +0 -2
  251. data/spec/unit/type/file/source_spec.rb +1 -1
  252. data/spec/unit/type/file_spec.rb +0 -6
  253. data/spec/unit/type/filebucket_spec.rb +1 -1
  254. data/spec/unit/type/group_spec.rb +13 -6
  255. data/spec/unit/type/resources_spec.rb +7 -7
  256. data/spec/unit/type/service_spec.rb +1 -1
  257. data/spec/unit/type/tidy_spec.rb +0 -1
  258. data/spec/unit/type_spec.rb +2 -2
  259. data/spec/unit/util/at_fork_spec.rb +2 -2
  260. data/spec/unit/util/autoload_spec.rb +5 -1
  261. data/spec/unit/util/backups_spec.rb +1 -2
  262. data/spec/unit/util/execution_spec.rb +15 -11
  263. data/spec/unit/util/inifile_spec.rb +6 -14
  264. data/spec/unit/util/log_spec.rb +8 -7
  265. data/spec/unit/util/logging_spec.rb +3 -3
  266. data/spec/unit/util/posix_spec.rb +363 -15
  267. data/spec/unit/util/rubygems_spec.rb +2 -2
  268. data/spec/unit/util/run_mode_spec.rb +6 -6
  269. data/spec/unit/util/selinux_spec.rb +76 -52
  270. data/spec/unit/util/storage_spec.rb +3 -1
  271. data/spec/unit/util/suidmanager_spec.rb +44 -41
  272. data/spec/unit/util_spec.rb +13 -6
  273. metadata +32 -10
  274. data/spec/integration/application/config_spec.rb +0 -74
  275. data/spec/unit/face/catalog_spec.rb +0 -6
  276. data/spec/unit/face/module_spec.rb +0 -3
@@ -77,7 +77,8 @@ module Puppet
77
77
  the "facter-ng" gem). This is not necessary if Facter 3.x or later is installed.
78
78
  This setting is still experimental.',
79
79
  :hook => proc do |value|
80
- if value
80
+ value = munge(value)
81
+ if value && Puppet::Util::Package.versioncmp(Facter.value('facterversion'), '4.0.0') < 0
81
82
  begin
82
83
  original_facter = Object.const_get(:Facter)
83
84
  Object.send(:remove_const, :Facter)
@@ -374,7 +375,7 @@ module Puppet
374
375
  from the parent process.
375
376
 
376
377
  This setting can only be set in the `[main]` section of puppet.conf; it cannot
377
- be set in `[master]`, `[agent]`, or an environment config section.",
378
+ be set in `[server]`, `[agent]`, or an environment config section.",
378
379
  :call_hook => :on_define_and_write,
379
380
  :hook => proc do |value|
380
381
  Puppet::Util.set_env('PATH', '') if Puppet::Util.get_env('PATH').nil?
@@ -562,7 +563,7 @@ module Puppet
562
563
  config = File.expand_path(File.join(settings[:confdir], 'hiera.yaml')) if config.nil?
563
564
  config
564
565
  end,
565
- :desc => "The hiera configuration file. Puppet only reads this file on startup, so you must restart the puppet master every time you edit it.",
566
+ :desc => "The hiera configuration file. Puppet only reads this file on startup, so you must restart the puppet server every time you edit it.",
566
567
  :type => :file,
567
568
  },
568
569
  :binder_config => {
@@ -632,7 +633,7 @@ module Puppet
632
633
  :http_proxy_password =>{
633
634
  :default => "none",
634
635
  :hook => proc do |value|
635
- if settings[:http_proxy_password] =~ /[@!# \/]/
636
+ if value =~ /[@!# \/]/
636
637
  raise "Passwords set in the http_proxy_password setting must be valid as part of a URL, and any reserved characters must be URL-encoded. We received: #{value}"
637
638
  end
638
639
  end,
@@ -700,40 +701,54 @@ Valid values are 0 (never cache) and 15 (15 second minimum wait time).
700
701
  :environment_timeout => {
701
702
  :default => "0",
702
703
  :type => :ttl,
703
- :desc => "How long the Puppet master should cache data it loads from an
704
+ :desc => "How long the Puppet server should cache data it loads from an
704
705
  environment.
705
706
 
706
707
  A value of `0` will disable caching. This setting can also be set to
707
- `unlimited`, which will cache environments until the master is restarted
708
- or told to refresh the cache.
708
+ `unlimited`, which will cache environments until the server is restarted
709
+ or told to refresh the cache. All other values will result in Puppet
710
+ server evicting expired environments. The expiration time is computed
711
+ based on either when the environment was created or last accessed, see
712
+ `environment_timeout_mode`.
709
713
 
710
714
  You should change this setting once your Puppet deployment is doing
711
715
  non-trivial work. We chose the default value of `0` because it lets new
712
716
  users update their code without any extra steps, but it lowers the
713
- performance of your Puppet master.
714
-
715
- We recommend setting this to `unlimited` and explicitly refreshing your
716
- Puppet master as part of your code deployment process.
717
-
718
- * With Puppet Server, you should refresh environments by calling the
719
- `environment-cache` API endpoint. See the docs for the Puppet Server
720
- [administrative API](https://puppet.com/docs/puppetserver/latest/admin-api/v1/environment-cache.html).
721
-
722
- Any value other than `0` or `unlimited` is deprecated, since most Puppet
723
- servers use a pool of Ruby interpreters which all have their own cache
724
- timers. When these timers drift out of sync, agents can be served
725
- inconsistent catalogs.",
717
+ performance of your Puppet server. We recommend either:
718
+
719
+ * Setting this to `unlimited` and explicitly refreshing your Puppet server
720
+ as part of your code deployment process.
721
+
722
+ * Setting this to a number that will keep your most actively used
723
+ environments cached, but allow testing environments to fall out of the
724
+ cache and reduce memory usage. A value of 3 minutes (3m) is a reasonable
725
+ value. This option requires setting `environment_timeout_mode` to
726
+ `from_last_used`.
727
+
728
+ Once you set `environment_timeout` to a non-zero value, you need to tell
729
+ Puppet server to read new code from disk using the `environment-cache` API
730
+ endpoint after you deploy new code. See the docs for the Puppet Server
731
+ [administrative API](https://puppet.com/docs/puppetserver/latest/admin-api/v1/environment-cache.html).
732
+ ",
726
733
  :hook => proc do |val|
727
- unless [0, 'unlimited', Float::INFINITY].include?(val)
728
- Puppet.deprecation_warning(<<-WARNING)
729
- Fine grained control of environment timeouts is deprecated,
730
- please use `0` or `unlimited` to control default caching behavior
731
- and the environment-cache endpoint in Puppet Server's administrative
732
- API to expire the cache as needed
733
- WARNING
734
+ if Puppet[:environment_timeout_mode] == :from_created
735
+ unless [0, 'unlimited', Float::INFINITY].include?(val)
736
+ Puppet.deprecation_warning("Evicting environments based on their creation time is deprecated, please set `environment_timeout_mode` to `from_last_used` instead.")
737
+ end
734
738
  end
735
739
  end
736
740
  },
741
+ :environment_timeout_mode => {
742
+ :default => :from_created,
743
+ :type => :symbolic_enum,
744
+ :values => [:from_created, :from_last_used],
745
+ :desc => "How Puppet interprets the `environment_timeout` setting when
746
+ `environment_timeout` is neither `0` nor `unlimited`. If set to
747
+ `from_created`, then the environment will be evicted `environment_timeout`
748
+ seconds from when it was created. If set to `from_last_used` then the
749
+ environment will be evicted `environment_timeout` seconds from when it
750
+ was last used."
751
+ },
737
752
  :environment_data_provider => {
738
753
  :desc => "The name of a registered environment data provider used when obtaining environment
739
754
  specific data. The three built in and registered providers are 'none' (no data), 'function' (data
@@ -827,7 +842,10 @@ API to expire the cache as needed
827
842
  **Note:** You must set the certname in the main section of the puppet.conf file. Setting it in a different section causes errors.
828
843
 
829
844
  Defaults to the node's fully qualified domain name.",
830
- :hook => proc { |value| raise(ArgumentError, _("Certificate names must be lower case")) unless value == value.downcase }},
845
+ :call_hook => :on_initialize_and_write,
846
+ :hook => proc { |value|
847
+ raise(ArgumentError, _("Certificate names must be lower case")) unless value == value.downcase
848
+ }},
831
849
  :dns_alt_names => {
832
850
  :default => '',
833
851
  :desc => <<EOT,
@@ -1110,7 +1128,7 @@ EOT
1110
1128
  :type => :string,
1111
1129
  :desc => "Where to send log messages. Choose between 'syslog' (the POSIX syslog
1112
1130
  service), 'eventlog' (the Windows Event Log), 'console', or the path to a log
1113
- file."
1131
+ file. Multiple destinations can be set using a comma separated list (eg: `/path/file1,console,/path/file2`)"
1114
1132
  # Sure would be nice to set the Puppet::Util::Log destination here in an :on_initialize_and_write hook,
1115
1133
  # unfortunately we have a large number of tests that rely on the logging not resetting itself when the
1116
1134
  # settings are initialized as they test what gets logged during settings initialization.
@@ -1303,7 +1321,7 @@ EOT
1303
1321
  }
1304
1322
  )
1305
1323
 
1306
- settings.define_settings(:master,
1324
+ settings.define_settings(:server,
1307
1325
  :user => {
1308
1326
  :default => "puppet",
1309
1327
  :desc => "The user Puppet Server will run as. Used to ensure
@@ -1359,6 +1377,10 @@ EOT
1359
1377
  with Puppet Server. (eg `puppet facts upload`, `puppet agent`). May be
1360
1378
  overridden by more specific settings (see `ca_port`, `report_port`).",
1361
1379
  },
1380
+ :serverport => {
1381
+ :type => :alias,
1382
+ :alias_for => :masterport
1383
+ },
1362
1384
  :node_name => {
1363
1385
  :default => 'cert',
1364
1386
  :type => :enum,
@@ -1719,7 +1741,7 @@ EOT
1719
1741
  and does not need to horizontally scale.",
1720
1742
  },
1721
1743
  :ca_port => {
1722
- :default => "$masterport",
1744
+ :default => "$serverport",
1723
1745
  :desc => "The port to use for the certificate authority.",
1724
1746
  },
1725
1747
  :preferred_serialization_format => {
@@ -1808,7 +1830,7 @@ EOT
1808
1830
  :desc => "The server to send transaction reports to.",
1809
1831
  },
1810
1832
  :report_port => {
1811
- :default => "$masterport",
1833
+ :default => "$serverport",
1812
1834
  :desc => "The port to communicate with the report_server.",
1813
1835
  },
1814
1836
  :report => {
@@ -1848,7 +1870,11 @@ EOT
1848
1870
  :default => "$statedir/last_run_report.yaml",
1849
1871
  :type => :file,
1850
1872
  :mode => "0640",
1851
- :desc => "Where puppet agent stores the last run report in yaml format."
1873
+ :desc => "Where Puppet Agent stores the last run report, by default, in yaml format.
1874
+ The format of the report can be changed by setting the `cache` key of the `report` terminus
1875
+ in the [routes.yaml](https://puppet.com/docs/puppet/latest/config_file_routes.html) file.
1876
+ To avoid mismatches between content and file extension, this setting needs to be
1877
+ manually updated to reflect the terminus changes."
1852
1878
  },
1853
1879
  :graph => {
1854
1880
  :default => false,
@@ -2123,7 +2149,7 @@ EOT
2123
2149
  }
2124
2150
  )
2125
2151
 
2126
- settings.define_settings(:master,
2152
+ settings.define_settings(:server,
2127
2153
  :storeconfigs => {
2128
2154
  :default => false,
2129
2155
  :type => :boolean,
@@ -2192,12 +2218,18 @@ EOT
2192
2218
  :func3x_check => {
2193
2219
  :default => true,
2194
2220
  :type => :boolean,
2195
- :desc => <<-'EOT'
2221
+ :desc => <<-'EOT',
2196
2222
  Causes validation of loaded legacy Ruby functions (3x API) to raise errors about illegal constructs that
2197
2223
  could cause harm or that simply does not work. This flag is on by default. This flag is made available
2198
2224
  so that the validation can be turned off in case the method of validation is faulty - if encountered, please
2199
2225
  file a bug report.
2200
2226
  EOT
2227
+ :call_hook => :on_initialize_and_write,
2228
+ :hook => proc do |value|
2229
+ unless value
2230
+ Puppet.deprecation_warning(_("The 'func3x_check' setting is deprecated and will be removed in a future release."))
2231
+ end
2232
+ end
2201
2233
  },
2202
2234
  :tasks => {
2203
2235
  :default => false,
@@ -159,8 +159,8 @@ module Puppet::Environments
159
159
  # Reads environments from a directory on disk. Each environment is
160
160
  # represented as a sub-directory. The environment's manifest setting is the
161
161
  # `manifest` directory of the environment directory. The environment's
162
- # modulepath setting is the global modulepath (from the `[master]` section
163
- # for the master) prepended with the `modules` directory of the environment
162
+ # modulepath setting is the global modulepath (from the `[server]` section
163
+ # for the server) prepended with the `modules` directory of the environment
164
164
  # directory.
165
165
  #
166
166
  # @api private
@@ -277,7 +277,7 @@ module Puppet::Environments
277
277
  def get(name)
278
278
  @loaders.each do |loader|
279
279
  env = loader.get(name)
280
- if env
280
+ if env
281
281
  return env
282
282
  end
283
283
  end
@@ -305,13 +305,23 @@ module Puppet::Environments
305
305
  include Puppet::Concurrent::Synchronized
306
306
 
307
307
  class DefaultCacheExpirationService
308
+ # Called when the environment is created.
309
+ #
310
+ # @param [Puppet::Node::Environment] env
308
311
  def created(env)
309
312
  end
310
313
 
314
+ # Is the environment with this name expired?
315
+ #
316
+ # @param [Symbol] env_name The symbolic environment name
317
+ # @return [Boolean]
311
318
  def expired?(env_name)
312
319
  false
313
320
  end
314
321
 
322
+ # The environment with this name was evicted.
323
+ #
324
+ # @param [Symbol] env_name The symbolic environment name
315
325
  def evicted(env_name)
316
326
  end
317
327
  end
@@ -336,12 +346,6 @@ module Puppet::Environments
336
346
  @loader = loader
337
347
  @cache_expiration_service = Puppet::Environments::Cached.cache_expiration_service
338
348
  @cache = {}
339
-
340
- # Holds expiration times in sorted order - next to expire is first
341
- @expirations = SortedSet.new
342
-
343
- # Infinity since it there are no entries, this is a cache of the first to expire time
344
- @next_expiration = END_OF_TIME
345
349
  end
346
350
 
347
351
  # @!macro loader_list
@@ -362,12 +366,13 @@ module Puppet::Environments
362
366
  clear_all_expired
363
367
  result = @cache[name]
364
368
  if result
369
+ Puppet.debug {"Found in cache '#{name}' #{result.label}"}
365
370
  # found in cache
371
+ result.touch
366
372
  return result.value
367
373
  elsif (result = @loader.get(name))
368
374
  # environment loaded, cache it
369
375
  cache_entry = entry(result)
370
- @cache_expiration_service.created(result)
371
376
  add_entry(name, cache_entry)
372
377
  result
373
378
  end
@@ -377,28 +382,36 @@ module Puppet::Environments
377
382
  def add_entry(name, cache_entry)
378
383
  Puppet.debug {"Caching environment '#{name}' #{cache_entry.label}"}
379
384
  @cache[name] = cache_entry
380
- expires = cache_entry.expires
381
- @expirations.add(expires)
382
- if @next_expiration > expires
383
- @next_expiration = expires
384
- end
385
+ @cache_expiration_service.created(cache_entry.value)
385
386
  end
386
387
  private :add_entry
387
388
 
389
+ def clear_entry(name, entry)
390
+ @cache.delete(name)
391
+ Puppet.debug {"Evicting cache entry for environment '#{name}'"}
392
+ @cache_expiration_service.evicted(name.to_sym)
393
+ Puppet::GettextConfig.delete_text_domain(name)
394
+ Puppet.settings.clear_environment_settings(name)
395
+ end
396
+ private :clear_entry
397
+
388
398
  # Clears the cache of the environment with the given name.
389
399
  # (The intention is that this could be used from a MANUAL cache eviction command (TBD)
390
400
  def clear(name)
391
- @cache.delete(name)
392
- Puppet::GettextConfig.delete_text_domain(name)
401
+ entry = @cache[name]
402
+ clear_entry(name, entry) if entry
393
403
  end
394
404
 
395
405
  # Clears all cached environments.
396
406
  # (The intention is that this could be used from a MANUAL cache eviction command (TBD)
397
- def clear_all()
407
+ def clear_all
398
408
  super
409
+
410
+ @cache.each_pair do |name, entry|
411
+ clear_entry(name, entry)
412
+ end
413
+
399
414
  @cache = {}
400
- @expirations.clear
401
- @next_expiration = END_OF_TIME
402
415
  Puppet::GettextConfig.delete_environment_text_domains
403
416
  end
404
417
 
@@ -407,17 +420,23 @@ module Puppet::Environments
407
420
  #
408
421
  def clear_all_expired()
409
422
  t = Time.now
410
- return if t < @next_expiration && ! @cache.any? {|name, _| @cache_expiration_service.expired?(name.to_sym) }
411
- to_expire = @cache.select { |name, entry| entry.expires < t || @cache_expiration_service.expired?(name.to_sym) }
412
- to_expire.each do |name, entry|
413
- Puppet.debug {"Evicting cache entry for environment '#{name}'"}
414
- @cache_expiration_service.evicted(name)
415
- clear(name)
416
- @expirations.delete(entry.expires)
417
- Puppet.settings.clear_environment_settings(name)
423
+
424
+ @cache.each_pair do |name, entry|
425
+ clear_if_expired(name, entry, t)
426
+ end
427
+ end
428
+
429
+ # Clear an environment if it is expired, either by exceeding its time to live, or
430
+ # through an explicit eviction determined by the cache expiration service.
431
+ #
432
+ def clear_if_expired(name, entry, t = Time.now)
433
+ return unless entry
434
+
435
+ if entry.expired?(t) || @cache_expiration_service.expired?(name.to_sym)
436
+ clear_entry(name, entry)
418
437
  end
419
- @next_expiration = @expirations.first || END_OF_TIME
420
438
  end
439
+ private :clear_if_expired
421
440
 
422
441
  # This implementation evicts the cache, and always gets the current
423
442
  # configuration of the environment
@@ -428,32 +447,30 @@ module Puppet::Environments
428
447
  #
429
448
  # @!macro loader_get_conf
430
449
  def get_conf(name)
431
- evict_if_expired(name)
450
+ clear_if_expired(name, @cache[name])
432
451
  @loader.get_conf(name)
433
452
  end
434
453
 
435
454
  # Creates a suitable cache entry given the time to live for one environment
436
455
  #
437
456
  def entry(env)
438
- ttl = (conf = get_conf(env.name)) ? conf.environment_timeout : Puppet.settings.value(:environment_timeout)
457
+ ttl = if (conf = get_conf(env.name))
458
+ conf.environment_timeout
459
+ else
460
+ Puppet[:environment_timeout]
461
+ end
462
+
439
463
  case ttl
440
464
  when 0
441
465
  NotCachedEntry.new(env) # Entry that is always expired (avoids syscall to get time)
442
466
  when Float::INFINITY
443
467
  Entry.new(env) # Entry that never expires (avoids syscall to get time)
444
468
  else
445
- TTLEntry.new(env, ttl)
446
- end
447
- end
448
-
449
- # Evicts the entry if it has expired
450
- # Also clears caches in Settings that may prevent the entry from being updated
451
- def evict_if_expired(name)
452
- if (result = @cache[name]) && (result.expired? || @cache_expiration_service.expired?(name))
453
- Puppet.debug {"Evicting cache entry for environment '#{name}'"}
454
- @cache_expiration_service.evicted(name)
455
- clear(name)
456
- Puppet.settings.clear_environment_settings(name)
469
+ if Puppet[:environment_timeout_mode] == :from_last_used
470
+ MRUEntry.new(env, ttl) # Entry that expires in ttl from when it was last touched
471
+ else
472
+ TTLEntry.new(env, ttl) # Entry that expires in ttl from when it was created
473
+ end
457
474
  end
458
475
  end
459
476
 
@@ -465,52 +482,60 @@ module Puppet::Environments
465
482
  @value = value
466
483
  end
467
484
 
468
- def expired?
485
+ def touch
486
+ end
487
+
488
+ def expired?(now)
469
489
  false
470
490
  end
471
491
 
472
492
  def label
473
493
  ""
474
494
  end
475
-
476
- def expires
477
- END_OF_TIME
478
- end
479
495
  end
480
496
 
481
497
  # Always evicting entry
482
498
  class NotCachedEntry < Entry
483
- def expired?
499
+ def expired?(now)
484
500
  true
485
501
  end
486
502
 
487
503
  def label
488
504
  "(ttl = 0 sec)"
489
505
  end
490
-
491
- def expires
492
- START_OF_TIME
493
- end
494
506
  end
495
507
 
496
- # Time to Live eviction policy entry
508
+ # Policy that expires in ttl_seconds from when it was created
497
509
  class TTLEntry < Entry
498
510
  def initialize(value, ttl_seconds)
499
- super value
511
+ super(value)
500
512
  @ttl = Time.now + ttl_seconds
501
513
  @ttl_seconds = ttl_seconds
502
514
  end
503
515
 
504
- def expired?
505
- Time.now > @ttl
516
+ def expired?(now)
517
+ now > @ttl
506
518
  end
507
519
 
508
520
  def label
509
521
  "(ttl = #{@ttl_seconds} sec)"
510
522
  end
523
+ end
511
524
 
512
- def expires
513
- @ttl
525
+ # Policy that expires if it hasn't been touched within ttl_seconds
526
+ class MRUEntry < TTLEntry
527
+ def initialize(value, ttl_seconds)
528
+ super(value, ttl_seconds)
529
+
530
+ touch
531
+ end
532
+
533
+ def touch
534
+ @ttl = Time.now + @ttl_seconds
535
+ end
536
+
537
+ def label
538
+ "(mru = #{@ttl_seconds} sec)"
514
539
  end
515
540
  end
516
541
  end