chef 13.5.3-universal-mingw32 → 13.6.0-universal-mingw32
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/VERSION +1 -1
- data/acceptance/.bundle/config +2 -0
- data/bin/chef-shell +2 -0
- data/distro/powershell/chef/chef.psm1 +23 -2
- data/lib/chef/.DS_Store +0 -0
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/chef_fs/config.rb +1 -1
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +5 -0
- data/lib/chef/client.rb +3 -0
- data/lib/chef/cookbook/synchronizer.rb +2 -4
- data/lib/chef/data_bag.rb +4 -0
- data/lib/chef/deprecated.rb +10 -0
- data/lib/chef/knife/client_delete.rb +1 -1
- data/lib/chef/knife/node_delete.rb +1 -1
- data/lib/chef/knife/node_run_list_add.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/role_env_run_list_add.rb +1 -1
- data/lib/chef/knife/role_run_list_add.rb +1 -1
- data/lib/chef/mixin/.DS_Store +0 -0
- data/lib/chef/mixin/user_context.rb +1 -1
- data/lib/chef/platform/rebooter.rb +7 -3
- data/lib/chef/provider/dsc_script.rb +5 -1
- data/lib/chef/provider/package.rb +35 -4
- data/lib/chef/provider/package/apt.rb +7 -0
- data/lib/chef/provider/package/chocolatey.rb +24 -8
- data/lib/chef/provider/package/dnf.rb +14 -5
- data/lib/chef/provider/package/dnf/dnf_helper.py +10 -0
- data/lib/chef/provider/package/dnf/python_helper.rb +15 -0
- data/lib/chef/provider/package/rpm.rb +5 -0
- data/lib/chef/provider/package/windows.rb +15 -0
- data/lib/chef/provider/package/yum.rb +4 -20
- data/lib/chef/provider/package/zypper.rb +5 -1
- data/lib/chef/provider/route.rb +1 -1
- data/lib/chef/provider/windows_task.rb +19 -4
- data/lib/chef/provider/zypper_repository.rb +100 -12
- data/lib/chef/resource/deploy.rb +6 -0
- data/lib/chef/resource/dnf_package.rb +9 -2
- data/lib/chef/resource/windows_task.rb +12 -7
- data/lib/chef/resource/zypper_package.rb +1 -0
- data/lib/chef/resource/zypper_repository.rb +1 -0
- data/lib/chef/util/dsc/lcm_output_parser.rb +57 -2
- data/lib/chef/util/dsc/local_configuration_manager.rb +16 -16
- data/lib/chef/version.rb +1 -1
- data/spec/.DS_Store +0 -0
- data/spec/functional/rebooter_spec.rb +22 -11
- data/spec/functional/resource/windows_task_spec.rb +25 -0
- data/spec/unit/.DS_Store +0 -0
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +79 -0
- data/spec/unit/client_spec.rb +11 -0
- data/spec/unit/cookbook/synchronizer_spec.rb +30 -0
- data/spec/unit/knife/data_bag_create_spec.rb +8 -0
- data/spec/unit/mixin/user_context_spec.rb +1 -2
- data/spec/unit/provider/package/chocolatey_spec.rb +3 -1
- data/spec/unit/provider/package/rubygems_spec.rb +5 -0
- data/spec/unit/provider/package/zypper_spec.rb +8 -0
- data/spec/unit/provider/remote_file/network_file_spec.rb +1 -1
- data/spec/unit/provider/route_spec.rb +2 -0
- data/spec/unit/provider/windows_task_spec.rb +28 -0
- data/spec/unit/provider/zypper_repository_spec.rb +124 -0
- data/spec/unit/provider_resolver_spec.rb +4 -1
- data/spec/unit/resource/windows_task_spec.rb +8 -2
- data/spec/unit/resource/zypper_repository_spec.rb +11 -9
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +102 -18
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +2 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e4e80c0de1137ddd227984e82625f3639a7f2a9
|
4
|
+
data.tar.gz: 5fad1ea8fbe36e1df7ab94eb5f09010b2ac233af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ada2261cc4ec65adb6450bdf48261d6041680c92e276279d49d50ed9ed2df117f023a73912106ef9fe612bc20d7e21f175d406b14a9d0b3c1d1cac1fa4c18959
|
7
|
+
data.tar.gz: 6faae2f2806281b90ef8df82418811f26e5f7197f56369d46c8af5804ae8a7d2b8f82b6b8932de996ea5fd141c836d20bcb18dbd414ae74d34cec2a46011713e
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
13.
|
1
|
+
13.6.0
|
data/bin/chef-shell
CHANGED
@@ -282,6 +282,24 @@ function Run-ExecutableAndWait($AppPath, $ArgumentString) {
|
|
282
282
|
break
|
283
283
|
}
|
284
284
|
}
|
285
|
+
} else {
|
286
|
+
# For some reason, you can't read from the read-end of the read-pipe before the write end has started
|
287
|
+
# to write. Otherwise the process just blocks forever and never returns from the read. So we peek
|
288
|
+
# at the pipe until there is something. But don't peek too eagerly. This is stupid stupid stupid.
|
289
|
+
# There must be a way to do this without having to peek at a pipe first but I have not found it.
|
290
|
+
#
|
291
|
+
# Note to the future intrepid soul who wants to fix this:
|
292
|
+
# 0) This is related to unreasonable CPU usage by the wrapper PS script on a 1 VCPU VM (either Hyper-V
|
293
|
+
# or VirtualBox) running a consumer Windows SKU (Windows 10 for example...). Test it there.
|
294
|
+
# 1) Maybe this entire script is unnecessary and the bugs mentioned below have been fixed or don't need
|
295
|
+
# to be supported.
|
296
|
+
# 2) The server and consumer windows schedulers have different defaults. I had a hard time reproducing
|
297
|
+
# any issue on a win 2008 on win 2012 server default setup. See the "foreground application scheduler
|
298
|
+
# priority" setting to see if it's relevant.
|
299
|
+
# 3) This entire endeavor is silly anyway - why are we reimplementing process forking all over? Maybe try
|
300
|
+
# to get the folks above to accept patches instead of extending this crazy script.
|
301
|
+
Start-Sleep -s 1
|
302
|
+
# Start-Sleep -m 100
|
285
303
|
}
|
286
304
|
|
287
305
|
if ($global:LASTEXITCODE -ne [Chef.Kernel32]::STILL_ACTIVE) {
|
@@ -434,9 +452,12 @@ Export-ModuleMember -function chef-solo
|
|
434
452
|
Export-ModuleMember -function chef-windows-service
|
435
453
|
Export-ModuleMember -function knife
|
436
454
|
|
437
|
-
# To debug this module, uncomment the line below
|
455
|
+
# To debug this module, uncomment the line below
|
438
456
|
# Export-ModuleMember -function Run-RubyCommand
|
457
|
+
|
458
|
+
# Then run the following to reload the module. Use puts_argv as a helpful debug executable.
|
439
459
|
# Remove-Module chef
|
440
460
|
# Import-Module chef
|
441
|
-
# "puts ARGV" | Out-File C:\opscode\chef\bin\puts_args
|
461
|
+
# "puts ARGV" | Out-File C:\opscode\chef\bin\puts_args -Encoding ASCII
|
462
|
+
# Copy-Item C:\opscode\chef\bin\ohai.bat C:\opscode\chef\bin\puts_args.bat
|
442
463
|
# Run-RubyCommand puts_args 'Here' "are" some '"very interesting"' 'arguments[to]' "`"try out`""
|
data/lib/chef/.DS_Store
CHANGED
Binary file
|
@@ -501,7 +501,7 @@ class Chef::Application::Client < Chef::Application
|
|
501
501
|
# we need to sleep again after reconfigure to avoid stampeding when logrotate runs out of cron
|
502
502
|
if signal == RECONFIGURE_SIGNAL
|
503
503
|
reconfigure
|
504
|
-
interval_sleep(
|
504
|
+
interval_sleep(sec)
|
505
505
|
end
|
506
506
|
else
|
507
507
|
sleep(sec)
|
data/lib/chef/chef_fs/config.rb
CHANGED
@@ -66,7 +66,7 @@ class Chef
|
|
66
66
|
# upgrade/migration of older Chef Servers, so they should be considered
|
67
67
|
# frozen in time.
|
68
68
|
|
69
|
-
CHEF_11_OSS_STATIC_OBJECTS = %w{cookbooks
|
69
|
+
CHEF_11_OSS_STATIC_OBJECTS = %w{cookbooks data_bags environments roles}.freeze
|
70
70
|
CHEF_11_OSS_DYNAMIC_OBJECTS = %w{clients nodes users}.freeze
|
71
71
|
RBAC_OBJECT_NAMES = %w{acls containers groups }.freeze
|
72
72
|
CHEF_12_OBJECTS = %w{ cookbook_artifacts policies policy_groups client_keys }.freeze
|
@@ -5,6 +5,8 @@ class Chef
|
|
5
5
|
module ChefFS
|
6
6
|
module DataHandler
|
7
7
|
class DataBagItemDataHandler < DataHandlerBase
|
8
|
+
RESERVED_NAMES = /node|role|environment|client/
|
9
|
+
|
8
10
|
def normalize(data_bag_item, entry)
|
9
11
|
# If it's wrapped with raw_data, unwrap it.
|
10
12
|
if data_bag_item["json_class"] == "Chef::DataBagItem" && data_bag_item["raw_data"]
|
@@ -43,6 +45,7 @@ class Chef
|
|
43
45
|
end
|
44
46
|
|
45
47
|
# Verify that the JSON hash for this type has a key that matches its name.
|
48
|
+
# Also check that the data bag name is not a reserved search index name.
|
46
49
|
#
|
47
50
|
# @param object [Object] JSON hash of the object
|
48
51
|
# @param entry [Chef::ChefFS::FileSystem::BaseFSObject] filesystem object we are verifying
|
@@ -52,6 +55,8 @@ class Chef
|
|
52
55
|
base_name = remove_dot_json(entry.name)
|
53
56
|
if object["raw_data"]["id"] != base_name
|
54
57
|
yield("ID in #{entry.path_for_printing} must be '#{base_name}' (is '#{object['raw_data']['id']}')")
|
58
|
+
elsif entry.parent.name =~ RESERVED_NAMES
|
59
|
+
yield("Data bag name ('#{entry.parent.name}') must not match #{RESERVED_NAMES.inspect}")
|
55
60
|
end
|
56
61
|
end
|
57
62
|
|
data/lib/chef/client.rb
CHANGED
@@ -605,6 +605,9 @@ class Chef
|
|
605
605
|
filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version os os_version} : nil
|
606
606
|
ohai.all_plugins(filter)
|
607
607
|
events.ohai_completed(node)
|
608
|
+
rescue Ohai::Exceptions::CriticalPluginFailure => e
|
609
|
+
Chef::Log.error("Critical Ohai plugins failed: #{e.message}")
|
610
|
+
exit(false)
|
608
611
|
end
|
609
612
|
|
610
613
|
#
|
@@ -154,6 +154,7 @@ class Chef
|
|
154
154
|
|
155
155
|
queue = Chef::Util::ThreadedJobQueue.new
|
156
156
|
|
157
|
+
Chef::Log.warn("skipping cookbook synchronization! DO NOT LEAVE THIS ENABLED IN PRODUCTION!!!") if Chef::Config[:skip_cookbook_sync]
|
157
158
|
files.each do |file|
|
158
159
|
queue << lambda do |lock|
|
159
160
|
full_file_path = sync_file(file)
|
@@ -279,10 +280,7 @@ class Chef
|
|
279
280
|
end
|
280
281
|
|
281
282
|
def cached_copy_up_to_date?(local_path, expected_checksum)
|
282
|
-
if Chef::Config[:skip_cookbook_sync]
|
283
|
-
Chef::Log.warn "skipping cookbook synchronization! DO NOT LEAVE THIS ENABLED IN PRODUCTION!!!"
|
284
|
-
return true
|
285
|
-
end
|
283
|
+
return true if Chef::Config[:skip_cookbook_sync]
|
286
284
|
if cache.has_key?(local_path)
|
287
285
|
current_checksum = CookbookVersion.checksum_cookbook_file(cache.load(local_path, false))
|
288
286
|
expected_checksum == current_checksum
|
data/lib/chef/data_bag.rb
CHANGED
@@ -33,6 +33,7 @@ class Chef
|
|
33
33
|
include Chef::Mixin::ParamsValidate
|
34
34
|
|
35
35
|
VALID_NAME = /^[\.\-[:alnum:]_]+$/
|
36
|
+
RESERVED_NAMES = /node|role|environment|client/
|
36
37
|
|
37
38
|
attr_accessor :chef_server_rest
|
38
39
|
|
@@ -40,6 +41,9 @@ class Chef
|
|
40
41
|
unless name =~ VALID_NAME
|
41
42
|
raise Exceptions::InvalidDataBagName, "DataBags must have a name matching #{VALID_NAME.inspect}, you gave #{name.inspect}"
|
42
43
|
end
|
44
|
+
if name =~ RESERVED_NAMES
|
45
|
+
raise Exceptions::InvalidDataBagName, "DataBags may not have a name matching #{RESERVED_NAMES.inspect}, you gave #{name.inspect}"
|
46
|
+
end
|
43
47
|
end
|
44
48
|
|
45
49
|
# Create a new Chef::DataBag
|
data/lib/chef/deprecated.rb
CHANGED
@@ -32,7 +32,7 @@ class Chef
|
|
32
32
|
:long => "--delete-validators",
|
33
33
|
:description => "Force deletion of client if it's a validator"
|
34
34
|
|
35
|
-
banner "knife client delete [CLIENT[
|
35
|
+
banner "knife client delete [CLIENT [CLIENT]] (options)"
|
36
36
|
|
37
37
|
def run
|
38
38
|
if @name_args.length == 0
|
@@ -27,7 +27,7 @@ class Chef
|
|
27
27
|
require "chef/json_compat"
|
28
28
|
end
|
29
29
|
|
30
|
-
banner "knife role env_run_list add [ROLE] [ENVIRONMENT] [ENTRY[
|
30
|
+
banner "knife role env_run_list add [ROLE] [ENVIRONMENT] [ENTRY [ENTRY]] (options)"
|
31
31
|
|
32
32
|
option :after,
|
33
33
|
:short => "-a ITEM",
|
Binary file
|
@@ -23,7 +23,7 @@ class Chef
|
|
23
23
|
module UserContext
|
24
24
|
|
25
25
|
def with_user_context(user, password, domain = nil, &block)
|
26
|
-
|
26
|
+
unless Chef::Platform.windows?
|
27
27
|
raise Exceptions::UnsupportedPlatform, "User context impersonation is supported only on the Windows platform"
|
28
28
|
end
|
29
29
|
|
@@ -33,14 +33,18 @@ class Chef
|
|
33
33
|
def reboot!(node)
|
34
34
|
reboot_info = node.run_context.reboot_info
|
35
35
|
|
36
|
-
cmd =
|
36
|
+
cmd = case
|
37
|
+
when Chef::Platform.windows?
|
37
38
|
# should this do /f as well? do we then need a minimum delay to let apps quit?
|
38
39
|
# Use explicit path to shutdown.exe, to protect against https://github.com/chef/chef/issues/5594
|
39
40
|
windows_shutdown_path = "#{ENV['SYSTEMROOT']}/System32/shutdown.exe"
|
40
41
|
"#{windows_shutdown_path} /r /t #{reboot_info[:delay_mins] * 60} /c \"#{reboot_info[:reason]}\""
|
42
|
+
when node["os"] == "solaris2"
|
43
|
+
# SysV-flavored shutdown
|
44
|
+
"shutdown -i6 -g#{reboot_info[:delay_mins]} -y \"#{reboot_info[:reason]}\" &"
|
41
45
|
else
|
42
|
-
#
|
43
|
-
"shutdown -r +#{reboot_info[:delay_mins]} \"#{reboot_info[:reason]}\""
|
46
|
+
# Linux/BSD/Mac/AIX and other systems with BSD-ish shutdown
|
47
|
+
"shutdown -r +#{reboot_info[:delay_mins]} \"#{reboot_info[:reason]}\" &"
|
44
48
|
end
|
45
49
|
|
46
50
|
msg = "Rebooting server at a recipe's request. Details: #{reboot_info.inspect}"
|
@@ -161,7 +161,11 @@ class Chef
|
|
161
161
|
if resource.changes_state?
|
162
162
|
# We ignore the last log message because it only contains the time it took, which looks weird
|
163
163
|
cleaned_messages = resource.change_log[0..-2].map { |c| c.sub(/^#{Regexp.escape(resource.name)}/, "").strip }
|
164
|
-
|
164
|
+
unless cleaned_messages.empty?
|
165
|
+
"converge DSC resource #{resource.name} by #{cleaned_messages.find_all { |c| c != '' }.join("\n")}"
|
166
|
+
else
|
167
|
+
"converge DSC resource #{resource.name}"
|
168
|
+
end
|
165
169
|
else
|
166
170
|
# This is needed because a dsc script can have resources that are both converged and not
|
167
171
|
"converge DSC resource #{resource.name} by doing nothing because it is already converged"
|
@@ -323,10 +323,38 @@ class Chef
|
|
323
323
|
#
|
324
324
|
# Note that most likely we need a spaceship operator on versions that subclasses can implement
|
325
325
|
# and we should have `version_compare(v1, v2)` that returns `v1 <=> v2`.
|
326
|
+
|
327
|
+
# This method performs a strict equality check between two strings representing version numbers
|
326
328
|
#
|
329
|
+
# This function will eventually be deprecated in favour of the below version_equals function.
|
330
|
+
|
327
331
|
def target_version_already_installed?(current_version, target_version)
|
328
|
-
|
329
|
-
|
332
|
+
version_equals?(current_version, target_version)
|
333
|
+
end
|
334
|
+
|
335
|
+
# Note that most likely we need a spaceship operator on versions that subclasses can implement
|
336
|
+
# and we should have `version_compare(v1, v2)` that returns `v1 <=> v2`.
|
337
|
+
|
338
|
+
# This method performs a strict equality check between two strings representing version numbers
|
339
|
+
#
|
340
|
+
def version_equals?(v1, v2)
|
341
|
+
return false unless v1 && v2
|
342
|
+
v1 == v2
|
343
|
+
end
|
344
|
+
|
345
|
+
# This function compares two version numbers and returns 'spaceship operator' style results, ie:
|
346
|
+
# if v1 < v2 then return -1
|
347
|
+
# if v1 = v2 then return 0
|
348
|
+
# if v1 > v2 then return 1
|
349
|
+
# if v1 and v2 are not comparable then return nil
|
350
|
+
#
|
351
|
+
# By default, this function will use Gem::Version comparison. Subclasses can reimplement this method
|
352
|
+
# for package-management system specific versions.
|
353
|
+
def version_compare(v1, v2)
|
354
|
+
gem_v1 = Gem::Version.new(v1)
|
355
|
+
gem_v2 = Gem::Version.new(v2)
|
356
|
+
|
357
|
+
gem_v1 <=> gem_v2
|
330
358
|
end
|
331
359
|
|
332
360
|
# Check the current_version against the new_resource.version, possibly using fuzzy
|
@@ -439,16 +467,19 @@ class Chef
|
|
439
467
|
each_package do |package_name, new_version, current_version, candidate_version|
|
440
468
|
case action
|
441
469
|
when :upgrade
|
442
|
-
if
|
470
|
+
if version_equals?(current_version, new_version)
|
443
471
|
# this is an odd use case
|
444
472
|
Chef::Log.debug("#{new_resource} #{package_name} #{new_version} is already installed -- you are equality pinning with an :upgrade action, this may be deprecated in the future")
|
445
473
|
target_version_array.push(nil)
|
446
|
-
elsif
|
474
|
+
elsif version_equals?(current_version, candidate_version)
|
447
475
|
Chef::Log.debug("#{new_resource} #{package_name} #{candidate_version} is already installed")
|
448
476
|
target_version_array.push(nil)
|
449
477
|
elsif candidate_version.nil?
|
450
478
|
Chef::Log.debug("#{new_resource} #{package_name} has no candidate_version to upgrade to")
|
451
479
|
target_version_array.push(nil)
|
480
|
+
elsif version_compare(current_version, candidate_version) == 1 && !new_resource.allow_downgrade
|
481
|
+
Chef::Log.debug("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{candidate_version}. Skipping...)")
|
482
|
+
target_version_array.push(nil)
|
452
483
|
else
|
453
484
|
Chef::Log.debug("#{new_resource} #{package_name} is out of date, will upgrade to #{candidate_version}")
|
454
485
|
target_version_array.push(candidate_version)
|
@@ -127,6 +127,13 @@ class Chef
|
|
127
127
|
|
128
128
|
private
|
129
129
|
|
130
|
+
def version_compare(v1, v2)
|
131
|
+
gem_v1 = v1.gsub(/[_+]/, "+" => "-", "_" => "-") unless v1.nil?
|
132
|
+
gem_v2 = v2.gsub(/[_+]/, "+" => "-", "_" => "-") unless v2.nil?
|
133
|
+
|
134
|
+
Gem::Version.new(gem_v1) <=> Gem::Version.new(gem_v2)
|
135
|
+
end
|
136
|
+
|
130
137
|
# Runs command via shell_out with magic environment to disable
|
131
138
|
# interactive prompts. Command is run with default localization rather
|
132
139
|
# than forcing locale to "C", so command output may not be stable.
|
@@ -141,6 +141,17 @@ EOS
|
|
141
141
|
|
142
142
|
private
|
143
143
|
|
144
|
+
def version_compare(v1, v2)
|
145
|
+
if v1 == "latest" || v2 == "latest"
|
146
|
+
return 0
|
147
|
+
end
|
148
|
+
|
149
|
+
gem_v1 = Gem::Version.new(v1)
|
150
|
+
gem_v2 = Gem::Version.new(v2)
|
151
|
+
|
152
|
+
gem_v1 <=> gem_v2
|
153
|
+
end
|
154
|
+
|
144
155
|
# Magic to find where chocolatey is installed in the system, and to
|
145
156
|
# return the full path of choco.exe
|
146
157
|
#
|
@@ -226,15 +237,20 @@ EOS
|
|
226
237
|
#
|
227
238
|
# @return [Hash] name-to-version mapping of available packages
|
228
239
|
def available_packages
|
229
|
-
@available_packages
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
240
|
+
return @available_packages if @available_packages
|
241
|
+
@available_packages = {}
|
242
|
+
package_name_array.each do |pkg|
|
243
|
+
available_versions =
|
244
|
+
begin
|
245
|
+
cmd = [ "list -r #{pkg}" ]
|
246
|
+
cmd.push( "-source #{new_resource.source}" ) if new_resource.source
|
247
|
+
raw = parse_list_output(*cmd)
|
248
|
+
raw.keys.each_with_object({}) do |name, available|
|
249
|
+
available[name] = desired_name_versions[name] || raw[name]
|
250
|
+
end
|
236
251
|
end
|
237
|
-
|
252
|
+
@available_packages.merge! available_versions
|
253
|
+
end
|
238
254
|
@available_packages
|
239
255
|
end
|
240
256
|
|
@@ -35,13 +35,18 @@ class Chef
|
|
35
35
|
use_multipackage_api
|
36
36
|
use_package_name_for_source
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
# all rhel variants >= 8 will use DNF
|
39
|
+
provides :package, platform_family: "rhel", platform_version: ">= 8"
|
40
|
+
|
41
|
+
# fedora >= 22 uses DNF
|
42
|
+
provides :package, platform: "fedora", platform_version: ">= 22"
|
41
43
|
|
42
|
-
|
44
|
+
# amazon will eventually use DNF
|
45
|
+
provides :package, platform: "amazon" do
|
46
|
+
which("dnf")
|
47
|
+
end
|
43
48
|
|
44
|
-
provides :dnf_package
|
49
|
+
provides :dnf_package
|
45
50
|
|
46
51
|
#
|
47
52
|
# Most of the magic in this class happens in the python helper script. The ruby side of this
|
@@ -126,6 +131,10 @@ class Chef
|
|
126
131
|
end
|
127
132
|
end
|
128
133
|
|
134
|
+
def version_compare(v1, v2)
|
135
|
+
python_helper.compare_versions(v1, v2)
|
136
|
+
end
|
137
|
+
|
129
138
|
# @returns Array<Version>
|
130
139
|
def available_version(index)
|
131
140
|
@available_version ||= []
|