chef 18.0.185 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/chef/chef_fs/file_system.rb +21 -7
- data/lib/chef/property.rb +8 -3
- data/lib/chef/provider/launchd.rb +1 -0
- data/lib/chef/provider/package/yum/yum_helper.py +5 -17
- data/lib/chef/provider/yum_repository.rb +13 -1
- data/lib/chef/resource/launchd.rb +3 -0
- data/lib/chef/resource/macos_userdefaults.rb +3 -3
- data/lib/chef/resource/rhsm_register.rb +2 -1
- data/lib/chef/resource/yum_repository.rb +4 -0
- data/lib/chef/version.rb +1 -1
- data/spec/data/chef_guid +1 -0
- data/spec/data/nodes/mcwfhpowell.json +3 -0
- data/spec/functional/assets/yumrepo-empty/repodata/01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +55 -0
- data/spec/functional/resource/yum_package_spec.rb +16 -0
- data/spec/integration/client/fips_spec.rb +20 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/platform_helpers.rb +4 -0
- data/spec/unit/chef_fs/file_system_spec.rb +2 -0
- data/spec/unit/property/validation_spec.rb +30 -0
- data/spec/unit/resource/yum_repository_spec.rb +4 -0
- metadata +21 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2116a9a16e93030ed9aa85235426085567d3ef63e0c603bffa3a5a1614bb439e
|
4
|
+
data.tar.gz: cc9dcbc47ddcb72e3fe920f9da13a788a607b66d628331b23a03ea8dbad53c30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d14c879526c8da207c572690f7e5c0a066c8ff89d33412053f6eaf3635ae2231d1f0c2c3478b1ebae30219ac0cbf86ee8c2381239eda50b937f853c2b7a77028
|
7
|
+
data.tar.gz: 1bfb25d57117e4cc93655ab55573cebcffd9854402a59606f79e5a6e05bc8660d18c2ccc85d2a09c007789509dd23abee90a1a3d26a07bc6d93ba8fff12d0b58
|
@@ -140,17 +140,18 @@ class Chef
|
|
140
140
|
def self.copy_to(pattern, src_root, dest_root, recurse_depth, options, ui = nil, format_path = nil)
|
141
141
|
found_result = false
|
142
142
|
error = false
|
143
|
+
result = {}
|
143
144
|
list_pairs(pattern, src_root, dest_root).parallel_each do |src, dest|
|
144
145
|
found_result = true
|
145
146
|
new_dest_parent = get_or_create_parent(dest, options, ui, format_path)
|
146
|
-
child_error = copy_entries(src, dest, new_dest_parent, recurse_depth, options, ui, format_path)
|
147
|
+
child_error, result = copy_entries(src, dest, new_dest_parent, recurse_depth, options, ui, format_path)
|
147
148
|
error ||= child_error
|
148
149
|
end
|
149
150
|
if !found_result && pattern.exact_path
|
150
151
|
ui.error "#{pattern}: No such file or directory on remote or local" if ui
|
151
152
|
error = true
|
152
153
|
end
|
153
|
-
error
|
154
|
+
[error, result]
|
154
155
|
end
|
155
156
|
|
156
157
|
# Yield entries for children that are in either +a_root+ or +b_root+, with
|
@@ -275,6 +276,7 @@ class Chef
|
|
275
276
|
# case we shouldn't waste time trying PUT if we know the file doesn't
|
276
277
|
# exist.
|
277
278
|
# Will need to decide how that works with checksums, though.
|
279
|
+
result = { "total" => 0, "success_count" => 0, "failed" => [] }
|
278
280
|
error = false
|
279
281
|
begin
|
280
282
|
dest_path = format_path.call(dest_entry) if ui
|
@@ -290,6 +292,8 @@ class Chef
|
|
290
292
|
dest_entry.delete(true)
|
291
293
|
ui.output "Deleted extra entry #{dest_path} (purge is on)" if ui
|
292
294
|
rescue Chef::ChefFS::FileSystem::NotFoundError
|
295
|
+
failure = { "src_path" => src_path, "reason" => "Entry #{dest_path} does not exist" }
|
296
|
+
result["failed"].append(failure)
|
293
297
|
ui.output "Entry #{dest_path} does not exist. Nothing to do. (purge is on)" if ui
|
294
298
|
end
|
295
299
|
end
|
@@ -323,7 +327,7 @@ class Chef
|
|
323
327
|
if recurse_depth != 0
|
324
328
|
src_entry.children.parallel_each do |src_child|
|
325
329
|
new_dest_child = new_dest_dir.child(src_child.name)
|
326
|
-
child_error = copy_entries(src_child, new_dest_child, new_dest_dir, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
330
|
+
child_error, result = copy_entries(src_child, new_dest_child, new_dest_dir, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
327
331
|
error ||= child_error
|
328
332
|
end
|
329
333
|
end
|
@@ -339,14 +343,15 @@ class Chef
|
|
339
343
|
|
340
344
|
else
|
341
345
|
# Both exist.
|
342
|
-
|
343
346
|
# If the entry can do a copy directly, do that.
|
344
347
|
if dest_entry.respond_to?(:copy_from)
|
345
348
|
if options[:force] || compare(src_entry, dest_entry)[0] == false
|
346
349
|
if options[:dry_run]
|
347
350
|
ui.output "Would update #{dest_path}" if ui
|
348
351
|
else
|
352
|
+
result["total"] += 1
|
349
353
|
dest_entry.copy_from(src_entry, options)
|
354
|
+
result["success_count"] += 1
|
350
355
|
ui.output "Updated #{dest_path}" if ui
|
351
356
|
end
|
352
357
|
end
|
@@ -359,7 +364,7 @@ class Chef
|
|
359
364
|
# If both are directories, recurse into their children
|
360
365
|
if recurse_depth != 0
|
361
366
|
child_pairs(src_entry, dest_entry).parallel_each do |src_child, dest_child|
|
362
|
-
child_error = copy_entries(src_child, dest_child, dest_entry, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
367
|
+
child_error, result = copy_entries(src_child, dest_child, dest_entry, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
363
368
|
error ||= child_error
|
364
369
|
end
|
365
370
|
end
|
@@ -373,7 +378,6 @@ class Chef
|
|
373
378
|
ui.error("File #{src_path} is a regular file while file #{dest_path} is a directory\n") if ui
|
374
379
|
return
|
375
380
|
else
|
376
|
-
|
377
381
|
# Both are files! Copy them unless we're sure they are the same.'
|
378
382
|
if options[:diff] == false
|
379
383
|
should_copy = false
|
@@ -389,7 +393,9 @@ class Chef
|
|
389
393
|
ui.output "Would update #{dest_path}" if ui
|
390
394
|
else
|
391
395
|
src_value = src_entry.read if src_value.nil?
|
396
|
+
result["total"] += 1
|
392
397
|
dest_entry.write(src_value)
|
398
|
+
result["success_count"] += 1
|
393
399
|
ui.output "Updated #{dest_path}" if ui
|
394
400
|
end
|
395
401
|
end
|
@@ -397,17 +403,25 @@ class Chef
|
|
397
403
|
end
|
398
404
|
end
|
399
405
|
rescue RubyFileError => e
|
406
|
+
failure = { "src_path" => src_path, "reason" => e.reason }
|
407
|
+
result["failed"].append(failure)
|
400
408
|
ui.warn "#{format_path.call(e.entry)} #{e.reason}." if ui
|
401
409
|
rescue DefaultEnvironmentCannotBeModifiedError => e
|
410
|
+
failure = { "src_path" => src_path, "reason" => e.reason }
|
411
|
+
result["failed"].append(failure)
|
402
412
|
ui.warn "#{format_path.call(e.entry)} #{e.reason}." if ui
|
403
413
|
rescue OperationFailedError => e
|
414
|
+
failure = { "src_path" => src_path, "reason" => e.reason }
|
415
|
+
result["failed"].append(failure)
|
404
416
|
ui.error "#{format_path.call(e.entry)} failed to #{e.operation}: #{e.message}" if ui
|
405
417
|
error = true
|
406
418
|
rescue OperationNotAllowedError => e
|
419
|
+
failure = { "src_path" => src_path, "reason" => e.reason }
|
420
|
+
result["failed"].append(failure)
|
407
421
|
ui.error "#{format_path.call(e.entry)} #{e.reason}." if ui
|
408
422
|
error = true
|
409
423
|
end
|
410
|
-
error
|
424
|
+
[error, result]
|
411
425
|
end
|
412
426
|
|
413
427
|
def get_or_create_parent(entry, options, ui, format_path)
|
data/lib/chef/property.rb
CHANGED
@@ -307,7 +307,7 @@ class Chef
|
|
307
307
|
#
|
308
308
|
def required?(action = nil)
|
309
309
|
if !action.nil? && options[:required].is_a?(Array)
|
310
|
-
options[:required]
|
310
|
+
(options[:required] & Array(action)).any?
|
311
311
|
else
|
312
312
|
!!options[:required]
|
313
313
|
end
|
@@ -426,7 +426,7 @@ class Chef
|
|
426
426
|
end
|
427
427
|
end
|
428
428
|
|
429
|
-
if value.nil? && required?
|
429
|
+
if value.nil? && required?(resource_action(resource))
|
430
430
|
raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
|
431
431
|
else
|
432
432
|
value
|
@@ -455,7 +455,7 @@ class Chef
|
|
455
455
|
Chef.deprecated(:property, options[:deprecated])
|
456
456
|
end
|
457
457
|
|
458
|
-
if value.nil? && required?
|
458
|
+
if value.nil? && required?(resource_action(resource))
|
459
459
|
raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
|
460
460
|
else
|
461
461
|
value
|
@@ -768,5 +768,10 @@ class Chef
|
|
768
768
|
end
|
769
769
|
visitor.call(value)
|
770
770
|
end
|
771
|
+
|
772
|
+
# action from resource, if available
|
773
|
+
def resource_action(resource)
|
774
|
+
resource.action if resource.respond_to?(:action)
|
775
|
+
end
|
771
776
|
end
|
772
777
|
end
|
@@ -153,6 +153,7 @@ class Chef
|
|
153
153
|
"program" => "Program",
|
154
154
|
"program_arguments" => "ProgramArguments",
|
155
155
|
"abandon_process_group" => "AbandonProcessGroup",
|
156
|
+
"associated_bundle_identifiers" => "AssociatedBundleIdentifiers",
|
156
157
|
"debug" => "Debug",
|
157
158
|
"disabled" => "Disabled",
|
158
159
|
"enable_globbing" => "EnableGlobbing",
|
@@ -53,16 +53,14 @@ def install_only_packages(base, name):
|
|
53
53
|
outpipe.flush()
|
54
54
|
|
55
55
|
def query(base, command):
|
56
|
-
enabled_repos = base.repos.listEnabled()
|
57
|
-
|
58
56
|
# Handle any repocontrols passed in with our options
|
59
57
|
|
60
58
|
if 'repos' in command:
|
61
59
|
for repo in command['repos']:
|
62
60
|
if 'enable' in repo:
|
63
61
|
base.repos.enableRepo(repo['enable'])
|
64
|
-
|
65
|
-
|
62
|
+
if 'disable' in repo:
|
63
|
+
base.repos.disableRepo(repo['disable'])
|
66
64
|
|
67
65
|
args = { 'name': command['provides'] }
|
68
66
|
do_nevra = False
|
@@ -94,8 +92,8 @@ def query(base, command):
|
|
94
92
|
# then the result was searchNevra'd. please be extremely careful if attempting to fix that
|
95
93
|
# since searchNevra does not support prco tuples.
|
96
94
|
if bool(re.search('\\s+', command['provides'])):
|
97
|
-
# handles flags (<, >, =, etc) and versions, but no
|
98
|
-
# raises error for any invalid input like: 'FOO BAR BAZ'
|
95
|
+
# handles flags (<, >, =, etc) and versions, but no wildcards
|
96
|
+
# raises error for any invalid input like: 'FOO BAR BAZ'
|
99
97
|
pkgs = obj.getProvides(*string_to_prco_tuple(command['provides']))
|
100
98
|
elif do_nevra:
|
101
99
|
# now if we're given version or arch properties explicitly, then we do a SearchNevra.
|
@@ -123,16 +121,6 @@ def query(base, command):
|
|
123
121
|
outpipe.write("%(n)s %(e)s:%(v)s-%(r)s %(a)s\n" % { 'n': pkg.name, 'e': pkg.epoch, 'v': pkg.version, 'r': pkg.release, 'a': pkg.arch })
|
124
122
|
outpipe.flush()
|
125
123
|
|
126
|
-
# Reset any repos we were passed in enablerepo/disablerepo to the original state in enabled_repos
|
127
|
-
if 'repos' in command:
|
128
|
-
for repo in command['repos']:
|
129
|
-
if 'enable' in repo:
|
130
|
-
if base.repos.getRepo(repo['enable']) not in enabled_repos:
|
131
|
-
base.repos.disableRepo(repo['enable'])
|
132
|
-
if 'disable' in repo:
|
133
|
-
if base.repos.getRepo(repo['disable']) in enabled_repos:
|
134
|
-
base.repos.enableRepo(repo['disable'])
|
135
|
-
|
136
124
|
# the design of this helper is that it should try to be 'brittle' and fail hard and exit in order
|
137
125
|
# to keep process tables clean. additional error handling should probably be added to the retry loop
|
138
126
|
# on the ruby side.
|
@@ -178,7 +166,7 @@ try:
|
|
178
166
|
|
179
167
|
try:
|
180
168
|
command = json.loads(line)
|
181
|
-
except ValueError
|
169
|
+
except ValueError as e:
|
182
170
|
raise RuntimeError("bad json parse")
|
183
171
|
|
184
172
|
if base is None:
|
@@ -44,7 +44,12 @@ class Chef
|
|
44
44
|
mode new_resource.mode
|
45
45
|
if new_resource.make_cache
|
46
46
|
notifies :run, "execute[yum clean metadata #{new_resource.repositoryid}]", :immediately if new_resource.clean_metadata || new_resource.clean_headers
|
47
|
-
|
47
|
+
# makecache fast only works on non-dnf systems.
|
48
|
+
if !which "dnf" && new_resource.makecache_fast
|
49
|
+
notifies :run, "execute[yum-makecache-fast-#{new_resource.repositoryid}]", :immediately
|
50
|
+
else
|
51
|
+
notifies :run, "execute[yum-makecache-#{new_resource.repositoryid}]", :immediately
|
52
|
+
end
|
48
53
|
notifies :flush_cache, "package[package-cache-reload-#{new_resource.repositoryid}]", :immediately
|
49
54
|
end
|
50
55
|
end
|
@@ -63,6 +68,13 @@ class Chef
|
|
63
68
|
only_if { new_resource.enabled }
|
64
69
|
end
|
65
70
|
|
71
|
+
# download only the minimum required metadata
|
72
|
+
execute "yum-makecache-fast-#{new_resource.repositoryid}" do
|
73
|
+
command "yum -q -y makecache fast --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
|
74
|
+
action :nothing
|
75
|
+
only_if { new_resource.enabled }
|
76
|
+
end
|
77
|
+
|
66
78
|
package "package-cache-reload-#{new_resource.repositoryid}" do
|
67
79
|
action :nothing
|
68
80
|
end
|
@@ -129,6 +129,9 @@ class Chef
|
|
129
129
|
property :abandon_process_group, [ TrueClass, FalseClass ],
|
130
130
|
description: "If a job dies, all remaining processes with the same process ID may be kept running. Set to true to kill all remaining processes."
|
131
131
|
|
132
|
+
property :associated_bundle_identifiers, Hash,
|
133
|
+
description: "This optional key indicates which bundles the Login Items Added by Apps panel associates with the helper executable."
|
134
|
+
|
132
135
|
property :debug, [ TrueClass, FalseClass ],
|
133
136
|
description: "Sets the log mask to `LOG_DEBUG` for this job."
|
134
137
|
|
@@ -69,7 +69,7 @@ class Chef
|
|
69
69
|
|
70
70
|
property :global, [TrueClass, FalseClass],
|
71
71
|
description: "Determines whether or not the domain is global.",
|
72
|
-
deprecated:
|
72
|
+
deprecated: "As of Chef Infra Client 17.8 the `global` property is no longer necessary.",
|
73
73
|
default: false,
|
74
74
|
desired_state: false
|
75
75
|
|
@@ -90,7 +90,7 @@ class Chef
|
|
90
90
|
description: "The value type of the preference key.",
|
91
91
|
equal_to: %w{bool string int float array dict},
|
92
92
|
desired_state: false,
|
93
|
-
deprecated:
|
93
|
+
deprecated: "As of Chef Infra Client 17.8 the `type` property is no longer necessary."
|
94
94
|
|
95
95
|
property :user, [String, Symbol],
|
96
96
|
description: "The system user that the default will be applied to. Set :current for current user, :all for all users or pass a valid username",
|
@@ -100,7 +100,7 @@ class Chef
|
|
100
100
|
description: "Set to true if the setting you wish to modify requires privileged access. This requires passwordless sudo for the `/usr/bin/defaults` command to be setup for the user running #{ChefUtils::Dist::Infra::PRODUCT}.",
|
101
101
|
default: false,
|
102
102
|
desired_state: false,
|
103
|
-
deprecated:
|
103
|
+
deprecated: "As of Chef Infra Client 17.8 the `sudo` property is no longer necessary."
|
104
104
|
|
105
105
|
load_current_value do |new_resource|
|
106
106
|
Chef::Log.debug "#load_current_value: attempting to read \"#{new_resource.domain}\" value from preferences to determine state"
|
@@ -92,7 +92,7 @@ class Chef
|
|
92
92
|
|
93
93
|
property :release,
|
94
94
|
[Float, String],
|
95
|
-
description: "Sets the operating system minor release to use for subscriptions for the system. Products and updates are limited to the specified minor release version. This is used
|
95
|
+
description: "Sets the operating system minor release to use for subscriptions for the system. Products and updates are limited to the specified minor release version. This is used with the `auto_attach` option, it may also be used with activation keys. For example, `release '6.4'` will append `--release=6.4` to the register command.",
|
96
96
|
introduced: "17.8"
|
97
97
|
|
98
98
|
action :register, description: "Register the node with RHSM." do
|
@@ -205,6 +205,7 @@ class Chef
|
|
205
205
|
command << "--name=#{Shellwords.shellescape(new_resource.system_name)}" if new_resource.system_name
|
206
206
|
command << "--serverurl=#{Shellwords.shellescape(new_resource.server_url)}" if new_resource.server_url
|
207
207
|
command << "--baseurl=#{Shellwords.shellescape(new_resource.base_url)}" if new_resource.base_url
|
208
|
+
command << "--release=#{Shellwords.shellescape(new_resource.release)}" if new_resource.release
|
208
209
|
command << "--force" if new_resource.force
|
209
210
|
|
210
211
|
return command.join(" ")
|
@@ -114,6 +114,10 @@ class Chef
|
|
114
114
|
description: "Determines whether package files downloaded by Yum stay in cache directories. By using cached data, you can carry out certain operations without a network connection.",
|
115
115
|
default: true
|
116
116
|
|
117
|
+
property :makecache_fast, [TrueClass, FalseClass],
|
118
|
+
description: "if make_cache is true, uses `yum makecache fast`, which downloads only the minimum amount of data required. Useful over slower connections and when disk space is at a premium.",
|
119
|
+
default: false
|
120
|
+
|
117
121
|
property :max_retries, [String, Integer],
|
118
122
|
description: "Number of times any attempt to retrieve a file should retry before returning an error. Setting this to `0` makes Yum try forever."
|
119
123
|
|
data/lib/chef/version.rb
CHANGED
data/spec/data/chef_guid
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
25435897-47c0-49b1-9eb3-561b312cbfd6
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
|
3
|
+
<revision>1667508211</revision>
|
4
|
+
<data type="filelists">
|
5
|
+
<checksum type="sha256">401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93</checksum>
|
6
|
+
<open-checksum type="sha256">bf9808b81cb2dbc54b4b8e35adc584ddcaa73bd81f7088d73bf7dbbada961310</open-checksum>
|
7
|
+
<location href="repodata/401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz"/>
|
8
|
+
<timestamp>1667508211</timestamp>
|
9
|
+
<size>123</size>
|
10
|
+
<open-size>125</open-size>
|
11
|
+
</data>
|
12
|
+
<data type="primary">
|
13
|
+
<checksum type="sha256">dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9</checksum>
|
14
|
+
<open-checksum type="sha256">e1e2ffd2fb1ee76f87b70750d00ca5677a252b397ab6c2389137a0c33e7b359f</open-checksum>
|
15
|
+
<location href="repodata/dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz"/>
|
16
|
+
<timestamp>1667508211</timestamp>
|
17
|
+
<size>134</size>
|
18
|
+
<open-size>167</open-size>
|
19
|
+
</data>
|
20
|
+
<data type="primary_db">
|
21
|
+
<checksum type="sha256">5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945</checksum>
|
22
|
+
<open-checksum type="sha256">f0d550414e8f2e960e82e704549364299ca9e3e8664ad4faffd208262c3b6d12</open-checksum>
|
23
|
+
<location href="repodata/5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2"/>
|
24
|
+
<timestamp>1667508211</timestamp>
|
25
|
+
<database_version>10</database_version>
|
26
|
+
<size>1131</size>
|
27
|
+
<open-size>21504</open-size>
|
28
|
+
</data>
|
29
|
+
<data type="other_db">
|
30
|
+
<checksum type="sha256">7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4</checksum>
|
31
|
+
<open-checksum type="sha256">4de0fe7c5dd2674849a7c63c326e42f33af0a0f46219bc6dd59f51dfa2ac8c68</open-checksum>
|
32
|
+
<location href="repodata/7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2"/>
|
33
|
+
<timestamp>1667508211</timestamp>
|
34
|
+
<database_version>10</database_version>
|
35
|
+
<size>575</size>
|
36
|
+
<open-size>6144</open-size>
|
37
|
+
</data>
|
38
|
+
<data type="other">
|
39
|
+
<checksum type="sha256">6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670</checksum>
|
40
|
+
<open-checksum type="sha256">e0ed5e0054194df036cf09c1a911e15bf2a4e7f26f2a788b6f47d53e80717ccc</open-checksum>
|
41
|
+
<location href="repodata/6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz"/>
|
42
|
+
<timestamp>1667508211</timestamp>
|
43
|
+
<size>123</size>
|
44
|
+
<open-size>121</open-size>
|
45
|
+
</data>
|
46
|
+
<data type="filelists_db">
|
47
|
+
<checksum type="sha256">01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523</checksum>
|
48
|
+
<open-checksum type="sha256">c4211f57bdcbb142c9f93a6d32401539f775eb6a670ab7a423e13f435ce94689</open-checksum>
|
49
|
+
<location href="repodata/01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2"/>
|
50
|
+
<timestamp>1667508211</timestamp>
|
51
|
+
<database_version>10</database_version>
|
52
|
+
<size>586</size>
|
53
|
+
<open-size>7168</open-size>
|
54
|
+
</data>
|
55
|
+
</repomd>
|
@@ -57,6 +57,12 @@ describe Chef::Resource::YumPackage, :requires_root, external: exclude_test do
|
|
57
57
|
baseurl=file://#{CHEF_SPEC_ASSETS}/yumrepo
|
58
58
|
enable=1
|
59
59
|
gpgcheck=0
|
60
|
+
[chef-yum-empty]
|
61
|
+
name=Chef DNF spec empty repo
|
62
|
+
baseurl=file://#{CHEF_SPEC_ASSETS}/yumrepo-empty
|
63
|
+
enable=1
|
64
|
+
gpgcheck=0
|
65
|
+
|
60
66
|
EOF
|
61
67
|
end
|
62
68
|
# ensure we don't have any stray chef_rpms installed
|
@@ -1095,6 +1101,16 @@ describe Chef::Resource::YumPackage, :requires_root, external: exclude_test do
|
|
1095
1101
|
end.should_not_be_updated
|
1096
1102
|
end
|
1097
1103
|
|
1104
|
+
it "should work to disable a repo" do
|
1105
|
+
flush_cache
|
1106
|
+
expect {
|
1107
|
+
yum_package "chef_rpm" do
|
1108
|
+
options "--disablerepo=chef-yum-localtesting --enablerepo=chef-yum-empty"
|
1109
|
+
action :install
|
1110
|
+
end
|
1111
|
+
}.to raise_error(Chef::Exceptions::Package, /No candidate version available/)
|
1112
|
+
end
|
1113
|
+
|
1098
1114
|
it "when an idempotent install action is run, does not leave repos disabled" do
|
1099
1115
|
flush_cache
|
1100
1116
|
# this is a bit tricky -- we need this action to be idempotent, so that it doesn't recycle any
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "chef-client fips" do
|
4
|
+
def enable_fips
|
5
|
+
OpenSSL.fips_mode = true
|
6
|
+
end
|
7
|
+
|
8
|
+
# All tests assume fips mode is off at present
|
9
|
+
after { OpenSSL.fips_mode = false }
|
10
|
+
|
11
|
+
# For non-FIPS OSes/builds of Ruby, enabling FIPS should error
|
12
|
+
example "Error enabling fips_mode if FIPS not linked", fips_mode: false do
|
13
|
+
expect { enable_fips }.to raise_error(OpenSSL::OpenSSLError)
|
14
|
+
end
|
15
|
+
|
16
|
+
# For FIPS OSes/builds of Ruby, enabling FIPS should not error
|
17
|
+
example "Do not error enabling fips_mode if FIPS linked", fips_mode: true do
|
18
|
+
expect { enable_fips }.not_to raise_error
|
19
|
+
end
|
20
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -138,6 +138,10 @@ RSpec.configure do |config|
|
|
138
138
|
|
139
139
|
config.filter_run_excluding skip_buildkite: true if ENV["BUILDKITE"]
|
140
140
|
|
141
|
+
config.filter_run_excluding fips_mode: !fips_mode_build? unless opensuse?
|
142
|
+
# RubyDistros OpenSUSE docker images have a broken fips
|
143
|
+
config.filter_run_excluding :fips_mode if opensuse?
|
144
|
+
|
141
145
|
config.filter_run_excluding windows_only: true unless windows?
|
142
146
|
config.filter_run_excluding not_supported_on_windows: true if windows?
|
143
147
|
config.filter_run_excluding not_supported_on_macos: true if macos?
|
@@ -600,6 +600,36 @@ describe "Chef::Resource.property validation" do
|
|
600
600
|
it "does not fail if it is not specified, on running the doit2 action" do
|
601
601
|
expect { resource.run_action(:doit2) }.not_to raise_error
|
602
602
|
end
|
603
|
+
|
604
|
+
context "when an action does not require it" do
|
605
|
+
before do
|
606
|
+
resource.action(:doit2)
|
607
|
+
end
|
608
|
+
|
609
|
+
it "retrieval succeeds if x is not set when resource uses the doit2 action" do
|
610
|
+
expect { resource.x }.not_to raise_error
|
611
|
+
end
|
612
|
+
|
613
|
+
it "succeeds with set to nil when resource uses the doit2 action" do
|
614
|
+
expect { resource.x nil }.not_to raise_error
|
615
|
+
end
|
616
|
+
end
|
617
|
+
|
618
|
+
context "when an action requires it" do
|
619
|
+
before do
|
620
|
+
# NOTE: this is already the default action, but it doesn't
|
621
|
+
# hurt to be clear about the situation.
|
622
|
+
resource.action(:doit)
|
623
|
+
end
|
624
|
+
|
625
|
+
it "if x is not specified, retrieval fails for the doit action" do
|
626
|
+
expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed
|
627
|
+
end
|
628
|
+
|
629
|
+
it "value nil is not valid for the doit action (required means 'not nil')" do
|
630
|
+
expect { resource.x nil }.to raise_error Chef::Exceptions::ValidationFailed
|
631
|
+
end
|
632
|
+
end
|
603
633
|
end
|
604
634
|
|
605
635
|
with_property ":x, String, required: true" do
|
@@ -68,6 +68,10 @@ describe Chef::Resource::YumRepository do
|
|
68
68
|
expect(resource.make_cache).to eql(true)
|
69
69
|
end
|
70
70
|
|
71
|
+
it "makecache_fast property defaults to false" do
|
72
|
+
expect(resource.makecache_fast).to eql(false)
|
73
|
+
end
|
74
|
+
|
71
75
|
it "mode property defaults to '0644'" do
|
72
76
|
expect(resource.mode).to eql("0644")
|
73
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 18.0
|
4
|
+
version: 18.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 18.0
|
19
|
+
version: 18.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 18.0
|
26
|
+
version: 18.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: chef-utils
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 18.0
|
33
|
+
version: 18.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 18.0
|
40
|
+
version: 18.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: train-core
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1427,6 +1427,7 @@ files:
|
|
1427
1427
|
- spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0
|
1428
1428
|
- spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0
|
1429
1429
|
- spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0
|
1430
|
+
- spec/data/chef_guid
|
1430
1431
|
- spec/data/client.d_00/00-foo.rb
|
1431
1432
|
- spec/data/client.d_00/01-bar.rb
|
1432
1433
|
- spec/data/client.d_00/02-strings.rb
|
@@ -1559,6 +1560,7 @@ files:
|
|
1559
1560
|
- spec/data/mixin/real_data.rb
|
1560
1561
|
- spec/data/nested.json
|
1561
1562
|
- spec/data/nodes/default.rb
|
1563
|
+
- spec/data/nodes/mcwfhpowell.json
|
1562
1564
|
- spec/data/nodes/test.example.com.rb
|
1563
1565
|
- spec/data/nodes/test.rb
|
1564
1566
|
- spec/data/null_config.rb
|
@@ -1722,6 +1724,13 @@ files:
|
|
1722
1724
|
- spec/functional/assets/mytest-1.0-1.noarch.rpm
|
1723
1725
|
- spec/functional/assets/mytest-2.0-1.noarch.rpm
|
1724
1726
|
- spec/functional/assets/testchefsubsys
|
1727
|
+
- spec/functional/assets/yumrepo-empty/repodata/01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2
|
1728
|
+
- spec/functional/assets/yumrepo-empty/repodata/401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz
|
1729
|
+
- spec/functional/assets/yumrepo-empty/repodata/5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2
|
1730
|
+
- spec/functional/assets/yumrepo-empty/repodata/6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz
|
1731
|
+
- spec/functional/assets/yumrepo-empty/repodata/7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2
|
1732
|
+
- spec/functional/assets/yumrepo-empty/repodata/dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz
|
1733
|
+
- spec/functional/assets/yumrepo-empty/repodata/repomd.xml
|
1725
1734
|
- spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm
|
1726
1735
|
- spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm
|
1727
1736
|
- spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm
|
@@ -1842,6 +1851,7 @@ files:
|
|
1842
1851
|
- spec/functional/win32/versions_spec.rb
|
1843
1852
|
- spec/integration/client/client_spec.rb
|
1844
1853
|
- spec/integration/client/exit_code_spec.rb
|
1854
|
+
- spec/integration/client/fips_spec.rb
|
1845
1855
|
- spec/integration/client/ipv6_spec.rb
|
1846
1856
|
- spec/integration/compliance/compliance_spec.rb
|
1847
1857
|
- spec/integration/ohai/ohai_spec.rb
|
@@ -2439,7 +2449,7 @@ metadata:
|
|
2439
2449
|
homepage_uri: https://www.chef.io
|
2440
2450
|
mailing_list_uri: https://discourse.chef.io/
|
2441
2451
|
source_code_uri: https://github.com/chef/chef/
|
2442
|
-
post_install_message:
|
2452
|
+
post_install_message:
|
2443
2453
|
rdoc_options: []
|
2444
2454
|
require_paths:
|
2445
2455
|
- lib
|
@@ -2447,15 +2457,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
2447
2457
|
requirements:
|
2448
2458
|
- - ">="
|
2449
2459
|
- !ruby/object:Gem::Version
|
2450
|
-
version: 3.0
|
2460
|
+
version: 3.1.0
|
2451
2461
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
2452
2462
|
requirements:
|
2453
2463
|
- - ">="
|
2454
2464
|
- !ruby/object:Gem::Version
|
2455
2465
|
version: '0'
|
2456
2466
|
requirements: []
|
2457
|
-
rubygems_version: 3.
|
2458
|
-
signing_key:
|
2467
|
+
rubygems_version: 3.3.26
|
2468
|
+
signing_key:
|
2459
2469
|
specification_version: 4
|
2460
2470
|
summary: A systems integration framework, built to bring the benefits of configuration
|
2461
2471
|
management to your entire infrastructure.
|