summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshwin <avarma@msystechnologies.com>2021-06-17 18:59:26 +0530
committerAshwin <avarma@msystechnologies.com>2021-06-17 18:59:26 +0530
commit115907a557e63cd4d8e639660c8641f546b4e2dd (patch)
treecab1b158e2a1dab20abaf3cc135a80e3922c46f6
parent951385931f571201681f617b7d368ac79d631e17 (diff)
downloadchef-115907a557e63cd4d8e639660c8641f546b4e2dd.tar.gz
zypper_package is not idempotent on SUSE
- Fixed the issue by handling the exception which raises if SUSE system is not able to search a particular package. Signed-off-by: Ashwin <avarma@msystechnologies.com>
-rw-r--r--lib/chef/provider/package/zypper.rb6
-rw-r--r--spec/unit/provider/package/zypper_spec.rb7
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/chef/provider/package/zypper.rb b/lib/chef/provider/package/zypper.rb
index a1a433cbdf..21955dd495 100644
--- a/lib/chef/provider/package/zypper.rb
+++ b/lib/chef/provider/package/zypper.rb
@@ -97,7 +97,11 @@ class Chef
def resolve_available_version(package_name, new_version)
search_string = new_version.nil? ? package_name : "#{package_name}=#{new_version}"
- so = shell_out!("zypper", "--non-interactive", "search", "-s", "--provides", "--match-exact", "--type=package", search_string)
+ so = begin
+ shell_out!("zypper", "--non-interactive", "search", "-s", "--provides", "--match-exact", "--type=package", search_string)
+ rescue Exception => e
+ Mixlib::ShellOut.new
+ end
so.stdout.each_line do |line|
if md = line.match(/^(\S*)\s+\|\s+(\S+)\s+\|\s+(\S+)\s+\|\s+(\S+)\s+\|\s+(\S+)\s+\|\s+(.*)$/)
(status, name, type, version, arch, repo) = [ md[1], md[2], md[3], md[4], md[5], md[6] ]
diff --git a/spec/unit/provider/package/zypper_spec.rb b/spec/unit/provider/package/zypper_spec.rb
index a1f6629f55..896041b5de 100644
--- a/spec/unit/provider/package/zypper_spec.rb
+++ b/spec/unit/provider/package/zypper_spec.rb
@@ -248,6 +248,13 @@ describe Chef::Provider::Package::Zypper do
)
provider.remove_package(["emacs"], ["1.0"])
end
+
+ it "should run zypper remove for non existing package" do
+ shell_out_expectation!(
+ "zypper", "--non-interactive", "remove", "noname=1.0"
+ )
+ provider.remove_package(["noname"], ["1.0"])
+ end
end
end