puppet 6.26.0-universal-darwin → 6.27.0-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 +1 -1
- data/Gemfile.lock +22 -22
- data/lib/puppet/application/lookup.rb +24 -28
- data/lib/puppet/configurer.rb +6 -2
- data/lib/puppet/defaults.rb +0 -1
- data/lib/puppet/functions/next.rb +18 -1
- data/lib/puppet/functions/tree_each.rb +0 -1
- data/lib/puppet/ssl/ssl_provider.rb +10 -7
- data/lib/puppet/type/exec.rb +1 -1
- data/lib/puppet/util/monkey_patches.rb +0 -2
- data/lib/puppet/util.rb +1 -2
- data/lib/puppet/version.rb +1 -1
- data/man/man5/puppet.conf.5 +2 -2
- 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/integration/application/lookup_spec.rb +64 -59
- data/spec/integration/application/resource_spec.rb +6 -2
- data/spec/integration/http/client_spec.rb +30 -0
- data/spec/unit/configurer_spec.rb +34 -3
- data/spec/unit/util/windows_spec.rb +23 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75ff4ca199a268dc90aa6fe8e32882bf92bf7c35ddd6d0520c9991f1e16e0223
|
4
|
+
data.tar.gz: a41173a9cdee61c24c191c6a719ef33360b613d112a5e1da6e199c1bffe57bc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7012be95fad830749e210d5ddec95e0cc92976ed92c2cf65301dbbcd2acf782773755e88bc83ee0bd5ed912582a88c66592a66a69d9c41de391927752b9fc6c6
|
7
|
+
data.tar.gz: 967d852cbf0e1b8c8f2cc154ac7fa8316a8131044314a758295ca2f75a8cfa6537e4f69a3e99f88847b9df4cccc380e44b7b919c1e161954e484403d4b884504
|
data/CODEOWNERS
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/puppetlabs/packaging
|
3
|
-
revision:
|
3
|
+
revision: 6f7b1ff00ab557f6a47f3f553cc87ec15d718470
|
4
4
|
branch: 1.0.x
|
5
5
|
specs:
|
6
|
-
packaging (0.
|
6
|
+
packaging (0.106.0.27.g6f7b1ff)
|
7
7
|
apt_stage_artifacts
|
8
|
-
artifactory (~>
|
8
|
+
artifactory (~> 3)
|
9
9
|
csv (= 3.1.5)
|
10
10
|
rake (>= 12.3)
|
11
11
|
release-metrics
|
@@ -13,7 +13,7 @@ GIT
|
|
13
13
|
PATH
|
14
14
|
remote: .
|
15
15
|
specs:
|
16
|
-
puppet (6.
|
16
|
+
puppet (6.27.0)
|
17
17
|
CFPropertyList (~> 2.2)
|
18
18
|
concurrent-ruby (~> 1.0)
|
19
19
|
deep_merge (~> 1.0)
|
@@ -33,17 +33,17 @@ GEM
|
|
33
33
|
public_suffix (>= 2.0.2, < 5.0)
|
34
34
|
apt_stage_artifacts (0.10.1)
|
35
35
|
docopt
|
36
|
-
artifactory (
|
36
|
+
artifactory (3.0.15)
|
37
37
|
ast (2.4.2)
|
38
38
|
coderay (1.1.3)
|
39
|
-
concurrent-ruby (1.1.
|
39
|
+
concurrent-ruby (1.1.10)
|
40
40
|
crack (0.4.5)
|
41
41
|
rexml
|
42
42
|
csv (3.1.5)
|
43
43
|
deep_merge (1.2.2)
|
44
44
|
diff-lcs (1.5.0)
|
45
45
|
docopt (0.6.1)
|
46
|
-
facter (4.2.
|
46
|
+
facter (4.2.9)
|
47
47
|
hocon (~> 1.3)
|
48
48
|
thor (>= 1.0.1, < 2.0)
|
49
49
|
fast_gettext (1.1.2)
|
@@ -70,11 +70,11 @@ GEM
|
|
70
70
|
memory_profiler (1.0.0)
|
71
71
|
method_source (1.0.0)
|
72
72
|
minitar (0.9)
|
73
|
-
msgpack (1.
|
73
|
+
msgpack (1.5.0)
|
74
74
|
multi_json (1.15.0)
|
75
75
|
mustache (1.1.1)
|
76
76
|
optimist (3.0.1)
|
77
|
-
parallel (1.
|
77
|
+
parallel (1.22.1)
|
78
78
|
parser (2.7.2.0)
|
79
79
|
ast (~> 2.4.1)
|
80
80
|
powerpack (0.1.3)
|
@@ -84,7 +84,7 @@ GEM
|
|
84
84
|
public_suffix (4.0.6)
|
85
85
|
puppet-resource_api (1.8.14)
|
86
86
|
hocon (>= 1.0)
|
87
|
-
puppetserver-ca (1.11.
|
87
|
+
puppetserver-ca (1.11.7)
|
88
88
|
facter (>= 2.0.1, < 5)
|
89
89
|
racc (1.5.2)
|
90
90
|
rainbow (2.2.2)
|
@@ -100,22 +100,22 @@ GEM
|
|
100
100
|
hpricot (>= 0.8.2)
|
101
101
|
mustache (>= 0.7.0)
|
102
102
|
rdiscount (>= 1.5.8)
|
103
|
-
rspec (3.
|
104
|
-
rspec-core (~> 3.
|
105
|
-
rspec-expectations (~> 3.
|
106
|
-
rspec-mocks (~> 3.
|
107
|
-
rspec-core (3.
|
108
|
-
rspec-support (~> 3.
|
109
|
-
rspec-expectations (3.
|
103
|
+
rspec (3.11.0)
|
104
|
+
rspec-core (~> 3.11.0)
|
105
|
+
rspec-expectations (~> 3.11.0)
|
106
|
+
rspec-mocks (~> 3.11.0)
|
107
|
+
rspec-core (3.11.0)
|
108
|
+
rspec-support (~> 3.11.0)
|
109
|
+
rspec-expectations (3.11.0)
|
110
110
|
diff-lcs (>= 1.2.0, < 2.0)
|
111
|
-
rspec-support (~> 3.
|
111
|
+
rspec-support (~> 3.11.0)
|
112
112
|
rspec-its (1.3.0)
|
113
113
|
rspec-core (>= 3.0.0)
|
114
114
|
rspec-expectations (>= 3.0.0)
|
115
|
-
rspec-mocks (3.
|
115
|
+
rspec-mocks (3.11.1)
|
116
116
|
diff-lcs (>= 1.2.0, < 2.0)
|
117
|
-
rspec-support (~> 3.
|
118
|
-
rspec-support (3.
|
117
|
+
rspec-support (~> 3.11.0)
|
118
|
+
rspec-support (3.11.0)
|
119
119
|
rubocop (0.49.1)
|
120
120
|
parallel (~> 1.10)
|
121
121
|
parser (>= 2.3.3.1, < 3.0)
|
@@ -176,4 +176,4 @@ DEPENDENCIES
|
|
176
176
|
yard
|
177
177
|
|
178
178
|
BUNDLED WITH
|
179
|
-
2.
|
179
|
+
2.3.9
|
@@ -373,38 +373,34 @@ Copyright (c) 2015 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
373
373
|
end
|
374
374
|
|
375
375
|
unless node.is_a?(Puppet::Node) # to allow unit tests to pass a node instance
|
376
|
-
facts = retrieve_node_facts(node, given_facts)
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
Puppet::SSL::Oids.register_puppet_oids
|
394
|
-
trusted = Puppet::Context::TrustedInformation.remote(true, facts.values['certname'] || node, Puppet::SSL::Certificate.from_instance(cert))
|
395
|
-
Puppet.override(trusted_information: trusted) do
|
396
|
-
node = ni.find(node, facts: facts)
|
397
|
-
end
|
398
|
-
rescue
|
399
|
-
Puppet.warning _("CA is not available, the operation will continue without using trusted facts.")
|
376
|
+
facts = retrieve_node_facts(node, given_facts)
|
377
|
+
ni = Puppet::Node.indirection
|
378
|
+
tc = ni.terminus_class
|
379
|
+
if options[:compile] && !Puppet.settings.set_by_cli?('environment')
|
380
|
+
if tc == :plain
|
381
|
+
node = ni.find(node, facts: facts)
|
382
|
+
else
|
383
|
+
begin
|
384
|
+
service = Puppet.runtime[:http]
|
385
|
+
session = service.create_session
|
386
|
+
cert = session.route_to(:ca)
|
387
|
+
|
388
|
+
_, x509 = cert.get_certificate(node)
|
389
|
+
cert = OpenSSL::X509::Certificate.new(x509)
|
390
|
+
Puppet::SSL::Oids.register_puppet_oids
|
391
|
+
trusted = Puppet::Context::TrustedInformation.remote(true, facts.values['certname'] || node, Puppet::SSL::Certificate.from_instance(cert))
|
392
|
+
Puppet.override(trusted_information: trusted) do
|
400
393
|
node = ni.find(node, facts: facts)
|
401
394
|
end
|
395
|
+
rescue
|
396
|
+
Puppet.warning _("CA is not available, the operation will continue without using trusted facts.")
|
397
|
+
node = ni.find(node, facts: facts)
|
402
398
|
end
|
403
|
-
else
|
404
|
-
ni.terminus_class = :plain
|
405
|
-
node = ni.find(node, facts: facts)
|
406
|
-
ni.terminus_class = tc
|
407
399
|
end
|
400
|
+
else
|
401
|
+
ni.terminus_class = :plain
|
402
|
+
node = ni.find(node, facts: facts, environment: Puppet[:environment])
|
403
|
+
ni.terminus_class = tc
|
408
404
|
end
|
409
405
|
else
|
410
406
|
node.add_extra_facts(given_facts) if given_facts
|
data/lib/puppet/configurer.rb
CHANGED
@@ -330,7 +330,7 @@ class Puppet::Configurer
|
|
330
330
|
temp_value = options[:pluginsync]
|
331
331
|
|
332
332
|
# only validate server environment if pluginsync is requested
|
333
|
-
options[:pluginsync] = valid_server_environment? if options[:pluginsync]
|
333
|
+
options[:pluginsync] = valid_server_environment? if options[:pluginsync]
|
334
334
|
|
335
335
|
query_options, facts = get_facts(options) unless query_options
|
336
336
|
options[:pluginsync] = temp_value
|
@@ -443,7 +443,11 @@ class Puppet::Configurer
|
|
443
443
|
true
|
444
444
|
rescue Puppet::HTTP::ResponseError => detail
|
445
445
|
if detail.response.code == 404
|
446
|
-
Puppet
|
446
|
+
if Puppet[:strict_environment_mode]
|
447
|
+
raise Puppet::Error.new(_("Environment '%{environment}' not found on server, aborting run.") % { environment: @environment })
|
448
|
+
else
|
449
|
+
Puppet.notice(_("Environment '%{environment}' not found on server, skipping initial pluginsync.") % { environment: @environment })
|
450
|
+
end
|
447
451
|
else
|
448
452
|
Puppet.log_exception(detail, detail.message)
|
449
453
|
end
|
data/lib/puppet/defaults.rb
CHANGED
@@ -1,8 +1,25 @@
|
|
1
1
|
# Makes iteration continue with the next value, optionally with a given value for this iteration.
|
2
2
|
# If a value is not given it defaults to `undef`
|
3
|
+
#
|
4
|
+
# @example Using the `next()` function
|
3
5
|
#
|
4
|
-
#
|
6
|
+
# ```puppet
|
7
|
+
# $data = ['a','b','c']
|
8
|
+
# $data.each |Integer $index, String $value| {
|
9
|
+
# if $index == 1 {
|
10
|
+
# next()
|
11
|
+
# }
|
12
|
+
# notice ("${index} = ${value}")
|
13
|
+
# }
|
14
|
+
# ```
|
15
|
+
#
|
16
|
+
# Would notice:
|
17
|
+
# ```
|
18
|
+
# Notice: Scope(Class[main]): 0 = a
|
19
|
+
# Notice: Scope(Class[main]): 2 = c
|
20
|
+
# ```
|
5
21
|
#
|
22
|
+
# @since 4.7.0
|
6
23
|
Puppet::Functions.create_function(:next) do
|
7
24
|
dispatch :next_impl do
|
8
25
|
optional_param 'Any', :value
|
@@ -112,7 +112,6 @@
|
|
112
112
|
# * `reverse_each` - get "leaves before root"
|
113
113
|
# * `filter` - prune the tree
|
114
114
|
# * `map` - transform each element
|
115
|
-
# * `reduce` - produce something else
|
116
115
|
#
|
117
116
|
# Note than when chaining, the value passed on is a `Tuple` with `[path, value]`.
|
118
117
|
#
|
@@ -51,8 +51,7 @@ class Puppet::SSL::SSLProvider
|
|
51
51
|
# @raise (see #create_context)
|
52
52
|
# @api private
|
53
53
|
def create_system_context(cacerts:, path: Puppet[:ssl_trust_store])
|
54
|
-
store = create_x509_store(cacerts, [], false)
|
55
|
-
store.set_default_paths
|
54
|
+
store = create_x509_store(cacerts, [], false, include_system_store: true)
|
56
55
|
|
57
56
|
if path
|
58
57
|
stat = Puppet::FileSystem.stat(path)
|
@@ -94,19 +93,20 @@ class Puppet::SSL::SSLProvider
|
|
94
93
|
# @param client_cert [OpenSSL::X509::Certificate] client's cert whose public
|
95
94
|
# key matches the `private_key`
|
96
95
|
# @param revocation [:chain, :leaf, false] revocation mode
|
96
|
+
# @param include_system_store [true, false] Also trust system CA
|
97
97
|
# @return [Puppet::SSL::SSLContext] A context to use to create connections
|
98
98
|
# @raise [Puppet::SSL::CertVerifyError] There was an issue with
|
99
99
|
# one of the certs or CRLs.
|
100
100
|
# @raise [Puppet::SSL::SSLError] There was an issue with the
|
101
101
|
# `private_key`.
|
102
102
|
# @api private
|
103
|
-
def create_context(cacerts:, crls:, private_key:, client_cert:, revocation: Puppet[:certificate_revocation])
|
103
|
+
def create_context(cacerts:, crls:, private_key:, client_cert:, revocation: Puppet[:certificate_revocation], include_system_store: false)
|
104
104
|
raise ArgumentError, _("CA certs are missing") unless cacerts
|
105
105
|
raise ArgumentError, _("CRLs are missing") unless crls
|
106
106
|
raise ArgumentError, _("Private key is missing") unless private_key
|
107
107
|
raise ArgumentError, _("Client cert is missing") unless client_cert
|
108
108
|
|
109
|
-
store = create_x509_store(cacerts, crls, revocation)
|
109
|
+
store = create_x509_store(cacerts, crls, revocation, include_system_store: include_system_store)
|
110
110
|
client_chain = verify_cert_with_store(store, client_cert)
|
111
111
|
|
112
112
|
if !private_key.is_a?(OpenSSL::PKey::RSA) && !private_key.is_a?(OpenSSL::PKey::EC)
|
@@ -134,12 +134,13 @@ class Puppet::SSL::SSLProvider
|
|
134
134
|
# @param password [String, nil] If the private key is encrypted, decrypt
|
135
135
|
# it using the password. If the key is encrypted, but a password is
|
136
136
|
# not specified, then the key cannot be loaded.
|
137
|
+
# @param include_system_store [true, false] Also trust system CA
|
137
138
|
# @return [Puppet::SSL::SSLContext] A context to use to create connections
|
138
139
|
# @raise [Puppet::SSL::CertVerifyError] There was an issue with
|
139
140
|
# one of the certs or CRLs.
|
140
141
|
# @raise [Puppet::Error] There was an issue with one of the required components.
|
141
142
|
# @api private
|
142
|
-
def load_context(certname: Puppet[:certname], revocation: Puppet[:certificate_revocation], password: nil)
|
143
|
+
def load_context(certname: Puppet[:certname], revocation: Puppet[:certificate_revocation], password: nil, include_system_store: false)
|
143
144
|
cert = Puppet::X509::CertProvider.new
|
144
145
|
cacerts = cert.load_cacerts(required: true)
|
145
146
|
crls = case revocation
|
@@ -151,7 +152,7 @@ class Puppet::SSL::SSLProvider
|
|
151
152
|
private_key = cert.load_private_key(certname, required: true, password: password)
|
152
153
|
client_cert = cert.load_client_cert(certname, required: true)
|
153
154
|
|
154
|
-
create_context(cacerts: cacerts, crls: crls, private_key: private_key, client_cert: client_cert, revocation: revocation)
|
155
|
+
create_context(cacerts: cacerts, crls: crls, private_key: private_key, client_cert: client_cert, revocation: revocation, include_system_store: include_system_store)
|
155
156
|
rescue OpenSSL::PKey::PKeyError => e
|
156
157
|
raise Puppet::SSL::SSLError.new(_("Failed to load private key for host '%{name}': %{message}") % { name: certname, message: e.message }, e)
|
157
158
|
end
|
@@ -186,7 +187,7 @@ class Puppet::SSL::SSLProvider
|
|
186
187
|
end
|
187
188
|
end
|
188
189
|
|
189
|
-
def create_x509_store(roots, crls, revocation)
|
190
|
+
def create_x509_store(roots, crls, revocation, include_system_store: false)
|
190
191
|
store = OpenSSL::X509::Store.new
|
191
192
|
store.purpose = OpenSSL::X509::PURPOSE_ANY
|
192
193
|
store.flags = default_flags | revocation_mode(revocation)
|
@@ -194,6 +195,8 @@ class Puppet::SSL::SSLProvider
|
|
194
195
|
roots.each { |cert| store.add_cert(cert) }
|
195
196
|
crls.each { |crl| store.add_crl(crl) }
|
196
197
|
|
198
|
+
store.set_default_paths if include_system_store
|
199
|
+
|
197
200
|
store
|
198
201
|
end
|
199
202
|
|
data/lib/puppet/type/exec.rb
CHANGED
@@ -457,7 +457,7 @@ module Puppet
|
|
457
457
|
|
458
458
|
exec { '/bin/echo root >> /usr/lib/cron/cron.allow':
|
459
459
|
path => '/usr/bin:/usr/sbin:/bin',
|
460
|
-
unless => 'grep root /usr/lib/cron/cron.allow 2>/dev/null',
|
460
|
+
unless => 'grep ^root$ /usr/lib/cron/cron.allow 2>/dev/null',
|
461
461
|
}
|
462
462
|
|
463
463
|
This would add `root` to the cron.allow file (on Solaris) unless
|
data/lib/puppet/util.rb
CHANGED
@@ -7,6 +7,7 @@ require 'uri'
|
|
7
7
|
require 'pathname'
|
8
8
|
require 'ostruct'
|
9
9
|
require 'puppet/util/platform'
|
10
|
+
require 'puppet/util/windows'
|
10
11
|
require 'puppet/util/symbolic_file_mode'
|
11
12
|
require 'puppet/file_system/uniquefile'
|
12
13
|
require 'securerandom'
|
@@ -22,8 +23,6 @@ module Util
|
|
22
23
|
require 'puppet/util/posix'
|
23
24
|
extend Puppet::Util::POSIX
|
24
25
|
|
25
|
-
require 'puppet/util/windows/process' if Puppet::Util::Platform.windows?
|
26
|
-
|
27
26
|
extend Puppet::Util::SymbolicFileMode
|
28
27
|
|
29
28
|
def default_env
|
data/lib/puppet/version.rb
CHANGED
data/man/man5/puppet.conf.5
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPETCONF" "5" "
|
4
|
+
.TH "PUPPETCONF" "5" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
\fBThis page is autogenerated; any changes will get overwritten\fR
|
6
6
|
.
|
7
7
|
.SH "Configuration settings"
|
@@ -945,7 +945,7 @@ The time to wait for data to be read from an HTTP connection\. If nothing is rea
|
|
945
945
|
The HTTP User\-Agent string to send when making network requests\.
|
946
946
|
.
|
947
947
|
.IP "\(bu" 4
|
948
|
-
\fIDefault\fR: \fBPuppet/6\.
|
948
|
+
\fIDefault\fR: \fBPuppet/6\.27\.0 Ruby/2\.7\.5\-p203 (x86_64\-linux)\fR
|
949
949
|
.
|
950
950
|
.IP "" 0
|
951
951
|
.
|
data/man/man8/puppet-agent.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-AGENT" "8" "
|
4
|
+
.TH "PUPPET\-AGENT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-agent\fR \- The puppet agent daemon
|
data/man/man8/puppet-apply.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-APPLY" "8" "
|
4
|
+
.TH "PUPPET\-APPLY" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-apply\fR \- Apply Puppet manifests locally
|
data/man/man8/puppet-catalog.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-CATALOG" "8" "
|
4
|
+
.TH "PUPPET\-CATALOG" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-catalog\fR \- Compile, save, view, and convert catalogs\.
|
data/man/man8/puppet-config.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-CONFIG" "8" "
|
4
|
+
.TH "PUPPET\-CONFIG" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-config\fR \- Interact with Puppet\'s settings\.
|
data/man/man8/puppet-describe.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DESCRIBE" "8" "
|
4
|
+
.TH "PUPPET\-DESCRIBE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-describe\fR \- Display help about resource types
|
data/man/man8/puppet-device.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DEVICE" "8" "
|
4
|
+
.TH "PUPPET\-DEVICE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-device\fR \- Manage remote network devices
|
data/man/man8/puppet-doc.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-DOC" "8" "
|
4
|
+
.TH "PUPPET\-DOC" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-doc\fR \- Generate Puppet references
|
data/man/man8/puppet-epp.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-EPP" "8" "
|
4
|
+
.TH "PUPPET\-EPP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-epp\fR \- Interact directly with the EPP template parser/renderer\.
|
data/man/man8/puppet-facts.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-FACTS" "8" "
|
4
|
+
.TH "PUPPET\-FACTS" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-facts\fR \- Retrieve and store facts\.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-FILEBUCKET" "8" "
|
4
|
+
.TH "PUPPET\-FILEBUCKET" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-filebucket\fR \- Store and retrieve files in a filebucket
|
data/man/man8/puppet-generate.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-GENERATE" "8" "
|
4
|
+
.TH "PUPPET\-GENERATE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-generate\fR \- Generates Puppet code from Ruby definitions\.
|
data/man/man8/puppet-help.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-HELP" "8" "
|
4
|
+
.TH "PUPPET\-HELP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-help\fR \- Display Puppet help\.
|
data/man/man8/puppet-key.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-KEY" "8" "
|
4
|
+
.TH "PUPPET\-KEY" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-key\fR \- Create, save, and remove certificate keys\.
|
data/man/man8/puppet-lookup.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-LOOKUP" "8" "
|
4
|
+
.TH "PUPPET\-LOOKUP" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-lookup\fR \- Interactive Hiera lookup
|
data/man/man8/puppet-man.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-MAN" "8" "
|
4
|
+
.TH "PUPPET\-MAN" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-man\fR \- Display Puppet manual pages\.
|
data/man/man8/puppet-module.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-MODULE" "8" "
|
4
|
+
.TH "PUPPET\-MODULE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-module\fR \- Creates, installs and searches for modules on the Puppet Forge\.
|
data/man/man8/puppet-node.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-NODE" "8" "
|
4
|
+
.TH "PUPPET\-NODE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-node\fR \- View and manage node definitions\.
|
data/man/man8/puppet-parser.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-PARSER" "8" "
|
4
|
+
.TH "PUPPET\-PARSER" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-parser\fR \- Interact directly with the parser\.
|
data/man/man8/puppet-plugin.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-PLUGIN" "8" "
|
4
|
+
.TH "PUPPET\-PLUGIN" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-plugin\fR \- Interact with the Puppet plugin system\.
|
data/man/man8/puppet-report.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-REPORT" "8" "
|
4
|
+
.TH "PUPPET\-REPORT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-report\fR \- Create, display, and submit reports\.
|
data/man/man8/puppet-resource.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-RESOURCE" "8" "
|
4
|
+
.TH "PUPPET\-RESOURCE" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-resource\fR \- The resource abstraction layer shell
|
data/man/man8/puppet-script.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-SCRIPT" "8" "
|
4
|
+
.TH "PUPPET\-SCRIPT" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-script\fR \- Run a puppet manifests as a script without compiling a catalog
|
data/man/man8/puppet-ssl.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-SSL" "8" "
|
4
|
+
.TH "PUPPET\-SSL" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-ssl\fR \- Manage SSL keys and certificates for puppet SSL clients
|
data/man/man8/puppet-status.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET\-STATUS" "8" "
|
4
|
+
.TH "PUPPET\-STATUS" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-status\fR \- View puppet server status\.
|
data/man/man8/puppet.8
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "PUPPET" "8" "
|
4
|
+
.TH "PUPPET" "8" "March 2022" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\fR
|
@@ -25,4 +25,4 @@ Specialized:
|
|
25
25
|
catalog Compile, save, view, and convert catalogs\. describe Display help about resource types device Manage remote network devices doc Generate Puppet references epp Interact directly with the EPP template parser/renderer\. facts Retrieve and store facts\. filebucket Store and retrieve files in a filebucket generate Generates Puppet code from Ruby definitions\. node View and manage node definitions\. parser Interact directly with the parser\. plugin Interact with the Puppet plugin system\. script Run a puppet manifests as a script without compiling a catalog ssl Manage SSL keys and certificates for puppet SSL clients
|
26
26
|
.
|
27
27
|
.P
|
28
|
-
See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v6\.
|
28
|
+
See \'puppet help \fIsubcommand\fR \fIaction\fR\' for help on a specific subcommand action\. See \'puppet help \fIsubcommand\fR\' for help on a specific subcommand\. Puppet v6\.27\.0
|
@@ -7,7 +7,7 @@ describe 'lookup' do
|
|
7
7
|
include PuppetSpec::Files
|
8
8
|
|
9
9
|
context 'with an environment' do
|
10
|
-
let(:fqdn) { Puppet
|
10
|
+
let(:fqdn) { Puppet[:certname] }
|
11
11
|
let(:env_name) { 'spec' }
|
12
12
|
let(:env_dir) { tmpdir('environments') }
|
13
13
|
let(:environment_files) do
|
@@ -43,12 +43,10 @@ describe 'lookup' do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
let(:app) { Puppet::Application[:lookup] }
|
46
|
-
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
|
47
|
-
let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
|
48
46
|
let(:facts) { Puppet::Node::Facts.new("facts", {'my_fact' => 'my_fact_value'}) }
|
49
47
|
let(:cert) { pem_content('oid.pem') }
|
50
48
|
|
51
|
-
let(:node) { Puppet::Node.new('testnode', :facts => facts
|
49
|
+
let(:node) { Puppet::Node.new('testnode', :facts => facts) }
|
52
50
|
let(:populated_env_dir) do
|
53
51
|
dir_contained_in(env_dir, environment_files)
|
54
52
|
env_dir
|
@@ -57,75 +55,72 @@ describe 'lookup' do
|
|
57
55
|
before do
|
58
56
|
stub_request(:get, "https://puppet:8140/puppet-ca/v1/certificate/#{fqdn}").to_return(body: cert)
|
59
57
|
allow(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
|
60
|
-
end
|
61
58
|
|
62
|
-
|
63
|
-
|
64
|
-
allow(app.command_line).to receive(:args).and_return(key)
|
65
|
-
if explain
|
66
|
-
app.options[:explain] = true
|
67
|
-
app.options[:render_as] = :s
|
68
|
-
else
|
69
|
-
app.options[:render_as] = :json
|
70
|
-
end
|
71
|
-
options.each_pair { |k, v| app.options[k] = v }
|
72
|
-
capture = StringIO.new
|
73
|
-
saved_stdout = $stdout
|
74
|
-
begin
|
75
|
-
$stdout = capture
|
76
|
-
expect { app.run_command }.to exit_with(0)
|
77
|
-
ensure
|
78
|
-
$stdout = saved_stdout
|
79
|
-
end
|
80
|
-
out = capture.string.strip
|
81
|
-
if explain
|
82
|
-
out
|
83
|
-
else
|
84
|
-
out.empty? ? nil : JSON.parse("[#{out}]")[0]
|
85
|
-
end
|
86
|
-
end
|
59
|
+
Puppet[:environment] = env_name
|
60
|
+
Puppet[:environmentpath] = populated_env_dir
|
87
61
|
|
88
|
-
|
89
|
-
|
62
|
+
http = Puppet::HTTP::Client.new(ssl_context: Puppet::SSL::SSLProvider.new.create_insecure_context)
|
63
|
+
Puppet.runtime[:http] = http
|
90
64
|
end
|
91
65
|
|
92
|
-
|
93
|
-
|
94
|
-
example.run
|
95
|
-
end
|
66
|
+
def expect_lookup_with_output(exitcode, out)
|
67
|
+
expect { app.run }.to exit_with(exitcode).and output(out).to_stdout
|
96
68
|
end
|
97
69
|
|
98
70
|
it 'finds data in the environment' do
|
99
|
-
|
71
|
+
app.command_line.args << 'a'
|
72
|
+
expect_lookup_with_output(0, /value a/)
|
100
73
|
end
|
101
74
|
|
102
|
-
it
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
75
|
+
it "resolves hiera data using a top-level node parameter" do
|
76
|
+
File.write(File.join(env_dir, env_name, 'hiera.yaml'), <<~YAML)
|
77
|
+
---
|
78
|
+
version: 5
|
79
|
+
hierarchy:
|
80
|
+
- name: "Per Node"
|
81
|
+
data_hash: yaml_data
|
82
|
+
path: "%{my_fact}.yaml"
|
83
|
+
YAML
|
84
|
+
|
85
|
+
File.write(File.join(env_dir, env_name, 'data', "my_fact_value.yaml"), <<~YAML)
|
86
|
+
---
|
87
|
+
a: value from per node data
|
88
|
+
YAML
|
89
|
+
|
90
|
+
app.command_line.args << 'a'
|
91
|
+
expect_lookup_with_output(0, /--- value from per node data/)
|
92
|
+
end
|
107
93
|
|
94
|
+
it 'loads trusted information from the node certificate' do
|
108
95
|
Puppet.settings[:node_terminus] = 'exec'
|
109
|
-
expect_any_instance_of(Puppet::Node::Exec).to receive(:find)
|
110
|
-
|
96
|
+
expect_any_instance_of(Puppet::Node::Exec).to receive(:find) do |args|
|
97
|
+
info = Puppet.lookup(:trusted_information)
|
98
|
+
expect(info.certname).to eq(fqdn)
|
99
|
+
expect(info.extensions).to eq({ "1.3.6.1.4.1.34380.1.2.1.1" => "somevalue" })
|
100
|
+
end.and_return(node)
|
101
|
+
|
102
|
+
app.command_line.args << 'a' << '--compile'
|
103
|
+
expect_lookup_with_output(0, /--- value a/)
|
111
104
|
end
|
112
105
|
|
113
106
|
it 'loads external facts when running without --node' do
|
114
107
|
expect(Puppet::Util).not_to receive(:skip_external_facts)
|
115
108
|
expect(Facter).not_to receive(:load_external)
|
116
|
-
|
109
|
+
|
110
|
+
app.command_line.args << 'a'
|
111
|
+
expect_lookup_with_output(0, /--- value a/)
|
117
112
|
end
|
118
113
|
|
119
114
|
describe 'when using --node' do
|
120
115
|
let(:fqdn) { 'random_node' }
|
121
116
|
|
122
117
|
it 'skips loading of external facts' do
|
123
|
-
app.
|
118
|
+
app.command_line.args << 'a' << '--node' << fqdn
|
124
119
|
|
125
120
|
expect(Puppet::Node::Facts.indirection).to receive(:find).and_return(facts)
|
126
|
-
expect(Facter).to receive(:load_external).
|
127
|
-
expect(Facter).to receive(:load_external).
|
128
|
-
|
121
|
+
expect(Facter).to receive(:load_external).twice.with(false)
|
122
|
+
expect(Facter).to receive(:load_external).twice.with(true)
|
123
|
+
expect_lookup_with_output(0, /--- value a/)
|
129
124
|
end
|
130
125
|
end
|
131
126
|
|
@@ -133,29 +128,32 @@ describe 'lookup' do
|
|
133
128
|
require 'puppet/indirector/node/exec'
|
134
129
|
require 'puppet/indirector/node/plain'
|
135
130
|
|
136
|
-
let(:node) { Puppet::Node.new('testnode', :facts => facts
|
131
|
+
let(:node) { Puppet::Node.new('testnode', :facts => facts) }
|
137
132
|
|
138
133
|
it ':plain without --compile' do
|
139
134
|
Puppet.settings[:node_terminus] = 'exec'
|
140
135
|
expect_any_instance_of(Puppet::Node::Plain).to receive(:find).and_return(node)
|
141
136
|
expect_any_instance_of(Puppet::Node::Exec).not_to receive(:find)
|
142
|
-
|
137
|
+
|
138
|
+
app.command_line.args << 'a'
|
139
|
+
expect_lookup_with_output(0, /--- value a/)
|
143
140
|
end
|
144
141
|
|
145
142
|
it 'configured in Puppet settings with --compile' do
|
146
143
|
Puppet.settings[:node_terminus] = 'exec'
|
147
144
|
expect_any_instance_of(Puppet::Node::Plain).not_to receive(:find)
|
148
145
|
expect_any_instance_of(Puppet::Node::Exec).to receive(:find).and_return(node)
|
149
|
-
|
146
|
+
|
147
|
+
app.command_line.args << 'a' << '--compile'
|
148
|
+
expect_lookup_with_output(0, /--- value a/)
|
150
149
|
end
|
151
150
|
end
|
152
151
|
|
153
152
|
context 'configured with the wrong environment' do
|
154
|
-
let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_env_dir, env_name, 'modules')]) }
|
155
153
|
it 'does not find data in non-existing environment' do
|
156
|
-
Puppet
|
157
|
-
|
158
|
-
|
154
|
+
Puppet[:environment] = 'doesntexist'
|
155
|
+
app.command_line.args << 'a'
|
156
|
+
expect { app.run }.to raise_error(Puppet::Environments::EnvironmentNotFound, /Could not find a directory environment named 'doesntexist'/)
|
159
157
|
end
|
160
158
|
end
|
161
159
|
|
@@ -200,15 +198,22 @@ describe 'lookup' do
|
|
200
198
|
end
|
201
199
|
|
202
200
|
it 'finds data in the module' do
|
203
|
-
|
201
|
+
app.command_line.args << 'mod_a::b'
|
202
|
+
expect_lookup_with_output(0, /value mod_a::b \(from mod_a\)/)
|
204
203
|
end
|
205
204
|
|
206
205
|
it 'finds quoted keys in the module' do
|
207
|
-
|
206
|
+
app.command_line.args << "'mod_a::a.quoted.key'"
|
207
|
+
expect_lookup_with_output(0, /value mod_a::a.quoted.key \(from mod_a\)/)
|
208
208
|
end
|
209
209
|
|
210
210
|
it 'merges hashes from environment and module when merge strategy hash is used' do
|
211
|
-
|
211
|
+
app.command_line.args << 'mod_a::hash_a' << '--merge' << 'hash'
|
212
|
+
expect_lookup_with_output(0, <<~END)
|
213
|
+
---
|
214
|
+
a: value mod_a::hash_a.a (from environment)
|
215
|
+
b: value mod_a::hash_a.b (from mod_a)
|
216
|
+
END
|
212
217
|
end
|
213
218
|
end
|
214
219
|
end
|
@@ -28,14 +28,18 @@ describe "puppet resource", unless: Puppet::Util::Platform.jruby? do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'lists types from the default environment' do
|
31
|
+
begin
|
31
32
|
modulepath = File.join(Puppet[:codedir], 'modules', 'test', 'lib', 'puppet', 'type')
|
32
33
|
FileUtils.mkdir_p(modulepath)
|
33
|
-
File.write(File.join(modulepath, '
|
34
|
+
File.write(File.join(modulepath, 'test_resource_spec.rb'), 'Puppet::Type.newtype(:test_resource_spec)')
|
34
35
|
resource.command_line.args = ['--types']
|
35
36
|
|
36
37
|
expect {
|
37
38
|
resource.run
|
38
|
-
}.to exit_with(0).and output(/
|
39
|
+
}.to exit_with(0).and output(/test_resource_spec/).to_stdout
|
40
|
+
ensure
|
41
|
+
Puppet::Type.rmtype(:test_resource_spec)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -77,6 +77,12 @@ describe Puppet::HTTP::Client, unless: Puppet::Util::Platform.jruby? do
|
|
77
77
|
}
|
78
78
|
}
|
79
79
|
|
80
|
+
let(:systemstore) do
|
81
|
+
res = tmpfile('systemstore')
|
82
|
+
File.write(res, https_server.ca_cert)
|
83
|
+
res
|
84
|
+
end
|
85
|
+
|
80
86
|
it "mutually authenticates the connection" do
|
81
87
|
client_context = ssl_provider.create_context(
|
82
88
|
cacerts: [https_server.ca_cert], crls: [https_server.ca_crl],
|
@@ -88,6 +94,30 @@ describe Puppet::HTTP::Client, unless: Puppet::Util::Platform.jruby? do
|
|
88
94
|
expect(res).to be_success
|
89
95
|
end
|
90
96
|
end
|
97
|
+
|
98
|
+
it "connects when the server's CA is in the system store and the connection is mutually authenticated using create_context" do
|
99
|
+
Puppet::Util.withenv("SSL_CERT_FILE" => systemstore) do
|
100
|
+
client_context = ssl_provider.create_context(
|
101
|
+
cacerts: [https_server.ca_cert], crls: [https_server.ca_crl],
|
102
|
+
client_cert: https_server.server_cert, private_key: https_server.server_key,
|
103
|
+
revocation: false, include_system_store: true
|
104
|
+
)
|
105
|
+
https_server.start_server(ctx_proc: ctx_proc) do |port|
|
106
|
+
res = client.get(URI("https://127.0.0.1:#{port}"), options: {ssl_context: client_context})
|
107
|
+
expect(res).to be_success
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "connects when the server's CA is in the system store and the connection is mutually authenticated uning load_context" do
|
113
|
+
Puppet::Util.withenv("SSL_CERT_FILE" => systemstore) do
|
114
|
+
client_context = ssl_provider.load_context(revocation: false, include_system_store: true)
|
115
|
+
https_server.start_server(ctx_proc: ctx_proc) do |port|
|
116
|
+
res = client.get(URI("https://127.0.0.1:#{port}"), options: {ssl_context: client_context})
|
117
|
+
expect(res).to be_success
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
91
121
|
end
|
92
122
|
|
93
123
|
context "with a system trust store" do
|
@@ -9,9 +9,6 @@ describe Puppet::Configurer do
|
|
9
9
|
Puppet[:report] = true
|
10
10
|
|
11
11
|
catalog.add_resource(resource)
|
12
|
-
allow_any_instance_of(described_class).to(
|
13
|
-
receive(:valid_server_environment?).and_return(true)
|
14
|
-
)
|
15
12
|
|
16
13
|
Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
|
17
14
|
---
|
@@ -78,10 +75,44 @@ describe Puppet::Configurer do
|
|
78
75
|
end
|
79
76
|
end
|
80
77
|
|
78
|
+
describe "when executing a catalog run without stubbing valid_server_environment?" do
|
79
|
+
before do
|
80
|
+
Puppet::Resource::Catalog.indirection.terminus_class = :rest
|
81
|
+
allow(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(catalog)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'skips initial plugin sync if environment is not found and no strict_environment_mode' do
|
85
|
+
body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
|
86
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/plugins?}).to_return(
|
87
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
88
|
+
)
|
89
|
+
|
90
|
+
configurer.run(:pluginsync => true)
|
91
|
+
|
92
|
+
expect(@logs).to include(an_object_having_attributes(level: :notice, message: %r{Environment 'production' not found on server, skipping initial pluginsync.}))
|
93
|
+
expect(@logs).to include(an_object_having_attributes(level: :notice, message: /Applied catalog in .* seconds/))
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'if strict_environment_mode is set and environment is not found, aborts the puppet run' do
|
97
|
+
Puppet[:strict_environment_mode] = true
|
98
|
+
body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
|
99
|
+
stub_request(:get, %r{/puppet/v3/file_metadatas/plugins?}).to_return(
|
100
|
+
status: 404, body: body, headers: {'Content-Type' => 'application/json'}
|
101
|
+
)
|
102
|
+
|
103
|
+
configurer.run(:pluginsync => true)
|
104
|
+
|
105
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Environment 'production' not found on server, aborting run.}))
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
81
109
|
describe "when executing a catalog run" do
|
82
110
|
before do
|
83
111
|
Puppet::Resource::Catalog.indirection.terminus_class = :rest
|
84
112
|
allow(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(catalog)
|
113
|
+
allow_any_instance_of(described_class).to(
|
114
|
+
receive(:valid_server_environment?).and_return(true)
|
115
|
+
)
|
85
116
|
end
|
86
117
|
|
87
118
|
it "downloads plugins when told" do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Puppet::Util::Windows do
|
6
|
+
%w[
|
7
|
+
ADSI
|
8
|
+
ADSI::ADSIObject
|
9
|
+
ADSI::User
|
10
|
+
ADSI::UserProfile
|
11
|
+
ADSI::Group
|
12
|
+
EventLog
|
13
|
+
File
|
14
|
+
Process
|
15
|
+
Registry
|
16
|
+
Service
|
17
|
+
SID
|
18
|
+
].each do |name|
|
19
|
+
it "defines Puppet::Util::Windows::#{name}" do
|
20
|
+
expect(described_class.const_get(name)).to be
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.27.0
|
5
5
|
platform: universal-darwin
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facter
|
@@ -2587,6 +2587,7 @@ files:
|
|
2587
2587
|
- spec/unit/util/windows/service_spec.rb
|
2588
2588
|
- spec/unit/util/windows/sid_spec.rb
|
2589
2589
|
- spec/unit/util/windows/string_spec.rb
|
2590
|
+
- spec/unit/util/windows_spec.rb
|
2590
2591
|
- spec/unit/util/yaml_spec.rb
|
2591
2592
|
- spec/unit/util_spec.rb
|
2592
2593
|
- spec/unit/version_spec.rb
|
@@ -2626,7 +2627,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2626
2627
|
- !ruby/object:Gem::Version
|
2627
2628
|
version: 1.3.1
|
2628
2629
|
requirements: []
|
2629
|
-
rubygems_version: 3.1.
|
2630
|
+
rubygems_version: 3.1.6
|
2630
2631
|
signing_key:
|
2631
2632
|
specification_version: 4
|
2632
2633
|
summary: Puppet, an automated configuration management tool
|
@@ -3875,6 +3876,7 @@ test_files:
|
|
3875
3876
|
- spec/unit/util/windows/service_spec.rb
|
3876
3877
|
- spec/unit/util/windows/sid_spec.rb
|
3877
3878
|
- spec/unit/util/windows/string_spec.rb
|
3879
|
+
- spec/unit/util/windows_spec.rb
|
3878
3880
|
- spec/unit/util/yaml_spec.rb
|
3879
3881
|
- spec/unit/util_spec.rb
|
3880
3882
|
- spec/unit/version_spec.rb
|