summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManick Vel <mkumaravel@msystechnologies.com>2021-10-14 19:27:35 +0530
committerpratixha <pratiksha.prajapati@msystechnologies.com>2022-05-25 12:13:21 +0530
commit049d64ac75b709ad4b6e0ab3a6b5b824cb1578a3 (patch)
tree1d3d8e93e13131906c09bbcd6a3d6b8bbc3a42d4
parent6c9e276fa8c3de273c3bb742be2d64934046bbfb (diff)
downloadchef-049d64ac75b709ad4b6e0ab3a6b5b824cb1578a3.tar.gz
Made source addition to zypper package and added specs too
-rw-r--r--lib/chef/provider/package/zypper.rb38
-rw-r--r--spec/unit/provider/package/zypper_spec.rb21
2 files changed, 58 insertions, 1 deletions
diff --git a/lib/chef/provider/package/zypper.rb b/lib/chef/provider/package/zypper.rb
index 47e85a83d0..7d70fc3cd1 100644
--- a/lib/chef/provider/package/zypper.rb
+++ b/lib/chef/provider/package/zypper.rb
@@ -73,6 +73,37 @@ class Chef
@candidate_version ||= package_name_array.each_with_index.map { |pkg, i| available_version(i) }
end
+ def candidate_version
+ if source_files_exist?
+ unless uri_scheme?(new_resource.source) || ::File.exist?(new_resource.source)
+ @package_source_exists = false
+ return
+ end
+
+ logger.trace("#{new_resource} checking rpm status")
+ shell_out!("rpm", "-qp", "--queryformat", "%{NAME} %{VERSION}-%{RELEASE}\n", new_resource.source).stdout.each_line do |line|
+ case line
+ when /^(\S+)\s(\S+)$/
+ current_resource.package_name($1)
+ new_resource.version($2)
+ @candidate_version = $2
+ end
+ end
+
+ else
+ @candidate_version ||= package_name_array.each_with_index.map { |pkg, i| available_version(i) }
+ end
+ end
+
+ def uri_scheme?(str)
+ scheme = URI.split(str).first
+ return false unless scheme
+
+ %w{http https ftp file}.include?(scheme.downcase)
+ rescue URI::InvalidURIError
+ false
+ end
+
def resolve_current_version(package_name)
latest_version = current_version = nil
is_installed = false
@@ -129,6 +160,11 @@ class Chef
@installed_version[index]
end
+ def source_files_exist?
+ resolved_source_array.all? { |s| s && ::File.exist?(s) }
+ end
+
+
def zip(names, versions)
names.zip(versions).map do |n, v|
(v.nil? || v.empty?) ? n : "#{n}=#{v}"
@@ -141,7 +177,7 @@ class Chef
end
def zypper_package(command, global_options, *options, names, versions)
- zipped_names = zip(names, versions)
+ zipped_names = source_files_exist? ? [new_resource.source] : zip(names, versions)
if zypper_version < 1.0
shell_out!("zypper", global_options, gpg_checks, command, *options, "-y", names)
else
diff --git a/spec/unit/provider/package/zypper_spec.rb b/spec/unit/provider/package/zypper_spec.rb
index a1f6629f55..d77059c180 100644
--- a/spec/unit/provider/package/zypper_spec.rb
+++ b/spec/unit/provider/package/zypper_spec.rb
@@ -32,6 +32,8 @@ describe Chef::Provider::Package::Zypper do
let(:status) { double(stdout: "\n", exitstatus: 0) }
+ let(:source) { "/tmp/wget_1.11.4-1ubuntu1_amd64.deb" }
+
before(:each) do
allow(Chef::Resource::Package).to receive(:new).and_return(current_resource)
allow(provider).to receive(:shell_out_compacted!).and_return(status)
@@ -163,6 +165,15 @@ describe Chef::Provider::Package::Zypper do
)
provider.install_package(["emacs"], ["1.0"])
end
+
+ it "should run zypper install with source option" do
+ new_resource.source "/tmp/wget_1.11.4-1ubuntu1_amd64.deb"
+ allow(::File).to receive(:exist?).with("/tmp/wget_1.11.4-1ubuntu1_amd64.deb").and_return(true)
+ shell_out_expectation!(
+ "zypper","--non-interactive", "install", "--auto-agree-with-licenses", "--oldpackage", "/tmp/wget_1.11.4-1ubuntu1_amd64.deb"
+ )
+ provider.install_package(["emacs"], ["1.0"])
+ end
end
describe "upgrade_package" do
@@ -200,6 +211,16 @@ describe Chef::Provider::Package::Zypper do
)
provider.upgrade_package(["emacs"], ["1.0"])
end
+
+ it "should run zypper upgrade with source option" do
+ new_resource.source "/tmp/wget_1.11.4-1ubuntu1_amd64.deb"
+ allow(::File).to receive(:exist?).with("/tmp/wget_1.11.4-1ubuntu1_amd64.deb").and_return(true)
+ shell_out_expectation!(
+ "zypper","--non-interactive", "install", "--auto-agree-with-licenses", "--oldpackage", "/tmp/wget_1.11.4-1ubuntu1_amd64.deb"
+ )
+ provider.upgrade_package(["emacs"], ["1.0"])
+ end
+
end
describe "remove_package" do