puppet 6.18.0-x64-mingw32 → 6.19.0-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.
- checksums.yaml +4 -4
- data/Gemfile.lock +8 -10
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application/agent.rb +8 -3
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/configurer.rb +39 -7
- data/lib/puppet/defaults.rb +55 -29
- data/lib/puppet/environments.rb +51 -10
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +46 -16
- 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/file_bucket/dipper.rb +1 -1
- 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/facts/yaml.rb +1 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- 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/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/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +19 -5
- 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/util/connection.rb +8 -8
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +153 -156
- data/man/man5/puppet.conf.5 +29 -13
- data/man/man8/puppet-agent.8 +6 -3
- data/man/man8/puppet-apply.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- 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 +4 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- 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/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/integration/application/agent_spec.rb +23 -19
- 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 +26 -1
- data/spec/integration/util/windows/adsi_spec.rb +2 -2
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application_spec.rb +9 -4
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/environments_spec.rb +99 -32
- data/spec/unit/face/config_spec.rb +56 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_system_spec.rb +1 -2
- 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 +2 -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/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/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- 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/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/provider/exec_spec.rb +4 -3
- 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/pip2_spec.rb +36 -0
- 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/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +44 -22
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/util/run_mode_spec.rb +6 -6
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2e4357cafdc23fb83474814b2ce8a4fbd4975980171e3f973bd5df8ef542bba
|
4
|
+
data.tar.gz: '080c5f00f7ba8ea052e56b7619151344bed4eb316b54e0635046e6d56ffbc414'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bf762c3a6772ddf89d3e4c2cb6b7b8167689a3a2b56e7008fff884d9fc8e7242b4f3087f3492faa400491c0725a676de8bc6c6860a644fa694497719d678b5e
|
7
|
+
data.tar.gz: '095a9120765d79a27b6dab5f346574e046226a5ea949049f263aadc5b2f04a991e83fd67a1b1407befd4ed8319d7dd0db73498739f0ccf807adf905bf8e549a9'
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
puppet (6.
|
4
|
+
puppet (6.19.0)
|
5
5
|
CFPropertyList (~> 2.2)
|
6
6
|
concurrent-ruby (~> 1.0)
|
7
7
|
deep_merge (~> 1.0)
|
@@ -23,13 +23,12 @@ GEM
|
|
23
23
|
ast (2.4.1)
|
24
24
|
coderay (1.1.3)
|
25
25
|
concurrent-ruby (1.1.7)
|
26
|
-
crack (0.4.
|
27
|
-
safe_yaml (~> 1.0.0)
|
26
|
+
crack (0.4.4)
|
28
27
|
csv (3.1.5)
|
29
28
|
deep_merge (1.2.1)
|
30
29
|
diff-lcs (1.4.4)
|
31
30
|
docopt (0.6.1)
|
32
|
-
facter (4.0.
|
31
|
+
facter (4.0.43)
|
33
32
|
hocon (~> 1.3)
|
34
33
|
thor (>= 1.0.1, < 2.0)
|
35
34
|
fast_gettext (1.1.2)
|
@@ -59,19 +58,19 @@ GEM
|
|
59
58
|
multi_json (1.15.0)
|
60
59
|
mustache (1.1.1)
|
61
60
|
optimist (3.0.1)
|
62
|
-
packaging (0.99.
|
61
|
+
packaging (0.99.71)
|
63
62
|
artifactory (~> 2)
|
64
63
|
csv (= 3.1.5)
|
65
64
|
rake (>= 12.3)
|
66
65
|
release-metrics
|
67
66
|
parallel (1.19.2)
|
68
|
-
parser (2.7.
|
67
|
+
parser (2.7.2.0)
|
69
68
|
ast (~> 2.4.1)
|
70
69
|
powerpack (0.1.2)
|
71
70
|
pry (0.13.1)
|
72
71
|
coderay (~> 1.1)
|
73
72
|
method_source (~> 1.0)
|
74
|
-
public_suffix (4.0.
|
73
|
+
public_suffix (4.0.6)
|
75
74
|
puppet-resource_api (1.8.13)
|
76
75
|
hocon (>= 1.0)
|
77
76
|
puppetserver-ca (1.8.0)
|
@@ -93,7 +92,7 @@ GEM
|
|
93
92
|
rspec-core (~> 3.9.0)
|
94
93
|
rspec-expectations (~> 3.9.0)
|
95
94
|
rspec-mocks (~> 3.9.0)
|
96
|
-
rspec-core (3.9.
|
95
|
+
rspec-core (3.9.3)
|
97
96
|
rspec-support (~> 3.9.3)
|
98
97
|
rspec-expectations (3.9.2)
|
99
98
|
diff-lcs (>= 1.2.0, < 2.0)
|
@@ -116,13 +115,12 @@ GEM
|
|
116
115
|
rubocop (~> 0.49.0)
|
117
116
|
ruby-prof (1.4.1)
|
118
117
|
ruby-progressbar (1.10.1)
|
119
|
-
safe_yaml (1.0.5)
|
120
118
|
semantic_puppet (1.0.2)
|
121
119
|
text (1.3.1)
|
122
120
|
thor (1.0.1)
|
123
121
|
unicode-display_width (1.7.0)
|
124
122
|
vcr (5.1.0)
|
125
|
-
webmock (3.
|
123
|
+
webmock (3.9.3)
|
126
124
|
addressable (>= 2.3.6)
|
127
125
|
crack (>= 0.3.2)
|
128
126
|
hashdiff (>= 0.4.0, < 2.0.0)
|
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Puppet
|
2
2
|
|
3
|
-
|
4
|
-
[![Appveyor Status](https://ci.appveyor.com/api/projects/status/cvhpypd4504sevqq/branch/master?svg=true)](https://ci.appveyor.com/project/puppetlabs/puppet/branch/master)
|
3
|
+
![RSpec tests](https://github.com/puppetlabs/puppet/workflows/RSpec%20tests/badge.svg)
|
5
4
|
[![Gem Version](https://badge.fury.io/rb/puppet.svg)](https://badge.fury.io/rb/puppet)
|
6
5
|
[![Inline docs](https://inch-ci.org/github/puppetlabs/puppet.svg)](https://inch-ci.org/github/puppetlabs/puppet)
|
7
6
|
|
data/Rakefile
CHANGED
@@ -61,12 +61,8 @@ end
|
|
61
61
|
desc "verify that commit messages match CONTRIBUTING.md requirements"
|
62
62
|
task(:commits) do
|
63
63
|
# This rake task looks at the summary from every commit from this branch not
|
64
|
-
# in the branch targeted for a PR.
|
65
|
-
|
66
|
-
# populated with the range of commits the PR contains. If not available, this
|
67
|
-
# falls back to `master..HEAD` as a next best bet as `master` is unlikely to
|
68
|
-
# ever be absent.
|
69
|
-
commit_range = ENV['TRAVIS_COMMIT_RANGE'].nil? ? 'master..HEAD' : ENV['TRAVIS_COMMIT_RANGE'].sub(/\.\.\./, '..')
|
64
|
+
# in the branch targeted for a PR.
|
65
|
+
commit_range = 'HEAD^..HEAD'
|
70
66
|
puts "Checking commits #{commit_range}"
|
71
67
|
%x{git log --no-merges --pretty=%s #{commit_range}}.each_line do |commit_summary|
|
72
68
|
# This regex tests for the currently supported commit summary tokens: maint, doc, packaging, or pup-<number>.
|
@@ -91,12 +87,8 @@ end
|
|
91
87
|
|
92
88
|
desc "verify that changed files are clean of Ruby warnings"
|
93
89
|
task(:warnings) do
|
94
|
-
# This rake task looks at all files modified in this branch.
|
95
|
-
|
96
|
-
# is present in travis CI and populated with the range of commits the PR
|
97
|
-
# contains. If not available, this falls back to `master..HEAD` as a next
|
98
|
-
# best bet as `master` is unlikely to ever be absent.
|
99
|
-
commit_range = ENV['TRAVIS_COMMIT_RANGE'].nil? ? 'master...HEAD' : ENV['TRAVIS_COMMIT_RANGE']
|
90
|
+
# This rake task looks at all files modified in this branch.
|
91
|
+
commit_range = 'HEAD^..HEAD'
|
100
92
|
ruby_files_ok = true
|
101
93
|
puts "Checking modified files #{commit_range}"
|
102
94
|
%x{git diff --diff-filter=ACM --name-only #{commit_range}}.each_line do |modified_file|
|
data/lib/puppet/agent/locker.rb
CHANGED
@@ -27,14 +27,7 @@ module Puppet::Agent::Locker
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
# @deprecated
|
31
30
|
def running?
|
32
|
-
#TRANSLATORS 'Puppet::Agent::Locker.running?' is a method name and should not be translated
|
33
|
-
message = _('Puppet::Agent::Locker.running? is deprecated as it is inherently unsafe.')
|
34
|
-
#TRANSLATORS 'LockError' should not be translated
|
35
|
-
message += ' ' + _('The only safe way to know if the lock is locked is to try lock and perform some '\
|
36
|
-
'action and then handle the LockError that may result.')
|
37
|
-
Puppet.deprecation_warning(message)
|
38
31
|
lockfile.locked?
|
39
32
|
end
|
40
33
|
|
@@ -103,7 +103,7 @@ USAGE
|
|
103
103
|
puppet agent [--certname <NAME>] [-D|--daemonize|--no-daemonize]
|
104
104
|
[-d|--debug] [--detailed-exitcodes] [--digest <DIGEST>] [--disable [MESSAGE]] [--enable]
|
105
105
|
[--fingerprint] [-h|--help] [-l|--logdest syslog|eventlog|<ABS FILEPATH>|console]
|
106
|
-
[--
|
106
|
+
[--serverport <PORT>] [--noop] [-o|--onetime] [--sourceaddress <IP_ADDRESS>] [-t|--test]
|
107
107
|
[-v|--verbose] [-V|--version] [-w|--waitforcert <SECONDS>]
|
108
108
|
|
109
109
|
|
@@ -277,8 +277,9 @@ generated by running puppet agent with '--genconfig'.
|
|
277
277
|
format.
|
278
278
|
|
279
279
|
* --masterport:
|
280
|
-
The port on which to contact the
|
281
|
-
(This is a Puppet setting, and can go in puppet.conf.
|
280
|
+
The port on which to contact the Puppet Server.
|
281
|
+
(This is a Puppet setting, and can go in puppet.conf.
|
282
|
+
Deprecated in favor of the 'serverport' setting.)
|
282
283
|
|
283
284
|
* --noop:
|
284
285
|
Use 'noop' mode where the daemon runs in a no-op or dry-run mode. This
|
@@ -294,6 +295,10 @@ generated by running puppet agent with '--genconfig'.
|
|
294
295
|
(This is a Puppet setting, and can go in puppet.conf. Note the special 'no-'
|
295
296
|
prefix for boolean settings on the command line.)
|
296
297
|
|
298
|
+
* --serverport:
|
299
|
+
The port on which to contact the Puppet Server.
|
300
|
+
(This is a Puppet setting, and can go in puppet.conf.)
|
301
|
+
|
297
302
|
* --sourceaddress:
|
298
303
|
Set the source IP address for transactions. This defaults to automatically selected.
|
299
304
|
(This is a Puppet setting, and can go in puppet.conf.)
|
@@ -8,7 +8,7 @@ class Puppet::Application::Lookup < Puppet::Application
|
|
8
8
|
RUN_HELP = _("Run 'puppet lookup --help' for more details").freeze
|
9
9
|
DEEP_MERGE_OPTIONS = '--knock-out-prefix, --sort-merged-arrays, and --merge-hash-arrays'.freeze
|
10
10
|
|
11
|
-
run_mode :
|
11
|
+
run_mode :server
|
12
12
|
|
13
13
|
# Options for lookup
|
14
14
|
option('--merge TYPE') do |arg|
|
@@ -92,12 +92,12 @@ class Puppet::Application::Lookup < Puppet::Application
|
|
92
92
|
|
93
93
|
if options[:node]
|
94
94
|
Puppet::Util.skip_external_facts do
|
95
|
-
Puppet.settings.use :main, :
|
95
|
+
Puppet.settings.use :main, :server, :ssl, :metrics
|
96
96
|
end
|
97
97
|
else
|
98
|
-
Puppet.settings.use :main, :
|
98
|
+
Puppet.settings.use :main, :server, :ssl, :metrics
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
setup_terminuses
|
102
102
|
end
|
103
103
|
|
@@ -371,7 +371,7 @@ Copyright (c) 2015 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
371
371
|
Puppet[:code] = 'undef' unless options[:compile]
|
372
372
|
compiler = Puppet::Parser::Compiler.new(node)
|
373
373
|
if options[:node]
|
374
|
-
Puppet::Util.skip_external_facts do
|
374
|
+
Puppet::Util.skip_external_facts do
|
375
375
|
compiler.compile { |catalog| yield(compiler.topscope); catalog }
|
376
376
|
end
|
377
377
|
else
|
data/lib/puppet/configurer.rb
CHANGED
@@ -53,6 +53,7 @@ class Puppet::Configurer
|
|
53
53
|
def initialize(transaction_uuid = nil, job_id = nil)
|
54
54
|
@running = false
|
55
55
|
@splayed = false
|
56
|
+
@running_failure = false
|
56
57
|
@cached_catalog_status = 'not_used'
|
57
58
|
@environment = Puppet[:environment]
|
58
59
|
@transaction_uuid = transaction_uuid || SecureRandom.uuid
|
@@ -65,9 +66,16 @@ class Puppet::Configurer
|
|
65
66
|
# Get the remote catalog, yo. Returns nil if no catalog can be found.
|
66
67
|
def retrieve_catalog(facts, query_options)
|
67
68
|
query_options ||= {}
|
68
|
-
|
69
|
+
if Puppet[:use_cached_catalog] || @running_failure
|
70
|
+
result = retrieve_catalog_from_cache(query_options)
|
71
|
+
end
|
72
|
+
|
69
73
|
if result
|
70
|
-
|
74
|
+
if Puppet[:use_cached_catalog]
|
75
|
+
@cached_catalog_status = 'explicitly_requested'
|
76
|
+
elsif @running_failure
|
77
|
+
@cached_catalog_status = 'on_failure'
|
78
|
+
end
|
71
79
|
|
72
80
|
Puppet.info _("Using cached catalog from environment '%{environment}'") % { environment: result.environment }
|
73
81
|
else
|
@@ -215,10 +223,26 @@ class Puppet::Configurer
|
|
215
223
|
# mode. We shouldn't try to do any failover in that case.
|
216
224
|
if options[:catalog].nil? && do_failover
|
217
225
|
server, port = find_functional_server
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
226
|
+
begin
|
227
|
+
if server.nil?
|
228
|
+
raise Puppet::Error, _("Could not select a functional puppet server from server_list: '%{server_list}'") % { server_list: Puppet.settings.value(:server_list, Puppet[:environment].to_sym, true) }
|
229
|
+
else
|
230
|
+
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
231
|
+
Puppet.debug _("Selected puppet server from the `server_list` setting: %{server}:%{port}") % { server: server, port: port }
|
232
|
+
report.server_used = "#{server}:#{port}"
|
233
|
+
end
|
234
|
+
rescue Puppet::Error => detail
|
235
|
+
if Puppet[:usecacheonfailure]
|
236
|
+
options[:pluginsync] = false
|
237
|
+
@running_failure = true
|
238
|
+
if server.nil?
|
239
|
+
server = Puppet[:server_list].first[0]
|
240
|
+
port = Puppet[:server_list].first[1] || Puppet[:serverport]
|
241
|
+
end
|
242
|
+
Puppet.log_exception(detail)
|
243
|
+
else
|
244
|
+
raise detail
|
245
|
+
end
|
222
246
|
end
|
223
247
|
Puppet.override(server: server, serverport: port) do
|
224
248
|
completed = run_internal(options)
|
@@ -538,6 +562,14 @@ class Puppet::Configurer
|
|
538
562
|
end
|
539
563
|
|
540
564
|
def download_plugins(remote_environment_for_plugins)
|
541
|
-
|
565
|
+
begin
|
566
|
+
@handler.download_plugins(remote_environment_for_plugins)
|
567
|
+
rescue Puppet::Error => detail
|
568
|
+
if !Puppet[:ignore_plugin_errors] && Puppet[:usecacheonfailure]
|
569
|
+
@running_failure = true
|
570
|
+
else
|
571
|
+
raise detail
|
572
|
+
end
|
573
|
+
end
|
542
574
|
end
|
543
575
|
end
|
data/lib/puppet/defaults.rb
CHANGED
@@ -374,7 +374,7 @@ module Puppet
|
|
374
374
|
from the parent process.
|
375
375
|
|
376
376
|
This setting can only be set in the `[main]` section of puppet.conf; it cannot
|
377
|
-
be set in `[
|
377
|
+
be set in `[server]`, `[agent]`, or an environment config section.",
|
378
378
|
:call_hook => :on_define_and_write,
|
379
379
|
:hook => proc do |value|
|
380
380
|
Puppet::Util.set_env('PATH', '') if Puppet::Util.get_env('PATH').nil?
|
@@ -562,7 +562,7 @@ module Puppet
|
|
562
562
|
config = File.expand_path(File.join(settings[:confdir], 'hiera.yaml')) if config.nil?
|
563
563
|
config
|
564
564
|
end,
|
565
|
-
:desc => "The hiera configuration file. Puppet only reads this file on startup, so you must restart the puppet
|
565
|
+
: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
566
|
:type => :file,
|
567
567
|
},
|
568
568
|
:binder_config => {
|
@@ -700,40 +700,54 @@ Valid values are 0 (never cache) and 15 (15 second minimum wait time).
|
|
700
700
|
:environment_timeout => {
|
701
701
|
:default => "0",
|
702
702
|
:type => :ttl,
|
703
|
-
:desc => "How long the Puppet
|
703
|
+
:desc => "How long the Puppet server should cache data it loads from an
|
704
704
|
environment.
|
705
705
|
|
706
706
|
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.
|
707
|
+
`unlimited`, which will cache environments until the server is restarted
|
708
|
+
or told to refresh the cache. All other values will result in Puppet
|
709
|
+
server evicting expired environments. The expiration time is computed
|
710
|
+
based on either when the environment was created or last accessed, see
|
711
|
+
`environment_timeout_mode`.
|
709
712
|
|
710
713
|
You should change this setting once your Puppet deployment is doing
|
711
714
|
non-trivial work. We chose the default value of `0` because it lets new
|
712
715
|
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
|
-
|
716
|
+
performance of your Puppet server. We recommend either:
|
717
|
+
|
718
|
+
* Setting this to `unlimited` and explicitly refreshing your Puppet server
|
719
|
+
as part of your code deployment process.
|
720
|
+
|
721
|
+
* Setting this to a number that will keep your most actively used
|
722
|
+
environments cached, but allow testing environments to fall out of the
|
723
|
+
cache and reduce memory usage. A value of 3 minutes (3m) is a reasonable
|
724
|
+
value. This option requires setting `environment_timeout_mode` to
|
725
|
+
`from_last_used`.
|
726
|
+
|
727
|
+
Once you set `environment_timeout` to a non-zero value, you need to tell
|
728
|
+
Puppet server to read new code from disk using the `environment-cache` API
|
729
|
+
endpoint after you deploy new code. See the docs for the Puppet Server
|
730
|
+
[administrative API](https://puppet.com/docs/puppetserver/latest/admin-api/v1/environment-cache.html).
|
731
|
+
",
|
726
732
|
: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
|
733
|
+
if Puppet[:environment_timeout_mode] == :from_created
|
734
|
+
unless [0, 'unlimited', Float::INFINITY].include?(val)
|
735
|
+
Puppet.deprecation_warning("Evicting environments based on their creation time is deprecated, please set `environment_timeout_mode` to `from_last_used` instead.")
|
736
|
+
end
|
734
737
|
end
|
735
738
|
end
|
736
739
|
},
|
740
|
+
:environment_timeout_mode => {
|
741
|
+
:default => :from_created,
|
742
|
+
:type => :symbolic_enum,
|
743
|
+
:values => [:from_created, :from_last_used],
|
744
|
+
:desc => "How Puppet interprets the `environment_timeout` setting when
|
745
|
+
`environment_timeout` is neither `0` nor `unlimited`. If set to
|
746
|
+
`from_created`, then the environment will be evicted `environment_timeout`
|
747
|
+
seconds from when it was created. If set to `from_last_used` then the
|
748
|
+
environment will be evicted `environment_timeout` seconds from when it
|
749
|
+
was last used."
|
750
|
+
},
|
737
751
|
:environment_data_provider => {
|
738
752
|
:desc => "The name of a registered environment data provider used when obtaining environment
|
739
753
|
specific data. The three built in and registered providers are 'none' (no data), 'function' (data
|
@@ -1303,7 +1317,7 @@ EOT
|
|
1303
1317
|
}
|
1304
1318
|
)
|
1305
1319
|
|
1306
|
-
settings.define_settings(:
|
1320
|
+
settings.define_settings(:server,
|
1307
1321
|
:user => {
|
1308
1322
|
:default => "puppet",
|
1309
1323
|
:desc => "The user Puppet Server will run as. Used to ensure
|
@@ -1353,11 +1367,23 @@ EOT
|
|
1353
1367
|
by `puppet`, and should only be set if you're writing your own Puppet
|
1354
1368
|
executable.",
|
1355
1369
|
},
|
1370
|
+
:serverport => {
|
1371
|
+
:default => 8140,
|
1372
|
+
:desc => "The default port puppet subcommands use to communicate
|
1373
|
+
with Puppet Server. (eg `puppet facts upload`, `puppet agent`). May be
|
1374
|
+
overridden by more specific settings (see `ca_port`, `report_port`).",
|
1375
|
+
:hook => proc do |value|
|
1376
|
+
Puppet[:masterport] = value unless Puppet.settings.set_by_config?(:masterport)
|
1377
|
+
end
|
1378
|
+
},
|
1356
1379
|
:masterport => {
|
1357
1380
|
:default => 8140,
|
1358
1381
|
:desc => "The default port puppet subcommands use to communicate
|
1359
1382
|
with Puppet Server. (eg `puppet facts upload`, `puppet agent`). May be
|
1360
1383
|
overridden by more specific settings (see `ca_port`, `report_port`).",
|
1384
|
+
:hook => proc do |value|
|
1385
|
+
Puppet[:serverport] = value unless Puppet.settings.set_by_config?(:serverport)
|
1386
|
+
end
|
1361
1387
|
},
|
1362
1388
|
:node_name => {
|
1363
1389
|
:default => 'cert',
|
@@ -1719,7 +1745,7 @@ EOT
|
|
1719
1745
|
and does not need to horizontally scale.",
|
1720
1746
|
},
|
1721
1747
|
:ca_port => {
|
1722
|
-
:default => "$
|
1748
|
+
:default => "$serverport",
|
1723
1749
|
:desc => "The port to use for the certificate authority.",
|
1724
1750
|
},
|
1725
1751
|
:preferred_serialization_format => {
|
@@ -1808,7 +1834,7 @@ EOT
|
|
1808
1834
|
:desc => "The server to send transaction reports to.",
|
1809
1835
|
},
|
1810
1836
|
:report_port => {
|
1811
|
-
:default => "$
|
1837
|
+
:default => "$serverport",
|
1812
1838
|
:desc => "The port to communicate with the report_server.",
|
1813
1839
|
},
|
1814
1840
|
:report => {
|
@@ -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,
|
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
|
@@ -362,7 +372,9 @@ module Puppet::Environments
|
|
362
372
|
clear_all_expired
|
363
373
|
result = @cache[name]
|
364
374
|
if result
|
375
|
+
Puppet.debug {"Found in cache '#{name}' #{result.label}"}
|
365
376
|
# found in cache
|
377
|
+
result.touch
|
366
378
|
return result.value
|
367
379
|
elsif (result = @loader.get(name))
|
368
380
|
# environment loaded, cache it
|
@@ -411,7 +423,7 @@ module Puppet::Environments
|
|
411
423
|
to_expire = @cache.select { |name, entry| entry.expires < t || @cache_expiration_service.expired?(name.to_sym) }
|
412
424
|
to_expire.each do |name, entry|
|
413
425
|
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
414
|
-
@cache_expiration_service.evicted(name)
|
426
|
+
@cache_expiration_service.evicted(name.to_sym)
|
415
427
|
clear(name)
|
416
428
|
@expirations.delete(entry.expires)
|
417
429
|
Puppet.settings.clear_environment_settings(name)
|
@@ -435,23 +447,32 @@ module Puppet::Environments
|
|
435
447
|
# Creates a suitable cache entry given the time to live for one environment
|
436
448
|
#
|
437
449
|
def entry(env)
|
438
|
-
ttl = (conf = get_conf(env.name))
|
450
|
+
ttl = if (conf = get_conf(env.name))
|
451
|
+
conf.environment_timeout
|
452
|
+
else
|
453
|
+
Puppet[:environment_timeout]
|
454
|
+
end
|
455
|
+
|
439
456
|
case ttl
|
440
457
|
when 0
|
441
458
|
NotCachedEntry.new(env) # Entry that is always expired (avoids syscall to get time)
|
442
459
|
when Float::INFINITY
|
443
460
|
Entry.new(env) # Entry that never expires (avoids syscall to get time)
|
444
461
|
else
|
445
|
-
|
462
|
+
if Puppet[:environment_timeout_mode] == :from_last_used
|
463
|
+
MRUEntry.new(env, ttl) # Entry that expires in ttl from when it was last touched
|
464
|
+
else
|
465
|
+
TTLEntry.new(env, ttl) # Entry that expires in ttl from when it was created
|
466
|
+
end
|
446
467
|
end
|
447
468
|
end
|
448
469
|
|
449
470
|
# Evicts the entry if it has expired
|
450
471
|
# Also clears caches in Settings that may prevent the entry from being updated
|
451
472
|
def evict_if_expired(name)
|
452
|
-
if (result = @cache[name]) && (result.expired? || @cache_expiration_service.expired?(name))
|
473
|
+
if (result = @cache[name]) && (result.expired? || @cache_expiration_service.expired?(name.to_sym))
|
453
474
|
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
454
|
-
@cache_expiration_service.evicted(name)
|
475
|
+
@cache_expiration_service.evicted(name.to_sym)
|
455
476
|
clear(name)
|
456
477
|
Puppet.settings.clear_environment_settings(name)
|
457
478
|
end
|
@@ -465,6 +486,9 @@ module Puppet::Environments
|
|
465
486
|
@value = value
|
466
487
|
end
|
467
488
|
|
489
|
+
def touch
|
490
|
+
end
|
491
|
+
|
468
492
|
def expired?
|
469
493
|
false
|
470
494
|
end
|
@@ -493,10 +517,10 @@ module Puppet::Environments
|
|
493
517
|
end
|
494
518
|
end
|
495
519
|
|
496
|
-
#
|
520
|
+
# Policy that expires in ttl_seconds from when it was created
|
497
521
|
class TTLEntry < Entry
|
498
522
|
def initialize(value, ttl_seconds)
|
499
|
-
super
|
523
|
+
super(value)
|
500
524
|
@ttl = Time.now + ttl_seconds
|
501
525
|
@ttl_seconds = ttl_seconds
|
502
526
|
end
|
@@ -513,5 +537,22 @@ module Puppet::Environments
|
|
513
537
|
@ttl
|
514
538
|
end
|
515
539
|
end
|
540
|
+
|
541
|
+
# Policy that expires if it hasn't been touched within ttl_seconds
|
542
|
+
class MRUEntry < TTLEntry
|
543
|
+
def initialize(value, ttl_seconds)
|
544
|
+
super(value, ttl_seconds)
|
545
|
+
|
546
|
+
touch
|
547
|
+
end
|
548
|
+
|
549
|
+
def touch
|
550
|
+
@ttl = Time.now + @ttl_seconds
|
551
|
+
end
|
552
|
+
|
553
|
+
def label
|
554
|
+
"(mru = #{@ttl_seconds} sec)"
|
555
|
+
end
|
556
|
+
end
|
516
557
|
end
|
517
558
|
end
|