summaryrefslogtreecommitdiff
path: root/lib/chef/provider/package/dnf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/provider/package/dnf.rb')
-rw-r--r--lib/chef/provider/package/dnf.rb36
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/chef/provider/package/dnf.rb b/lib/chef/provider/package/dnf.rb
index a0e1d299e6..5e1e767bb4 100644
--- a/lib/chef/provider/package/dnf.rb
+++ b/lib/chef/provider/package/dnf.rb
@@ -34,7 +34,7 @@ class Chef
allow_nils
use_multipackage_api
use_package_name_for_source
- installed_version_satisfies_version_constraints
+ use_magic_version
# all rhel variants >= 8 will use DNF
provides :package, platform_family: "rhel", platform_version: ">= 8"
@@ -74,7 +74,7 @@ class Chef
def load_after_resource
# force the installed version array to repopulate
- @installed_version = []
+ @current_version = []
@after_resource = Chef::Resource::DnfPackage.new(new_resource.name)
after_resource.package_name(new_resource.package_name)
after_resource.version(get_current_versions)
@@ -98,9 +98,15 @@ class Chef
end
end
+ def magic_version
+ package_name_array.each_with_index.map do |pkg, i|
+ magical_version(i).version_with_arch
+ end
+ end
+
def get_current_versions
package_name_array.each_with_index.map do |pkg, i|
- installed_version(i).version_with_arch
+ current_version(i).version_with_arch
end
end
@@ -118,7 +124,7 @@ class Chef
alias upgrade_package install_package
def remove_package(names, versions)
- resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? }
+ resolved_names = names.each_with_index.map { |name, i| magical_version(i).to_s unless name.nil? }
dnf(options, "-y", "remove", resolved_names)
flushcache
end
@@ -148,10 +154,10 @@ class Chef
def resolved_package_lock_names(names)
names.each_with_index.map do |name, i|
unless name.nil?
- if installed_version(i).version.nil?
+ if magical_version(i).version.nil?
available_version(i).name
else
- installed_version(i).name
+ magical_version(i).name
end
end
end
@@ -216,16 +222,26 @@ class Chef
end
# @return [Array<Version>]
- def installed_version(index)
- @installed_version ||= []
- @installed_version[index] ||= if new_resource.source
+ def magical_version(index)
+ @magical_version ||= []
+ @magical_version[index] ||= if new_resource.source
python_helper.package_query(:whatinstalled, available_version(index).name, version: safe_version_array[index], arch: safe_arch_array[index], options: options)
else
python_helper.package_query(:whatinstalled, package_name_array[index], version: safe_version_array[index], arch: safe_arch_array[index], options: options)
end
- @installed_version[index]
+ @magical_version[index]
end
+ def current_version(index)
+ @current_version ||= []
+ @current_version[index] ||= if new_resource.source
+ python_helper.package_query(:whatinstalled, available_version(index).name, arch: safe_arch_array[index], options: options)
+ else
+ python_helper.package_query(:whatinstalled, package_name_array[index], arch: safe_arch_array[index], options: options)
+ end
+ @current_version[index]
+ end
+
# cache flushing is accomplished by simply restarting the python helper. this produces a roughly
# 15% hit to the runtime of installing/removing/upgrading packages. correctly using multipackage
# array installs (and the multipackage cookbook) can produce 600% improvements in runtime.