puppet 6.18.0-universal-darwin → 6.21.1-universal-darwin
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.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/defaults.rb +67 -35
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +62 -20
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/transaction/report.rb +11 -7
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +289 -268
- data/man/man5/puppet.conf.5 +33 -17
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +183 -22
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/filebucket_spec.rb +7 -7
- data/spec/integration/application/plugin_spec.rb +3 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +62 -11
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/resolver_spec.rb +24 -4
- data/spec/unit/http/service/ca_spec.rb +2 -2
- data/spec/unit/http/service/compiler_spec.rb +51 -2
- data/spec/unit/http/service/file_server_spec.rb +2 -2
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -2
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/http/session_spec.rb +8 -20
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +4 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -1
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +32 -10
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
data/lib/puppet/defaults.rb
CHANGED
@@ -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
|
-
|
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 `[
|
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
|
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
|
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
|
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
|
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
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
*
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
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
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
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
|
-
:
|
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(:
|
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 => "$
|
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 => "$
|
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
|
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(:
|
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,
|
data/lib/puppet/environments.rb
CHANGED
@@ -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 `[
|
163
|
-
# for the
|
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
|
-
|
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
|
392
|
-
|
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
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
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
|
-
|
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))
|
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
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
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
|
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
|
-
#
|
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
|
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
|
-
|
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
|
-
|
513
|
-
|
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
|