puppet 6.11.1 → 6.12.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +1 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +16 -16
- data/README.md +1 -1
- data/ext/build_defaults.yaml +1 -0
- data/ext/windows/service/daemon.rb +22 -17
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +45 -31
- data/lib/puppet/defaults.rb +42 -3
- data/lib/puppet/environments.rb +3 -0
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +30 -86
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/http.rb +2 -0
- data/lib/puppet/http/client.rb +89 -17
- data/lib/puppet/http/resolver.rb +14 -1
- data/lib/puppet/http/resolver/server_list.rb +38 -0
- data/lib/puppet/http/resolver/settings.rb +3 -2
- data/lib/puppet/http/resolver/srv.rb +10 -4
- data/lib/puppet/http/service.rb +32 -0
- data/lib/puppet/http/service/ca.rb +11 -10
- data/lib/puppet/http/service/report.rb +40 -0
- data/lib/puppet/http/session.rb +11 -32
- data/lib/puppet/network/http/base_pool.rb +13 -0
- data/lib/puppet/node/environment.rb +13 -7
- data/lib/puppet/pal/pal_impl.rb +5 -0
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +3 -4
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +6 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/provider/package/portage.rb +3 -3
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/runtime.rb +1 -0
- data/lib/puppet/ssl/ssl_provider.rb +20 -0
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +3 -2
- data/lib/puppet/type/user.rb +3 -2
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/windows/adsi.rb +48 -18
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +155 -141
- data/man/man5/puppet.conf.5 +33 -3
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- 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 +1 -1
- 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 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/forge/bacula.json +76 -0
- data/spec/integration/http/client_spec.rb +144 -0
- data/spec/integration/module_tool/forge_spec.rb +64 -0
- data/spec/lib/puppet_spec/https.rb +5 -3
- data/spec/spec_helper.rb +6 -2
- data/spec/unit/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer_spec.rb +394 -399
- data/spec/unit/defaults_spec.rb +15 -4
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/http/client_spec.rb +138 -6
- data/spec/unit/http/resolver_spec.rb +49 -12
- data/spec/unit/http/service/ca_spec.rb +56 -5
- data/spec/unit/http/service/report_spec.rb +100 -0
- data/spec/unit/http/service_spec.rb +20 -0
- data/spec/unit/http/session_spec.rb +53 -18
- data/spec/unit/network/http/connection_spec.rb +0 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
- data/spec/unit/transaction_spec.rb +46 -0
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/windows/adsi_spec.rb +51 -0
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/manpages.rake +1 -0
- metadata +24 -5
- data/spec/lib/puppet_spec/validators.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c121885834ded259f002e574ca1ada8dc8ad318668d1234baa71496c58c8fe34
|
4
|
+
data.tar.gz: 71cfdf18ccace429a2d195a12152ab90b56b82f22435e3075db530ce511f5f34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2434c6af3a1a975b0c64a405651e28462ab6651ea6f735418ae30447110f4712f6d425221f981ebb0361183eda36ee1a501be4d6eea42cf89a259f5727f0a15
|
7
|
+
data.tar.gz: ebcae5fa3568c1c96efec45dc5903f0c0ad1ca98b4d7dd26d7f1ec2122b8bc73fb3c062a668d58a979fa472d646b81b93c7d828c0bf3aa7a783f74f1200837d2
|
data/CODEOWNERS
CHANGED
data/Gemfile
CHANGED
@@ -14,6 +14,7 @@ end
|
|
14
14
|
|
15
15
|
# override .gemspec deps - may issue warning depending on Bundler version
|
16
16
|
gem "facter", *location_for(ENV['FACTER_LOCATION']) if ENV.has_key?('FACTER_LOCATION')
|
17
|
+
gem "facter-ng", *location_for(ENV['FACTER_NG_LOCATION']) if ENV.has_key?('FACTER_NG_LOCATION')
|
17
18
|
gem "hiera", *location_for(ENV['HIERA_LOCATION']) if ENV.has_key?('HIERA_LOCATION')
|
18
19
|
gem "semantic_puppet", *location_for(ENV['SEMANTIC_PUPPET_LOCATION'] || ["~> 1.0"])
|
19
20
|
gem "puppet-resource_api", *location_for(ENV['RESOURCE_API_LOCATION'] || ["~> 1.5"])
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
puppet (6.
|
4
|
+
puppet (6.12.0)
|
5
5
|
CFPropertyList (~> 2.2)
|
6
6
|
concurrent-ruby (~> 1.0)
|
7
7
|
deep_merge (~> 1.0)
|
@@ -34,9 +34,9 @@ GEM
|
|
34
34
|
gettext (3.2.9)
|
35
35
|
locale (>= 2.0.5)
|
36
36
|
text (>= 1.3.0)
|
37
|
-
gettext-setup (0.
|
37
|
+
gettext-setup (0.34)
|
38
38
|
fast_gettext (~> 1.1.0)
|
39
|
-
gettext (>= 3.0.2)
|
39
|
+
gettext (>= 3.0.2, < 3.3.0)
|
40
40
|
locale
|
41
41
|
hashdiff (1.0.0)
|
42
42
|
hiera (3.6.0)
|
@@ -55,30 +55,30 @@ GEM
|
|
55
55
|
minitar (0.9)
|
56
56
|
msgpack (1.3.1)
|
57
57
|
multi_json (1.14.1)
|
58
|
-
mustache (1.1.
|
58
|
+
mustache (1.1.1)
|
59
59
|
optimist (3.0.0)
|
60
|
-
packaging (0.99.
|
60
|
+
packaging (0.99.52)
|
61
61
|
artifactory (~> 2)
|
62
62
|
rake (>= 12.3)
|
63
63
|
release-metrics
|
64
|
-
parallel (1.19.
|
65
|
-
parser (2.
|
64
|
+
parallel (1.19.1)
|
65
|
+
parser (2.7.0.2)
|
66
66
|
ast (~> 2.4.0)
|
67
67
|
powerpack (0.1.2)
|
68
68
|
pry (0.12.2)
|
69
69
|
coderay (~> 1.1.0)
|
70
70
|
method_source (~> 0.9.0)
|
71
|
-
public_suffix (4.0.
|
71
|
+
public_suffix (4.0.3)
|
72
72
|
puppet-resource_api (1.8.7)
|
73
73
|
hocon (>= 1.0)
|
74
|
-
puppetserver-ca (1.
|
74
|
+
puppetserver-ca (1.5.0)
|
75
75
|
facter (>= 2.0.1, < 4)
|
76
76
|
racc (1.4.9)
|
77
77
|
rainbow (2.2.2)
|
78
78
|
rake
|
79
79
|
rake (12.3.3)
|
80
80
|
rdiscount (2.2.0.1)
|
81
|
-
rdoc (6.2.
|
81
|
+
rdoc (6.2.1)
|
82
82
|
release-metrics (1.1.0)
|
83
83
|
csv
|
84
84
|
docopt
|
@@ -90,18 +90,18 @@ GEM
|
|
90
90
|
rspec-core (~> 3.9.0)
|
91
91
|
rspec-expectations (~> 3.9.0)
|
92
92
|
rspec-mocks (~> 3.9.0)
|
93
|
-
rspec-core (3.9.
|
94
|
-
rspec-support (~> 3.9.
|
93
|
+
rspec-core (3.9.1)
|
94
|
+
rspec-support (~> 3.9.1)
|
95
95
|
rspec-expectations (3.9.0)
|
96
96
|
diff-lcs (>= 1.2.0, < 2.0)
|
97
97
|
rspec-support (~> 3.9.0)
|
98
98
|
rspec-its (1.3.0)
|
99
99
|
rspec-core (>= 3.0.0)
|
100
100
|
rspec-expectations (>= 3.0.0)
|
101
|
-
rspec-mocks (3.9.
|
101
|
+
rspec-mocks (3.9.1)
|
102
102
|
diff-lcs (>= 1.2.0, < 2.0)
|
103
103
|
rspec-support (~> 3.9.0)
|
104
|
-
rspec-support (3.9.
|
104
|
+
rspec-support (3.9.2)
|
105
105
|
rubocop (0.49.1)
|
106
106
|
parallel (~> 1.10)
|
107
107
|
parser (>= 2.3.3.1, < 3.0)
|
@@ -111,7 +111,7 @@ GEM
|
|
111
111
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
112
112
|
rubocop-i18n (1.2.0)
|
113
113
|
rubocop (~> 0.49.0)
|
114
|
-
ruby-prof (1.
|
114
|
+
ruby-prof (1.1.0)
|
115
115
|
ruby-progressbar (1.10.1)
|
116
116
|
safe_yaml (1.0.5)
|
117
117
|
semantic_puppet (1.0.2)
|
@@ -122,7 +122,7 @@ GEM
|
|
122
122
|
addressable (>= 2.3.6)
|
123
123
|
crack (>= 0.3.2)
|
124
124
|
hashdiff (>= 0.4.0, < 2.0.0)
|
125
|
-
yard (0.9.
|
125
|
+
yard (0.9.24)
|
126
126
|
|
127
127
|
PLATFORMS
|
128
128
|
ruby
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ HTTP API
|
|
23
23
|
Installation
|
24
24
|
------------
|
25
25
|
|
26
|
-
The best way to run Puppet is with [Puppet Enterprise (PE)](https://puppet.com/
|
26
|
+
The best way to run Puppet is with [Puppet Enterprise (PE)](https://puppet.com/products/puppet-enterprise/),
|
27
27
|
which also includes orchestration features, a web console, and professional support.
|
28
28
|
The PE documentation is [available here.](https://puppet.com/docs/pe/latest)
|
29
29
|
|
data/ext/build_defaults.yaml
CHANGED
@@ -15,6 +15,7 @@ class WindowsDaemon < Win32::Daemon
|
|
15
15
|
|
16
16
|
@run_thread = nil
|
17
17
|
@LOG_TO_FILE = false
|
18
|
+
@loglevel = 0
|
18
19
|
LOG_FILE = File.expand_path(File.join(Dir::COMMON_APPDATA, 'PuppetLabs', 'puppet', 'var', 'log', 'windows.log'))
|
19
20
|
LEVELS = [:debug, :info, :notice, :warning, :err, :alert, :emerg, :crit]
|
20
21
|
LEVELS.each do |level|
|
@@ -27,9 +28,6 @@ class WindowsDaemon < Win32::Daemon
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def service_main(*argsv)
|
30
|
-
base_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
31
|
-
load_env(base_dir)
|
32
|
-
|
33
31
|
argsv = (argsv << ARGV).flatten.compact
|
34
32
|
args = argsv.join(' ')
|
35
33
|
@loglevel = LEVELS.index(argsv.index('--debug') ? :debug : :notice)
|
@@ -41,6 +39,9 @@ class WindowsDaemon < Win32::Daemon
|
|
41
39
|
args = args.gsub("--logtofile","")
|
42
40
|
end
|
43
41
|
|
42
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
43
|
+
load_env(base_dir)
|
44
|
+
|
44
45
|
# The puppet installer registers a 'Puppet' event source. For the moment events will be logged with this key, but
|
45
46
|
# it may be a good idea to split the Service and Puppet events later so it's easier to read in the windows Event Log.
|
46
47
|
#
|
@@ -190,20 +191,24 @@ class WindowsDaemon < Win32::Daemon
|
|
190
191
|
private
|
191
192
|
|
192
193
|
def load_env(base_dir)
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
194
|
+
begin
|
195
|
+
# ENV that uses backward slashes
|
196
|
+
ENV['FACTER_env_windows_installdir'] = base_dir.tr('/', '\\')
|
197
|
+
ENV['PL_BASEDIR'] = base_dir.tr('/', '\\')
|
198
|
+
ENV['PUPPET_DIR'] = File.join(base_dir, 'puppet').tr('/', '\\')
|
199
|
+
ENV['OPENSSL_CONF'] = File.join(base_dir, 'puppet', 'ssl', 'openssl.cnf').tr('/', '\\')
|
200
|
+
ENV['SSL_CERT_DIR'] = File.join(base_dir, 'puppet', 'ssl', 'certs').tr('/', '\\')
|
201
|
+
ENV['SSL_CERT_FILE'] = File.join(base_dir, 'puppet', 'ssl', 'cert.pem').tr('/', '\\')
|
202
|
+
ENV['Path'] = [
|
203
|
+
File.join(base_dir, 'puppet', 'bin'),
|
204
|
+
File.join(base_dir, 'bin'),
|
205
|
+
].join(';').tr('/', '\\') + ';' + ENV['Path']
|
206
|
+
|
207
|
+
# ENV that uses forward slashes
|
208
|
+
ENV['RUBYLIB'] = "#{File.join(base_dir, 'puppet','lib')};#{ENV['RUBYLIB']}"
|
209
|
+
rescue => e
|
210
|
+
log_exception(e)
|
211
|
+
end
|
207
212
|
end
|
208
213
|
end
|
209
214
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'puppet/concurrent/synchronized'
|
2
|
+
|
3
|
+
module Puppet
|
4
|
+
module Concurrent
|
5
|
+
|
6
|
+
# A simple lock that at the moment only does any locking on jruby
|
7
|
+
class Lock
|
8
|
+
include Puppet::Concurrent::Synchronized
|
9
|
+
def synchronize
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Puppet
|
2
|
+
module Concurrent
|
3
|
+
|
4
|
+
# Including Puppet::Concurrent::Synchronized into a class when running on JRuby
|
5
|
+
# causes all of its instance methods to be synchronized on the instance itself.
|
6
|
+
# When running on MRI it has no effect.
|
7
|
+
if RUBY_PLATFORM == 'java'
|
8
|
+
require 'jruby/synchronized'
|
9
|
+
Synchronized = JRuby::Synchronized
|
10
|
+
else
|
11
|
+
module Synchronized; end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Puppet
|
2
|
+
module Concurrent
|
3
|
+
module ThreadLocalSingleton
|
4
|
+
def singleton
|
5
|
+
key = (name + ".singleton").intern
|
6
|
+
thread = Thread.current
|
7
|
+
unless thread.thread_variable?(key)
|
8
|
+
thread.thread_variable_set(key, new)
|
9
|
+
end
|
10
|
+
thread.thread_variable_get(key)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/puppet/configurer.rb
CHANGED
@@ -150,9 +150,10 @@ class Puppet::Configurer
|
|
150
150
|
facts_hash
|
151
151
|
end
|
152
152
|
|
153
|
-
def prepare_and_retrieve_catalog(options, query_options)
|
153
|
+
def prepare_and_retrieve_catalog(cached_catalog, options, query_options)
|
154
154
|
# set report host name now that we have the fact
|
155
155
|
options[:report].host = Puppet[:node_name_value]
|
156
|
+
|
156
157
|
query_options[:transaction_uuid] = @transaction_uuid
|
157
158
|
query_options[:job_id] = @job_id
|
158
159
|
query_options[:static_catalog] = @static_catalog
|
@@ -162,26 +163,19 @@ class Puppet::Configurer
|
|
162
163
|
query_options[:checksum_type] = @checksum_type.join('.')
|
163
164
|
|
164
165
|
# apply passes in ral catalog
|
165
|
-
catalog = options
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
Puppet.err _("Could not retrieve catalog; skipping run")
|
173
|
-
nil
|
166
|
+
catalog = cached_catalog || options[:catalog]
|
167
|
+
unless catalog
|
168
|
+
# retrieve_catalog returns resource catalog
|
169
|
+
catalog = retrieve_catalog(query_options)
|
170
|
+
Puppet.err _("Could not retrieve catalog; skipping run") unless catalog
|
171
|
+
end
|
172
|
+
catalog
|
174
173
|
end
|
175
174
|
|
176
175
|
def prepare_and_retrieve_catalog_from_cache(options = {})
|
177
176
|
result = retrieve_catalog_from_cache({:transaction_uuid => @transaction_uuid, :static_catalog => @static_catalog})
|
178
|
-
if result
|
179
|
-
|
180
|
-
# get facts now so that the convert_catalog method can resolve deferred values
|
181
|
-
get_facts(options)
|
182
|
-
return convert_catalog(result, @duration, options)
|
183
|
-
end
|
184
|
-
nil
|
177
|
+
Puppet.info _("Using cached catalog from environment '%{catalog_env}'") % { catalog_env: result.environment } if result
|
178
|
+
result
|
185
179
|
end
|
186
180
|
|
187
181
|
# Apply supplied catalog and return associated application report
|
@@ -259,14 +253,13 @@ class Puppet::Configurer
|
|
259
253
|
Puppet::GettextConfig.reset_text_domain('agent')
|
260
254
|
Puppet::ModuleTranslations.load_from_vardir(Puppet[:vardir])
|
261
255
|
|
262
|
-
|
263
|
-
if
|
264
|
-
options[:catalog] = catalog
|
256
|
+
cached_catalog = prepare_and_retrieve_catalog_from_cache(options)
|
257
|
+
if cached_catalog
|
265
258
|
@cached_catalog_status = 'explicitly_requested'
|
266
259
|
|
267
|
-
if @environment !=
|
268
|
-
Puppet.notice _("Local environment: '%{local_env}' doesn't match the environment of the cached catalog '%{catalog_env}', switching agent to '%{catalog_env}'.") % { local_env: @environment, catalog_env:
|
269
|
-
@environment =
|
260
|
+
if @environment != cached_catalog.environment && !Puppet[:strict_environment_mode]
|
261
|
+
Puppet.notice _("Local environment: '%{local_env}' doesn't match the environment of the cached catalog '%{catalog_env}', switching agent to '%{catalog_env}'.") % { local_env: @environment, catalog_env: cached_catalog.environment }
|
262
|
+
@environment = cached_catalog.environment
|
270
263
|
end
|
271
264
|
|
272
265
|
report.environment = @environment
|
@@ -287,7 +280,7 @@ class Puppet::Configurer
|
|
287
280
|
configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
|
288
281
|
|
289
282
|
# We only need to find out the environment to run in if we don't already have a catalog
|
290
|
-
unless (options[:catalog] || Puppet[:strict_environment_mode])
|
283
|
+
unless (cached_catalog || options[:catalog] || Puppet[:strict_environment_mode])
|
291
284
|
begin
|
292
285
|
node = nil
|
293
286
|
node_retr_time = thinmark do
|
@@ -342,7 +335,7 @@ class Puppet::Configurer
|
|
342
335
|
query_options[:configured_environment] = configured_environment
|
343
336
|
options[:convert_for_node] = node
|
344
337
|
|
345
|
-
catalog = prepare_and_retrieve_catalog(options, query_options)
|
338
|
+
catalog = prepare_and_retrieve_catalog(cached_catalog, options, query_options)
|
346
339
|
unless catalog
|
347
340
|
return nil
|
348
341
|
end
|
@@ -368,17 +361,38 @@ class Puppet::Configurer
|
|
368
361
|
query_options = get_facts(options)
|
369
362
|
query_options[:configured_environment] = configured_environment
|
370
363
|
|
371
|
-
|
364
|
+
# if we get here, ignore the cached catalog
|
365
|
+
catalog = prepare_and_retrieve_catalog(nil, options, query_options)
|
372
366
|
return nil unless catalog
|
373
367
|
tries += 1
|
374
368
|
end
|
375
369
|
|
370
|
+
# now that environment has converged, convert resource catalog into ral catalog
|
371
|
+
# unless we were given a RAL catalog
|
372
|
+
if !cached_catalog && options[:catalog]
|
373
|
+
ral_catalog = options[:catalog]
|
374
|
+
else
|
375
|
+
# REMIND @duration is the time spent loading the last catalog, and doesn't
|
376
|
+
# account for things like we failed to download and fell back to the cache
|
377
|
+
ral_catalog = convert_catalog(catalog, @duration, options)
|
378
|
+
|
379
|
+
# If not noop, commit the cached resource catalog (not ral catalog). Ideally
|
380
|
+
# we'd just copy the downloaded response body, instead of serializing the
|
381
|
+
# in-memory catalog, but that's hard due to the indirector.
|
382
|
+
indirection = Puppet::Resource::Catalog.indirection
|
383
|
+
if !Puppet[:noop] && indirection.cache?
|
384
|
+
request = indirection.request(:save, nil, catalog, environment: Puppet::Node::Environment.remote(catalog.environment))
|
385
|
+
Puppet.info("Caching catalog for #{request.key}")
|
386
|
+
indirection.cache.save(request)
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
376
390
|
execute_prerun_command or return nil
|
377
391
|
|
378
|
-
options[:report].code_id =
|
379
|
-
options[:report].catalog_uuid =
|
392
|
+
options[:report].code_id = ral_catalog.code_id
|
393
|
+
options[:report].catalog_uuid = ral_catalog.catalog_uuid
|
380
394
|
options[:report].cached_catalog_status = @cached_catalog_status
|
381
|
-
apply_catalog(
|
395
|
+
apply_catalog(ral_catalog, options)
|
382
396
|
true
|
383
397
|
rescue => detail
|
384
398
|
Puppet.log_exception(detail, _("Failed to apply catalog: %{detail}") % { detail: detail })
|
@@ -514,8 +528,8 @@ class Puppet::Configurer
|
|
514
528
|
Puppet[:node_name_value],
|
515
529
|
query_options.merge(
|
516
530
|
:ignore_cache => true,
|
517
|
-
#
|
518
|
-
:ignore_cache_save =>
|
531
|
+
# don't update cache until after environment converges
|
532
|
+
:ignore_cache_save => true,
|
519
533
|
:environment => Puppet::Node::Environment.remote(@environment),
|
520
534
|
:fail_on_404 => true
|
521
535
|
)
|
data/lib/puppet/defaults.rb
CHANGED
@@ -35,7 +35,7 @@ module Puppet
|
|
35
35
|
def self.default_basemodulepath
|
36
36
|
if Puppet::Util::Platform.windows?
|
37
37
|
path = ['$codedir/modules']
|
38
|
-
installdir =
|
38
|
+
installdir = ENV["FACTER_env_windows_installdir"]
|
39
39
|
if installdir
|
40
40
|
path << "#{installdir}/puppet/modules"
|
41
41
|
end
|
@@ -47,7 +47,7 @@ module Puppet
|
|
47
47
|
|
48
48
|
def self.default_vendormoduledir
|
49
49
|
if Puppet::Util::Platform.windows?
|
50
|
-
installdir =
|
50
|
+
installdir = ENV["FACTER_env_windows_installdir"]
|
51
51
|
if installdir
|
52
52
|
"#{installdir}\\puppet\\vendor_modules"
|
53
53
|
else
|
@@ -65,6 +65,25 @@ module Puppet
|
|
65
65
|
|
66
66
|
AS_DURATION = %q{This setting can be a time interval in seconds (30 or 30s), minutes (30m), hours (6h), days (2d), or years (5y).}
|
67
67
|
|
68
|
+
define_settings(:main,
|
69
|
+
:facterng => {
|
70
|
+
:default => false,
|
71
|
+
:type => :boolean,
|
72
|
+
:desc => 'Whether to enable a pre-Facter 4.0 release of Facter (distributed as
|
73
|
+
the "facter-ng" gem). This is not necessary if Facter 3.x or later is installed.
|
74
|
+
This setting is still experimental and has been only included on Windows builds',
|
75
|
+
:hook => proc do |value|
|
76
|
+
if value && Puppet::Util::Platform.windows?
|
77
|
+
begin
|
78
|
+
require 'facter-ng'
|
79
|
+
rescue LoadError
|
80
|
+
raise ArgumentError, 'facter-ng could not be loaded'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
}
|
85
|
+
)
|
86
|
+
|
68
87
|
define_settings(:main,
|
69
88
|
:confdir => {
|
70
89
|
:default => nil,
|
@@ -154,6 +173,19 @@ module Puppet
|
|
154
173
|
end
|
155
174
|
end
|
156
175
|
},
|
176
|
+
:merge_dependency_warnings => {
|
177
|
+
:default => false,
|
178
|
+
:type => :boolean,
|
179
|
+
:desc => "Whether to merge class-level dependency failure warnings.
|
180
|
+
|
181
|
+
When a class has a failed dependency, every resource in the class
|
182
|
+
generates a notice level message about the dependency failure,
|
183
|
+
and a warning level message about skipping the resource.
|
184
|
+
|
185
|
+
If true, all messages caused by a class dependency failure are merged
|
186
|
+
into one message associated with the class.
|
187
|
+
",
|
188
|
+
},
|
157
189
|
:strict => {
|
158
190
|
:default => :warning,
|
159
191
|
:type => :symbolic_enum,
|
@@ -206,12 +238,19 @@ module Puppet
|
|
206
238
|
:trace => {
|
207
239
|
:default => false,
|
208
240
|
:type => :boolean,
|
209
|
-
:desc => "Whether to print stack traces on some errors
|
241
|
+
:desc => "Whether to print stack traces on some errors. Will print
|
242
|
+
internal Ruby stack trace interleaved with Puppet function frames.",
|
210
243
|
:hook => proc do |value|
|
211
244
|
# Enable or disable Facter's trace option too
|
212
245
|
Facter.trace(value) if Facter.respond_to? :trace
|
213
246
|
end
|
214
247
|
},
|
248
|
+
:puppet_trace => {
|
249
|
+
:default => false,
|
250
|
+
:type => :boolean,
|
251
|
+
:desc => "Whether to print the Puppet stack trace on some errors.
|
252
|
+
This is a noop if `trace` is also set.",
|
253
|
+
},
|
215
254
|
:profile => {
|
216
255
|
:default => false,
|
217
256
|
:type => :boolean,
|