diff options
author | Ashwin <avarma@msystechnologies.com> | 2021-06-17 18:59:26 +0530 |
---|---|---|
committer | Ashwin <avarma@msystechnologies.com> | 2021-06-17 18:59:26 +0530 |
commit | 115907a557e63cd4d8e639660c8641f546b4e2dd (patch) | |
tree | cab1b158e2a1dab20abaf3cc135a80e3922c46f6 | |
parent | 951385931f571201681f617b7d368ac79d631e17 (diff) | |
download | chef-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.rb | 6 | ||||
-rw-r--r-- | spec/unit/provider/package/zypper_spec.rb | 7 |
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 |