puppet 7.27.0-x86-mingw32 → 7.28.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +27 -26
- data/Rakefile +0 -27
- data/examples/enc/regexp_nodes/regexp_nodes.rb +1 -1
- data/lib/puppet/configurer.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +1 -1
- data/lib/puppet/file_system/posix.rb +1 -1
- data/lib/puppet/functions/versioncmp.rb +1 -1
- data/lib/puppet/http/service/compiler.rb +4 -0
- data/lib/puppet/indirector/catalog/compiler.rb +12 -4
- data/lib/puppet/indirector/catalog/rest.rb +8 -0
- data/lib/puppet/interface/action.rb +4 -2
- data/lib/puppet/interface/action_builder.rb +4 -9
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -0
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +2 -2
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/service/init.rb +2 -5
- data/lib/puppet/provider/service/systemd.rb +4 -3
- data/lib/puppet/settings.rb +16 -2
- data/lib/puppet/ssl/ssl_context.rb +10 -15
- data/lib/puppet/type/component.rb +1 -1
- data/lib/puppet/type/exec.rb +15 -7
- data/lib/puppet/type/resources.rb +1 -0
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +2 -1
- data/lib/puppet/util/package/version/pip.rb +2 -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-lookup.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.8 +2 -2
- data/spec/integration/application/agent_spec.rb +13 -0
- data/spec/lib/puppet_spec/puppetserver.rb +1 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +17 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +17 -0
- data/spec/unit/provider/package/appdmg_spec.rb +1 -1
- data/spec/unit/provider/package/dnf_spec.rb +7 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +22 -2
- data/spec/unit/provider/service/systemd_spec.rb +8 -6
- data/spec/unit/type/exec_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b726ee197dafb94e7440ac8058f6cd9062d1523bb067ec728cf84eaae2f624c4
|
4
|
+
data.tar.gz: ed17551e5d149da2665c928587681b6f6477993c3c7b6c99f430620471009d50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e90f0149ce92ec9be37b624a3596855e1cdc022661f59ea6998b0157270a837ec8e2cbc4c6122ec6f85029fbb4a34ff7b8c9efe475a389fd6a43e2a7c314020
|
7
|
+
data.tar.gz: 8c1c009cb4d877d6b74104e89bd4aa040bab6afa063dba78babd6372d472d0b33726a1d8c4dff907b15aa26afe4c511bd6291e3c5e54a6b11098c27d4195103d
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/puppetlabs/packaging
|
3
|
-
revision:
|
3
|
+
revision: 6c91ebc40b07f2041aa39b21becde6a06684e1b9
|
4
4
|
branch: 1.0.x
|
5
5
|
specs:
|
6
6
|
packaging (0)
|
@@ -15,7 +15,7 @@ GIT
|
|
15
15
|
PATH
|
16
16
|
remote: .
|
17
17
|
specs:
|
18
|
-
puppet (7.
|
18
|
+
puppet (7.28.0)
|
19
19
|
CFPropertyList (~> 2.2)
|
20
20
|
concurrent-ruby (~> 1.0)
|
21
21
|
deep_merge (~> 1.0)
|
@@ -31,28 +31,28 @@ GEM
|
|
31
31
|
remote: https://artifactory.delivery.puppetlabs.net/artifactory/api/gems/rubygems/
|
32
32
|
specs:
|
33
33
|
CFPropertyList (2.3.6)
|
34
|
-
addressable (2.8.
|
34
|
+
addressable (2.8.6)
|
35
35
|
public_suffix (>= 2.0.2, < 6.0)
|
36
36
|
apt_stage_artifacts (0.11.0)
|
37
37
|
docopt
|
38
38
|
artifactory (3.0.15)
|
39
39
|
ast (2.4.2)
|
40
|
-
base64 (0.
|
40
|
+
base64 (0.2.0)
|
41
41
|
coderay (1.1.3)
|
42
42
|
concurrent-ruby (1.2.2)
|
43
43
|
crack (0.4.5)
|
44
44
|
rexml
|
45
|
-
csv (3.2.
|
45
|
+
csv (3.2.8)
|
46
46
|
declarative (0.0.20)
|
47
47
|
deep_merge (1.2.2)
|
48
48
|
diff-lcs (1.5.0)
|
49
49
|
digest-crc (0.6.5)
|
50
50
|
rake (>= 12.0.0, < 14.0.0)
|
51
51
|
docopt (0.6.1)
|
52
|
-
facter (4.5.
|
52
|
+
facter (4.5.1)
|
53
53
|
hocon (~> 1.3)
|
54
54
|
thor (>= 1.0.1, < 2.0)
|
55
|
-
faraday (2.
|
55
|
+
faraday (2.8.1)
|
56
56
|
base64
|
57
57
|
faraday-net_http (>= 2.0, < 3.1)
|
58
58
|
ruby2_keywords (>= 0.0.4)
|
@@ -66,7 +66,7 @@ GEM
|
|
66
66
|
fast_gettext (~> 1.1.0)
|
67
67
|
gettext (>= 3.0.2, < 3.3.0)
|
68
68
|
locale
|
69
|
-
google-apis-core (0.11.
|
69
|
+
google-apis-core (0.11.2)
|
70
70
|
addressable (~> 2.5, >= 2.5.1)
|
71
71
|
googleauth (>= 0.16.2, < 2.a)
|
72
72
|
httpclient (>= 2.8.1, < 3.a)
|
@@ -77,29 +77,30 @@ GEM
|
|
77
77
|
webrick
|
78
78
|
google-apis-iamcredentials_v1 (0.17.0)
|
79
79
|
google-apis-core (>= 0.11.0, < 2.a)
|
80
|
-
google-apis-storage_v1 (0.
|
81
|
-
google-apis-core (>= 0.
|
82
|
-
google-cloud-core (1.6.
|
83
|
-
google-cloud-env (
|
80
|
+
google-apis-storage_v1 (0.31.0)
|
81
|
+
google-apis-core (>= 0.11.0, < 2.a)
|
82
|
+
google-cloud-core (1.6.1)
|
83
|
+
google-cloud-env (>= 1.0, < 3.a)
|
84
84
|
google-cloud-errors (~> 1.0)
|
85
|
-
google-cloud-env (1.
|
86
|
-
faraday (>= 0
|
85
|
+
google-cloud-env (2.1.0)
|
86
|
+
faraday (>= 1.0, < 3.a)
|
87
87
|
google-cloud-errors (1.3.1)
|
88
|
-
google-cloud-storage (1.
|
88
|
+
google-cloud-storage (1.47.0)
|
89
89
|
addressable (~> 2.8)
|
90
90
|
digest-crc (~> 0.4)
|
91
91
|
google-apis-iamcredentials_v1 (~> 0.1)
|
92
|
-
google-apis-storage_v1 (~> 0.
|
92
|
+
google-apis-storage_v1 (~> 0.31.0)
|
93
93
|
google-cloud-core (~> 1.6)
|
94
94
|
googleauth (>= 0.16.2, < 2.a)
|
95
95
|
mini_mime (~> 1.0)
|
96
|
-
googleauth (1.
|
97
|
-
faraday (>= 0
|
96
|
+
googleauth (1.9.1)
|
97
|
+
faraday (>= 1.0, < 3.a)
|
98
|
+
google-cloud-env (~> 2.1)
|
98
99
|
jwt (>= 1.4, < 3.0)
|
99
100
|
multi_json (~> 1.11)
|
100
101
|
os (>= 0.9, < 2.0)
|
101
102
|
signet (>= 0.16, < 2.a)
|
102
|
-
hashdiff (1.0
|
103
|
+
hashdiff (1.1.0)
|
103
104
|
hiera (3.12.0)
|
104
105
|
hiera-eyaml (3.4.0)
|
105
106
|
highline
|
@@ -121,24 +122,24 @@ GEM
|
|
121
122
|
mustache (1.1.1)
|
122
123
|
optimist (3.1.0)
|
123
124
|
os (1.1.4)
|
124
|
-
parallel (1.
|
125
|
-
parser (3.
|
125
|
+
parallel (1.24.0)
|
126
|
+
parser (3.3.0.4)
|
126
127
|
ast (~> 2.4.1)
|
127
128
|
racc
|
128
129
|
pry (0.14.2)
|
129
130
|
coderay (~> 1.1)
|
130
131
|
method_source (~> 1.0)
|
131
|
-
public_suffix (5.0.
|
132
|
+
public_suffix (5.0.4)
|
132
133
|
puppet-resource_api (1.9.0)
|
133
134
|
hocon (>= 1.0)
|
134
135
|
puppetserver-ca (2.6.0)
|
135
136
|
facter (>= 2.0.1, < 5)
|
136
137
|
racc (1.5.2)
|
137
138
|
rainbow (3.1.1)
|
138
|
-
rake (13.0
|
139
|
-
rdiscount (2.2.7.
|
139
|
+
rake (13.1.0)
|
140
|
+
rdiscount (2.2.7.3)
|
140
141
|
rdoc (6.3.3)
|
141
|
-
regexp_parser (2.
|
142
|
+
regexp_parser (2.9.0)
|
142
143
|
release-metrics (1.1.0)
|
143
144
|
csv
|
144
145
|
docopt
|
@@ -177,7 +178,7 @@ GEM
|
|
177
178
|
rubocop-ast (>= 1.17.0, < 2.0)
|
178
179
|
ruby-progressbar (~> 1.7)
|
179
180
|
unicode-display_width (>= 1.4.0, < 3.0)
|
180
|
-
rubocop-ast (1.
|
181
|
+
rubocop-ast (1.30.0)
|
181
182
|
parser (>= 3.2.1.0)
|
182
183
|
rubocop-i18n (3.0.0)
|
183
184
|
rubocop (~> 1.0)
|
data/Rakefile
CHANGED
@@ -58,33 +58,6 @@ task(:rubocop) do
|
|
58
58
|
raise "RuboCop detected offenses" if exit_code != 0
|
59
59
|
end
|
60
60
|
|
61
|
-
desc "verify that commit messages match CONTRIBUTING.md requirements"
|
62
|
-
task(:commits) do
|
63
|
-
# This rake task looks at the summary from every commit from this branch not
|
64
|
-
# in the branch targeted for a PR.
|
65
|
-
commit_range = 'HEAD^..HEAD'
|
66
|
-
puts "Checking commits #{commit_range}"
|
67
|
-
%x{git log --no-merges --pretty=%s #{commit_range}}.each_line do |commit_summary|
|
68
|
-
# This regex tests for the currently supported commit summary tokens: maint, doc, packaging, or pup-<number>.
|
69
|
-
# The exception tries to explain it in more full.
|
70
|
-
if /^\((maint|doc|docs|packaging|l10n|pup-\d+)\)|revert/i.match(commit_summary).nil?
|
71
|
-
raise "\n\n\n\tThis commit summary didn't match CONTRIBUTING.md guidelines:\n" \
|
72
|
-
"\n\t\t#{commit_summary}\n" \
|
73
|
-
"\tThe commit summary (i.e. the first line of the commit message) should start with one of:\n" \
|
74
|
-
"\t\t(PUP-<digits>) # this is most common and should be a ticket at tickets.puppet.com\n" \
|
75
|
-
"\t\t(docs)\n" \
|
76
|
-
"\t\t(docs)(DOCUMENT-<digits>)\n" \
|
77
|
-
"\t\t(maint)\n" \
|
78
|
-
"\t\t(packaging)\n" \
|
79
|
-
"\t\t(L10n)\n" \
|
80
|
-
"\n\tThis test for the commit summary is case-insensitive.\n\n\n"
|
81
|
-
else
|
82
|
-
puts "#{commit_summary}"
|
83
|
-
end
|
84
|
-
puts "...passed"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
61
|
desc "verify that changed files are clean of Ruby warnings"
|
89
62
|
task(:warnings) do
|
90
63
|
# This rake task looks at all files modified in this branch.
|
data/lib/puppet/configurer.rb
CHANGED
@@ -194,7 +194,6 @@ class Puppet::Configurer
|
|
194
194
|
path.push(key)
|
195
195
|
parse_fact_name_and_value_limits(value, path)
|
196
196
|
path.pop
|
197
|
-
@number_of_facts += 1
|
198
197
|
end
|
199
198
|
when Array
|
200
199
|
object.each_with_index do |e, idx|
|
@@ -205,6 +204,7 @@ class Puppet::Configurer
|
|
205
204
|
else
|
206
205
|
check_fact_name_length(path.join(), path.size)
|
207
206
|
check_fact_values_length(object)
|
207
|
+
@number_of_facts += 1
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
@@ -150,7 +150,7 @@ class Puppet::FileSystem::FileImpl
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def compare_stream(path, stream)
|
153
|
-
open(path, 0, 'rb') { |this| FileUtils.compare_stream(this, stream) }
|
153
|
+
::File.open(path, 0, 'rb') { |this| FileUtils.compare_stream(this, stream) }
|
154
154
|
end
|
155
155
|
|
156
156
|
def chmod(mode, path)
|
@@ -10,7 +10,7 @@ class Puppet::FileSystem::Posix < Puppet::FileSystem::FileImpl
|
|
10
10
|
# issue this method reimplements the faster 2.0 version that will correctly
|
11
11
|
# compare binary File and StringIO streams.
|
12
12
|
def compare_stream(path, stream)
|
13
|
-
open(path,
|
13
|
+
::File.open(path, 'rb') do |this|
|
14
14
|
bsize = stream_blksize(this, stream)
|
15
15
|
sa = "".force_encoding('ASCII-8BIT')
|
16
16
|
sb = "".force_encoding('ASCII-8BIT')
|
@@ -119,6 +119,10 @@ class Puppet::HTTP::Service::Compiler < Puppet::HTTP::Service
|
|
119
119
|
params: { environment: environment },
|
120
120
|
)
|
121
121
|
|
122
|
+
if (compiler = response['X-Puppet-Compiler-Name'])
|
123
|
+
Puppet.notice("Catalog compiled by #{compiler}")
|
124
|
+
end
|
125
|
+
|
122
126
|
process_response(response)
|
123
127
|
|
124
128
|
[response, deserialize(response, Puppet::Resource::Catalog)]
|
@@ -53,12 +53,20 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
|
|
53
53
|
node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
|
54
54
|
|
55
55
|
if node.environment
|
56
|
-
# If the requested environment doesn't match the server specified environment
|
57
|
-
# as determined by the node terminus, and the request wants us to check for an
|
56
|
+
# If the requested environment name doesn't match the server specified environment
|
57
|
+
# name, as determined by the node terminus, and the request wants us to check for an
|
58
58
|
# environment mismatch, then return an empty catalog with the server-specified
|
59
59
|
# enviroment.
|
60
|
-
if request.remote? && request.options[:check_environment]
|
61
|
-
|
60
|
+
if request.remote? && request.options[:check_environment]
|
61
|
+
# The "environment" may be same while environment objects differ. This
|
62
|
+
# is most likely because the environment cache was flushed between the request
|
63
|
+
# processing and node lookup. Environment overrides `==` but requires the
|
64
|
+
# name and modulepath to be the same. When using versioned environment dirs the
|
65
|
+
# same "environment" can have different modulepaths so simply compare names here.
|
66
|
+
if node.environment.name != request.environment.name
|
67
|
+
Puppet.warning _("Requested environment '%{request_env}' did not match server specified environment '%{server_env}'") % {request_env: request.environment.name, server_env: node.environment.name}
|
68
|
+
return Puppet::Resource::Catalog.new(node.name, node.environment)
|
69
|
+
end
|
62
70
|
end
|
63
71
|
|
64
72
|
node.environment.with_text_domain do
|
@@ -13,6 +13,14 @@ class Puppet::Resource::Catalog::Rest < Puppet::Indirector::REST
|
|
13
13
|
|
14
14
|
session = Puppet.lookup(:http_session)
|
15
15
|
api = session.route_to(:puppet)
|
16
|
+
|
17
|
+
ip_address = begin
|
18
|
+
" (#{Resolv.getaddress(api.url.host)})"
|
19
|
+
rescue Resolv::ResolvError
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
Puppet.notice("Requesting catalog from #{api.url.host}:#{api.url.port}#{ip_address}")
|
23
|
+
|
16
24
|
_, catalog = api.post_catalog(
|
17
25
|
request.key,
|
18
26
|
facts: request.options[:facts_for_catalog],
|
@@ -264,12 +264,14 @@ def #{@name}(#{decl.join(", ")})
|
|
264
264
|
end
|
265
265
|
WRAPPER
|
266
266
|
|
267
|
+
# It should be possible to rewrite this code to use `define_method`
|
268
|
+
# instead of `class/instance_eval` since Ruby 1.8 is long dead.
|
267
269
|
if @face.is_a?(Class)
|
268
|
-
@face.class_eval do eval wrapper, nil, file, line end
|
270
|
+
@face.class_eval do eval wrapper, nil, file, line end # rubocop:disable Security/Eval
|
269
271
|
@face.send(:define_method, internal_name, &block)
|
270
272
|
@when_invoked = @face.instance_method(name)
|
271
273
|
else
|
272
|
-
@face.instance_eval do eval wrapper, nil, file, line end
|
274
|
+
@face.instance_eval do eval wrapper, nil, file, line end # rubocop:disable Security/Eval
|
273
275
|
@face.meta_def(internal_name, &block)
|
274
276
|
@when_invoked = @face.method(name).unbind
|
275
277
|
end
|
@@ -4,6 +4,8 @@
|
|
4
4
|
# within the context of a new instance of this class.
|
5
5
|
# @api public
|
6
6
|
class Puppet::Interface::ActionBuilder
|
7
|
+
extend Forwardable
|
8
|
+
|
7
9
|
# The action under construction
|
8
10
|
# @return [Puppet::Interface::Action]
|
9
11
|
# @api private
|
@@ -141,15 +143,8 @@ class Puppet::Interface::ActionBuilder
|
|
141
143
|
property = setter.to_s.chomp('=')
|
142
144
|
|
143
145
|
unless method_defined? property
|
144
|
-
#
|
145
|
-
|
146
|
-
# Ruby versions if you pass the wrong number of arguments, but carries
|
147
|
-
# on, which is totally not what we want. --daniel 2011-04-18
|
148
|
-
eval <<-METHOD
|
149
|
-
def #{property}(value)
|
150
|
-
@action.#{property} = value
|
151
|
-
end
|
152
|
-
METHOD
|
146
|
+
# ActionBuilder#<property> delegates to Action#<setter>
|
147
|
+
def_delegator :@action, setter, property
|
153
148
|
end
|
154
149
|
end
|
155
150
|
|
@@ -19,7 +19,7 @@ class Puppet::Pops::Loader::RubyDataTypeInstantiator
|
|
19
19
|
# make the private loader available in a binding to allow it to be passed on
|
20
20
|
loader_for_type = loader.private_loader
|
21
21
|
here = get_binding(loader_for_type)
|
22
|
-
created = eval(ruby_code_string, here, source_ref, 1)
|
22
|
+
created = eval(ruby_code_string, here, source_ref, 1) # rubocop:disable Security/Eval
|
23
23
|
unless created.is_a?(Puppet::Pops::Types::PAnyType)
|
24
24
|
raise ArgumentError, _("The code loaded from %{source_ref} did not produce a data type when evaluated. Got '%{klass}'") % { source_ref: source_ref, klass: created.class }
|
25
25
|
end
|
@@ -19,7 +19,7 @@ class Puppet::Pops::Loader::RubyFunctionInstantiator
|
|
19
19
|
# make the private loader available in a binding to allow it to be passed on
|
20
20
|
loader_for_function = loader.private_loader
|
21
21
|
here = get_binding(loader_for_function)
|
22
|
-
created = eval(ruby_code_string, here, source_ref, 1)
|
22
|
+
created = eval(ruby_code_string, here, source_ref, 1) # rubocop:disable Security/Eval
|
23
23
|
unless created.is_a?(Class)
|
24
24
|
raise ArgumentError, _("The code loaded from %{source_ref} did not produce a Function class when evaluated. Got '%{klass}'") % { source_ref: source_ref, klass: created.class }
|
25
25
|
end
|
@@ -37,7 +37,7 @@ class Puppet::Pops::Loader::RubyLegacyFunctionInstantiator
|
|
37
37
|
# This will do the 3x loading and define the "function_<name>" and "real_function_<name>" methods
|
38
38
|
# in the anonymous module used to hold function definitions.
|
39
39
|
#
|
40
|
-
func_info = eval(ruby_code_string, here, source_ref, 1)
|
40
|
+
func_info = eval(ruby_code_string, here, source_ref, 1) # rubocop:disable Security/Eval
|
41
41
|
|
42
42
|
# Validate what was loaded
|
43
43
|
unless func_info.is_a?(Hash)
|
@@ -66,7 +66,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
open(cached_source) do |dmg|
|
69
|
+
File.open(cached_source) do |dmg|
|
70
70
|
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
|
71
71
|
ptable = Puppet::Util::Plist::parse_plist(xml_str)
|
72
72
|
# JJM Filter out all mount-paths into a single array, discard the rest.
|
@@ -32,6 +32,7 @@ Puppet::Type.type(:package).provide :dnf, :parent => :yum do
|
|
32
32
|
notdefaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => (19..21).to_a
|
33
33
|
defaultfor :osfamily => :redhat
|
34
34
|
notdefaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
|
35
|
+
defaultfor :operatingsystem => :amazon, :operatingsystemmajrelease => ["2023"]
|
35
36
|
|
36
37
|
def self.update_command
|
37
38
|
# In DNF, update is deprecated for upgrade
|
@@ -93,7 +93,7 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
93
93
|
# module has no default profile and no profile was requested, so just enable the stream
|
94
94
|
# DNF versions prior to 4.2.8 do not need this workaround
|
95
95
|
# see https://bugzilla.redhat.com/show_bug.cgi?id=1669527
|
96
|
-
if @resource[:flavor] == nil && e.message =~ /^(?:missing|broken) groups or modules: #{Regexp.quote(
|
96
|
+
if @resource[:flavor] == nil && e.message =~ /^(?:missing|broken) groups or modules: #{Regexp.quote(args)}$/
|
97
97
|
enable(args)
|
98
98
|
else
|
99
99
|
raise
|
@@ -43,9 +43,9 @@ class Puppet::Provider::Package::Windows
|
|
43
43
|
[KEY64, KEY32].each do |mode|
|
44
44
|
mode |= KEY_READ
|
45
45
|
begin
|
46
|
-
open(hive, 'Software\Microsoft\Windows\CurrentVersion\Uninstall', mode) do |uninstall|
|
46
|
+
self.open(hive, 'Software\Microsoft\Windows\CurrentVersion\Uninstall', mode) do |uninstall|
|
47
47
|
each_key(uninstall) do |name, wtime|
|
48
|
-
open(hive, "#{uninstall.keyname}\\#{name}", mode) do |key|
|
48
|
+
self.open(hive, "#{uninstall.keyname}\\#{name}", mode) do |key|
|
49
49
|
yield key, values_by_name(key, reg_value_names_to_load)
|
50
50
|
end
|
51
51
|
end
|
@@ -255,7 +255,7 @@ defaultfor :osfamily => :redhat, :operatingsystemmajrelease => (4..7).to_a
|
|
255
255
|
operation = update_command
|
256
256
|
self.debug "Ensuring latest, so using #{operation}"
|
257
257
|
else
|
258
|
-
self.debug "Ensuring latest, but package is absent, so using
|
258
|
+
self.debug "Ensuring latest, but package is absent, so using install"
|
259
259
|
operation = :install
|
260
260
|
end
|
261
261
|
should = nil
|
@@ -19,12 +19,9 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Debian and Ubuntu should use the Debian provider.
|
22
|
+
confine :false => ['Debian', 'Ubuntu'].include?(Puppet.runtime[:facter].value('operatingsystem'))
|
22
23
|
# RedHat systems should use the RedHat provider.
|
23
|
-
confine :
|
24
|
-
os = Puppet.runtime[:facter].value(:operatingsystem).downcase
|
25
|
-
family = Puppet.runtime[:facter].value(:osfamily).downcase
|
26
|
-
!(os == 'debian' || os == 'ubuntu' || family == 'redhat')
|
27
|
-
end
|
24
|
+
confine :false => Puppet.runtime[:facter].value('osfamily') == 'RedHat'
|
28
25
|
|
29
26
|
# We can't confine this here, because the init path can be overridden.
|
30
27
|
#confine :exists => defpath
|
@@ -18,7 +18,8 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
18
18
|
defaultfor :osfamily => :redhat, :operatingsystem => :fedora
|
19
19
|
defaultfor :osfamily => :suse
|
20
20
|
defaultfor :osfamily => :coreos
|
21
|
-
defaultfor :
|
21
|
+
defaultfor :osfamily => :gentoo
|
22
|
+
defaultfor :operatingsystem => :amazon, :operatingsystemmajrelease => ["2", "2023"]
|
22
23
|
defaultfor :operatingsystem => :debian
|
23
24
|
notdefaultfor :operatingsystem => :debian, :operatingsystemmajrelease => ["5", "6", "7"] # These are using the "debian" method
|
24
25
|
defaultfor :operatingsystem => :LinuxMint
|
@@ -39,8 +40,8 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
39
40
|
return []
|
40
41
|
end
|
41
42
|
|
42
|
-
# Static services cannot be enabled or disabled manually. Indirect services
|
43
|
-
# should not be enabled or disabled due to limitations in systemd (see
|
43
|
+
# Static services cannot be enabled or disabled manually. Indirect services
|
44
|
+
# should not be enabled or disabled due to limitations in systemd (see
|
44
45
|
# https://github.com/systemd/systemd/issues/6681).
|
45
46
|
def enabled_insync?(current)
|
46
47
|
case cached_enabled?[:output]
|
data/lib/puppet/settings.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative '../puppet/util/command_line/puppet_option_parser'
|
|
5
5
|
require 'forwardable'
|
6
6
|
require 'fileutils'
|
7
7
|
require 'concurrent'
|
8
|
+
require_relative 'concurrent/lock'
|
8
9
|
|
9
10
|
# The class for handling configuration files.
|
10
11
|
class Puppet::Settings
|
@@ -146,8 +147,21 @@ class Puppet::Settings
|
|
146
147
|
@configuration_file = nil
|
147
148
|
|
148
149
|
# And keep a per-environment cache
|
149
|
-
|
150
|
-
@
|
150
|
+
# We can't use Concurrent::Map because we want to preserve insertion order
|
151
|
+
@cache_lock = Puppet::Concurrent::Lock.new
|
152
|
+
@cache = Concurrent::Hash.new do |hash, key|
|
153
|
+
@cache_lock.synchronize do
|
154
|
+
break hash[key] if hash.key?(key)
|
155
|
+
hash[key] = Concurrent::Hash.new
|
156
|
+
end
|
157
|
+
end
|
158
|
+
@values_lock = Puppet::Concurrent::Lock.new
|
159
|
+
@values = Concurrent::Hash.new do |hash, key|
|
160
|
+
@values_lock.synchronize do
|
161
|
+
break hash[key] if hash.key?(key)
|
162
|
+
hash[key] = Concurrent::Hash.new
|
163
|
+
end
|
164
|
+
end
|
151
165
|
|
152
166
|
# The list of sections we've used.
|
153
167
|
@used = []
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative '../../puppet/ssl'
|
2
2
|
|
3
3
|
module Puppet::SSL
|
4
|
+
# The `keyword_init: true` option is no longer needed in Ruby >= 3.2
|
4
5
|
SSLContext = Struct.new(
|
5
6
|
:store,
|
6
7
|
:cacerts,
|
@@ -9,22 +10,16 @@ module Puppet::SSL
|
|
9
10
|
:client_cert,
|
10
11
|
:client_chain,
|
11
12
|
:revocation,
|
12
|
-
:verify_peer
|
13
|
+
:verify_peer,
|
14
|
+
keyword_init: true
|
13
15
|
) do
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
# This is an idiom to initialize a Struct from keyword
|
23
|
-
# arguments. Ruby 2.5 introduced `keyword_init: true` for
|
24
|
-
# that purpose, but we need to support older versions.
|
25
|
-
def initialize(kwargs = {})
|
26
|
-
super({})
|
27
|
-
DEFAULTS.merge(**kwargs).each { |k,v| self[k] = v }
|
16
|
+
def initialize(*)
|
17
|
+
super
|
18
|
+
self[:cacerts] ||= []
|
19
|
+
self[:crls] ||= []
|
20
|
+
self[:client_chain] ||= []
|
21
|
+
self[:revocation] = true if self[:revocation].nil?
|
22
|
+
self[:verify_peer] = true if self[:verify_peer].nil?
|
28
23
|
end
|
29
24
|
end
|
30
25
|
end
|
data/lib/puppet/type/exec.rb
CHANGED
@@ -592,13 +592,17 @@ module Puppet
|
|
592
592
|
cmd = self[:command]
|
593
593
|
cmd = cmd[0] if cmd.is_a? Array
|
594
594
|
|
595
|
-
cmd.
|
596
|
-
|
597
|
-
|
595
|
+
if cmd.is_a?(Puppet::Pops::Evaluator::DeferredValue)
|
596
|
+
self.debug("The 'command' parameter is deferred and cannot be autorequired")
|
597
|
+
else
|
598
|
+
cmd.scan(file_regex) { |str|
|
599
|
+
reqs << str
|
600
|
+
}
|
598
601
|
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
+
cmd.scan(/^"([^"]+)"/) { |str|
|
603
|
+
reqs << str
|
604
|
+
}
|
605
|
+
end
|
602
606
|
|
603
607
|
[:onlyif, :unless].each { |param|
|
604
608
|
tmp = self[param]
|
@@ -613,7 +617,11 @@ module Puppet
|
|
613
617
|
# unqualified files, but, well, that's a bit more annoying
|
614
618
|
# to do.
|
615
619
|
line = line[0] if line.is_a? Array
|
616
|
-
|
620
|
+
if line.is_a?(Puppet::Pops::Evaluator::DeferredValue)
|
621
|
+
self.debug("The '#{param}' parameter is deferred and cannot be autorequired")
|
622
|
+
else
|
623
|
+
reqs += line.scan(file_regex)
|
624
|
+
end
|
617
625
|
end
|
618
626
|
}
|
619
627
|
|
@@ -649,7 +649,7 @@ private
|
|
649
649
|
else
|
650
650
|
require 'open-uri'
|
651
651
|
begin
|
652
|
-
open
|
652
|
+
URI.parse(param).open
|
653
653
|
rescue SystemCallError => e
|
654
654
|
raise CommandlineError, _("file or url for option '%{arg}' cannot be opened: %{value0}") % { arg: arg, value0: e.message }, e.backtrace
|
655
655
|
end
|
@@ -77,7 +77,8 @@ module Puppet::Util::Execution
|
|
77
77
|
# a predictable output
|
78
78
|
english_env = ENV.to_hash.merge( {'LANG' => 'C', 'LC_ALL' => 'C'} )
|
79
79
|
output = Puppet::Util.withenv(english_env) do
|
80
|
-
open
|
80
|
+
# We are intentionally using 'pipe' with open to launch a process
|
81
|
+
open("| #{command_str} 2>&1") do |pipe| # rubocop:disable Security/Open
|
81
82
|
yield pipe
|
82
83
|
end
|
83
84
|
end
|
@@ -149,10 +149,10 @@ module Puppet::Util::Package::Version
|
|
149
149
|
return compare(element, other.at(index)) if element != other.at(index)
|
150
150
|
end
|
151
151
|
elsif (this.is_a? Array) && !(other.is_a? Array)
|
152
|
-
raise Puppet::Error,
|
152
|
+
raise Puppet::Error, "Cannot compare #{this} (Array) with #{other} (#{other.class}). Only ±Float::INFINITY accepted." unless other.abs == Float::INFINITY
|
153
153
|
return other == -Float::INFINITY ? 1 : -1
|
154
154
|
elsif !(this.is_a? Array) && (other.is_a? Array)
|
155
|
-
raise Puppet::Error,
|
155
|
+
raise Puppet::Error, "Cannot compare #{this} (#{this.class}) with #{other} (Array). Only ±Float::INFINITY accepted." unless this.abs == Float::INFINITY
|
156
156
|
return this == -Float::INFINITY ? -1 : 1
|
157
157
|
end
|
158
158
|
this <=> other
|
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" "December 2023" "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/7\.
|
948
|
+
\fIDefault\fR: \fBPuppet/7\.28\.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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-help\fR \- Display Puppet help\.
|
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" "December 2023" "Puppet, Inc." "Puppet manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBpuppet\-lookup\fR \- Interactive Hiera lookup
|
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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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" "December 2023" "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.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" "December 2023" "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 v7\.
|
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 v7\.28\.0
|
@@ -15,6 +15,19 @@ describe "puppet agent", unless: Puppet::Util::Platform.jruby? do
|
|
15
15
|
let(:node) { Puppet::Node.new(Puppet[:certname], environment: 'production')}
|
16
16
|
let(:formatter) { Puppet::Network::FormatHandler.format(:rich_data_json) }
|
17
17
|
|
18
|
+
context 'server identification' do
|
19
|
+
it 'emits a notice if the server sends the X-Puppet-Compiler-Name header' do
|
20
|
+
server.start_server do |port|
|
21
|
+
Puppet[:serverport] = port
|
22
|
+
expect {
|
23
|
+
agent.command_line.args << '--test'
|
24
|
+
agent.run
|
25
|
+
}.to exit_with(0)
|
26
|
+
.and output(%r{Notice: Catalog compiled by test-compiler-hostname}).to_stdout
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
18
31
|
context 'server_list' do
|
19
32
|
it "uses the first server in the list" do
|
20
33
|
Puppet[:server_list] = '127.0.0.1'
|
@@ -19,6 +19,7 @@ class PuppetSpec::Puppetserver
|
|
19
19
|
class CatalogServlet < WEBrick::HTTPServlet::AbstractServlet
|
20
20
|
def do_POST request, response
|
21
21
|
response['Content-Type'] = 'application/json'
|
22
|
+
response['X-Puppet-Compiler-Name'] = 'test-compiler-hostname'
|
22
23
|
catalog = Puppet::Resource::Catalog.new(Puppet[:certname], 'production')
|
23
24
|
response.body = catalog.render(:json)
|
24
25
|
end
|
@@ -271,6 +271,23 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
271
271
|
expect(catalog).to have_resource('Stage[main]')
|
272
272
|
end
|
273
273
|
|
274
|
+
# versioned environment directories can cause this
|
275
|
+
it 'allows environments with the same name but mismatched modulepaths' do
|
276
|
+
envs = Puppet.lookup(:environments)
|
277
|
+
env_server = envs.get!(:env_server)
|
278
|
+
v1_env = env_server.override_with({ modulepath: ['/code-v1/env-v1/'] })
|
279
|
+
v2_env = env_server.override_with({ modulepath: ['/code-v2/env-v2/'] })
|
280
|
+
|
281
|
+
@request.options[:check_environment] = "true"
|
282
|
+
@request.environment = v1_env
|
283
|
+
node.environment = v2_env
|
284
|
+
|
285
|
+
catalog = compiler.find(@request)
|
286
|
+
|
287
|
+
expect(catalog.environment).to eq('env_server')
|
288
|
+
expect(catalog).to have_resource('Stage[main]')
|
289
|
+
end
|
290
|
+
|
274
291
|
it 'returns an empty catalog if asked to check the environment and they are mismatched' do
|
275
292
|
@request.options[:check_environment] = "true"
|
276
293
|
catalog = compiler.find(@request)
|
@@ -25,6 +25,23 @@ describe Puppet::Resource::Catalog::Rest do
|
|
25
25
|
expect(described_class.indirection.find(certname)).to be_a(Puppet::Resource::Catalog)
|
26
26
|
end
|
27
27
|
|
28
|
+
it 'logs a notice when requesting a catalog' do
|
29
|
+
expect(Puppet).to receive(:notice).with("Requesting catalog from compiler.example.com:8140")
|
30
|
+
|
31
|
+
stub_request(:post, uri).to_return(**catalog_response(catalog))
|
32
|
+
|
33
|
+
described_class.indirection.find(certname)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'logs a notice when the IP address is resolvable when requesting a catalog' do
|
37
|
+
allow(Resolv).to receive_message_chain(:getaddress).and_return('192.0.2.0')
|
38
|
+
expect(Puppet).to receive(:notice).with("Requesting catalog from compiler.example.com:8140 (192.0.2.0)")
|
39
|
+
|
40
|
+
stub_request(:post, uri).to_return(**catalog_response(catalog))
|
41
|
+
|
42
|
+
described_class.indirection.find(certname)
|
43
|
+
end
|
44
|
+
|
28
45
|
it "serializes the environment" do
|
29
46
|
stub_request(:post, uri)
|
30
47
|
.with(query: hash_including('environment' => 'outerspace'))
|
@@ -11,7 +11,7 @@ describe Puppet::Type.type(:package).provider(:appdmg) do
|
|
11
11
|
before do
|
12
12
|
fh = double('filehandle', path: '/tmp/foo')
|
13
13
|
resource[:source] = "foo.dmg"
|
14
|
-
allow(
|
14
|
+
allow(File).to receive(:open).and_yield(fh)
|
15
15
|
allow(Dir).to receive(:mktmpdir).and_return("/tmp/testtmp123")
|
16
16
|
allow(FileUtils).to receive(:remove_entry_secure)
|
17
17
|
end
|
@@ -42,6 +42,13 @@ describe Puppet::Type.type(:package).provider(:dnf) do
|
|
42
42
|
allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return("8")
|
43
43
|
expect(described_class).to be_default
|
44
44
|
end
|
45
|
+
|
46
|
+
it "should be the default provider on Amazon Linux 2023" do
|
47
|
+
allow(Facter).to receive(:value).with(:osfamily).and_return(:redhat)
|
48
|
+
allow(Facter).to receive(:value).with(:operatingsystem).and_return(:amazon)
|
49
|
+
allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return("2023")
|
50
|
+
expect(described_class).to be_default
|
51
|
+
end
|
45
52
|
end
|
46
53
|
|
47
54
|
describe 'provider features' do
|
@@ -123,7 +123,7 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do
|
|
123
123
|
provider.install
|
124
124
|
end
|
125
125
|
|
126
|
-
it "should just enable the module if it has no default profile(missing groups or modules)" do
|
126
|
+
it "should just enable the module if it has no default profile (missing groups or modules)" do
|
127
127
|
dnf_exception = Puppet::ExecutionFailure.new("Error: Problems in request:\nmissing groups or modules: #{resource[:name]}")
|
128
128
|
allow(provider).to receive(:execute).with(array_including('install')).and_raise(dnf_exception)
|
129
129
|
resource[:ensure] = :present
|
@@ -132,7 +132,17 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do
|
|
132
132
|
provider.install
|
133
133
|
end
|
134
134
|
|
135
|
-
it "should just enable the module if it has no default profile(
|
135
|
+
it "should just enable the module with the right stream if it has no default profile (missing groups or modules)" do
|
136
|
+
stream = '12.3'
|
137
|
+
dnf_exception = Puppet::ExecutionFailure.new("Error: Problems in request:\nmissing groups or modules: #{resource[:name]}:#{stream}")
|
138
|
+
allow(provider).to receive(:execute).with(array_including('install')).and_raise(dnf_exception)
|
139
|
+
resource[:ensure] = stream
|
140
|
+
expect(provider).to receive(:execute).with(array_including('install')).ordered
|
141
|
+
expect(provider).to receive(:execute).with(array_including('enable')).ordered
|
142
|
+
provider.install
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should just enable the module if it has no default profile (broken groups or modules)" do
|
136
146
|
dnf_exception = Puppet::ExecutionFailure.new("Error: Problems in request:\nbroken groups or modules: #{resource[:name]}")
|
137
147
|
allow(provider).to receive(:execute).with(array_including('install')).and_raise(dnf_exception)
|
138
148
|
resource[:ensure] = :present
|
@@ -141,6 +151,16 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do
|
|
141
151
|
provider.install
|
142
152
|
end
|
143
153
|
|
154
|
+
it "should just enable the module with the right stream if it has no default profile (broken groups or modules)" do
|
155
|
+
stream = '12.3'
|
156
|
+
dnf_exception = Puppet::ExecutionFailure.new("Error: Problems in request:\nbroken groups or modules: #{resource[:name]}:#{stream}")
|
157
|
+
allow(provider).to receive(:execute).with(array_including('install')).and_raise(dnf_exception)
|
158
|
+
resource[:ensure] = stream
|
159
|
+
expect(provider).to receive(:execute).with(array_including('install')).ordered
|
160
|
+
expect(provider).to receive(:execute).with(array_including('enable')).ordered
|
161
|
+
provider.install
|
162
|
+
end
|
163
|
+
|
144
164
|
it "should just enable the module if enable_only = true" do
|
145
165
|
resource[:ensure] = :present
|
146
166
|
resource[:enable_only] = true
|
@@ -18,7 +18,7 @@ describe 'Puppet::Type::Service::Provider::Systemd',
|
|
18
18
|
Puppet::Util::Execution::ProcessOutput.new('', 0)
|
19
19
|
end
|
20
20
|
|
21
|
-
osfamilies = [ 'archlinux', 'coreos' ]
|
21
|
+
osfamilies = [ 'archlinux', 'coreos', 'gentoo' ]
|
22
22
|
|
23
23
|
osfamilies.each do |osfamily|
|
24
24
|
it "should be the default provider on #{osfamily}" do
|
@@ -56,11 +56,13 @@ describe 'Puppet::Type::Service::Provider::Systemd',
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
[ 2, 2023 ].each do |ver|
|
60
|
+
it "should be the default provider on Amazon Linux #{ver}" do
|
61
|
+
allow(Facter).to receive(:value).with(:osfamily).and_return(:redhat)
|
62
|
+
allow(Facter).to receive(:value).with(:operatingsystem).and_return(:amazon)
|
63
|
+
allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return("#{ver}")
|
64
|
+
expect(provider_class).to be_default
|
65
|
+
end
|
64
66
|
end
|
65
67
|
|
66
68
|
it "should not be the default provider on Amazon Linux 2017.09" do
|
data/spec/unit/type/exec_spec.rb
CHANGED
@@ -252,6 +252,19 @@ RSpec.describe Puppet::Type.type(:exec) do
|
|
252
252
|
expect(dependencies.collect(&:to_s)).to eq([Puppet::Relationship.new(tmp, execer).to_s])
|
253
253
|
end
|
254
254
|
|
255
|
+
it "skips autorequire for deferred commands" do
|
256
|
+
foo = make_absolute('/bin/foo')
|
257
|
+
catalog = Puppet::Resource::Catalog.new
|
258
|
+
tmp = Puppet::Type.type(:file).new(:name => foo)
|
259
|
+
execer = Puppet::Type.type(:exec).new(:name => 'test array', :command => Puppet::Pops::Evaluator::DeferredValue.new(nil))
|
260
|
+
|
261
|
+
catalog.add_resource tmp
|
262
|
+
catalog.add_resource execer
|
263
|
+
dependencies = execer.autorequire(catalog)
|
264
|
+
|
265
|
+
expect(dependencies.collect(&:to_s)).to eq([])
|
266
|
+
end
|
267
|
+
|
255
268
|
describe "when handling the path parameter" do
|
256
269
|
expect = %w{one two three four}
|
257
270
|
{ "an array" => expect,
|
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: 7.
|
4
|
+
version: 7.28.0
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facter
|