diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2016-12-14 16:48:26 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2016-12-14 16:48:26 -0800 |
commit | b3d72d3b30eaf257642424eedc574d72f66de4e0 (patch) | |
tree | 624cd17189eddaf4ec5f4816bb44e1555d214118 | |
parent | e4a442d4d70dda5cd1ddc0799690216281a504ec (diff) | |
download | chef-b3d72d3b30eaf257642424eedc574d72f66de4e0.tar.gz |
refactor to use array indexes instead of package_names
fixes arch array support.
pretty sure that my "helpfully" compacting out nils from the
names and versions passed to install_package / remove_package
was a design flaw now. all of the helpers i've created to
translate from package_name to various arrays also assumes
the package_name is a unique identifier which is what was going
wrong here, and is wrong. best to just have all the arrays
indexed the same.
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r-- | lib/chef/provider/package.rb | 18 | ||||
-rw-r--r-- | lib/chef/provider/package/dnf.rb | 54 | ||||
-rw-r--r-- | spec/functional/resource/dnf_package_spec.rb | 1 |
3 files changed, 38 insertions, 35 deletions
diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb index 619653574b..f52614672a 100644 --- a/lib/chef/provider/package.rb +++ b/lib/chef/provider/package.rb @@ -635,24 +635,6 @@ class Chef end args end - - # Helper to construct Hash of names-to-versions, requested on the new_resource. - # If new_resource.version is nil, then all values will be nil. - # - # @return [Hash] Mapping of requested names to versions - def desired_name_versions - desired_versions = as_array(new_resource.version) || as_array(new_resource.package_name).map { nil } - Hash[*as_array(new_resource.package_name).zip(desired_versions).flatten] - end - - # Helper to construct Hash of names-to-arches, requested on the new_resource. - # If new_resource.arch is nil, then all values will be nil. - # - # @return [Hash] Mapping of requested names to versions - def desired_name_archs - desired_archs = as_array(new_resource.arch) || as_array(new_resource.package_name).map { nil } - Hash[*as_array(new_resource.package_name).zip(desired_archs).flatten] - end end end end diff --git a/lib/chef/provider/package/dnf.rb b/lib/chef/provider/package/dnf.rb index 6173637c8c..c22f06f52c 100644 --- a/lib/chef/provider/package/dnf.rb +++ b/lib/chef/provider/package/dnf.rb @@ -27,6 +27,8 @@ class Chef extend Chef::Mixin::Which include Chef::Mixin::GetSourceFromPackage + allow_nils + class Version attr_accessor :name attr_accessor :version @@ -179,14 +181,14 @@ class Chef end def candidate_version - package_name_array.map do |pkg| - available_version(pkg).version_with_arch + package_name_array.each_with_index.map do |pkg, i| + available_version(i).version_with_arch end end def get_current_versions - package_name_array.map do |pkg| - installed_version(pkg).version_with_arch + package_name_array.each_with_index.map do |pkg, i| + installed_version(i).version_with_arch end end @@ -194,7 +196,7 @@ class Chef if new_resource.source dnf(new_resource.options, "-y install", new_resource.source) else - resolved_names = names.map { |name| available_version(name).to_s } + resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? } dnf(new_resource.options, "-y install", resolved_names) end flushcache_after @@ -204,7 +206,7 @@ class Chef alias_method :upgrade_package, :install_package def remove_package(names, versions) - resolved_names = names.map { |name| installed_version(name).to_s } + resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? } dnf(new_resource.options, "-y remove", resolved_names) flushcache_after end @@ -235,27 +237,27 @@ class Chef end # @returns Array<Version> - def available_version(package_name) - @available_version ||= {} + def available_version(index) + @available_version ||= [] if new_resource.source - @available_version[package_name] ||= resolve_source_to_version_obj + @available_version[index] ||= resolve_source_to_version_obj else - @available_version[package_name] ||= python_helper.query(:whatavailable, package_name, desired_name_versions[package_name], desired_name_archs[package_name]) + @available_version[index] ||= python_helper.query(:whatavailable, package_name_array[index], safe_version_array[index], safe_arch_array[index]) end - @available_version[package_name] + @available_version[index] end # @returns Array<Version> - def installed_version(package_name) - @installed_version ||= {} + def installed_version(index) + @installed_version ||= [] if new_resource.source - @installed_version[package_name] ||= python_helper.query(:whatinstalled, available_version(package_name).name, desired_name_versions[package_name], desired_name_archs[package_name]) + @installed_version[index] ||= python_helper.query(:whatinstalled, available_version(index).name, safe_version_array[index], safe_arch_array[index]) else - @installed_version[package_name] ||= python_helper.query(:whatinstalled, package_name, desired_name_versions[package_name], desired_name_archs[package_name]) + @installed_version[index] ||= python_helper.query(:whatinstalled, package_name_array[index], safe_version_array[index], safe_arch_array[index]) end - @installed_version[package_name] + @installed_version[index] end def flushcache @@ -270,6 +272,26 @@ class Chef shell_out_with_timeout!(a_to_s("dnf", *args)) end + def safe_version_array + if new_resource.version.is_a?(Array) + new_resource.version + elsif new_resource.version.nil? + package_name_array.map { nil } + else + [ new_resource.version ] + end + end + + def safe_arch_array + if new_resource.arch.is_a?(Array) + new_resource.arch + elsif new_resource.arch.nil? + package_name_array.map { nil } + else + [ new_resource.arch ] + end + end + end end end diff --git a/spec/functional/resource/dnf_package_spec.rb b/spec/functional/resource/dnf_package_spec.rb index 487ddc5171..549bbad768 100644 --- a/spec/functional/resource/dnf_package_spec.rb +++ b/spec/functional/resource/dnf_package_spec.rb @@ -421,7 +421,6 @@ gpgcheck=0 # unlikely to work consistently correct, okay to deprecate the arch-array in favor of the arch in the name it "installs two rpms with multi-arch" do - skip "isn't going to work without major refactor" flush_cache dnf_package.package_name(%w{chef_rpm chef_rpm} ) dnf_package.arch(%w{x86_64 i686}) |