diff options
Diffstat (limited to 'lib/chef/provider/package/dnf.rb')
-rw-r--r-- | lib/chef/provider/package/dnf.rb | 36 |
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. |