summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsonots <sonots@gmail.com>2015-01-16 04:01:39 +0900
committerBryan McLellan <btm@opscode.com>2015-02-12 14:02:17 -0500
commitc196fa94b5353402916d96b6b92ddb6a1830ab25 (patch)
treedb4b2224104b0e1bd115fbb8b20f2b3ac0b07809
parent67d6a3d548701f669e613fffbe435f69480829d1 (diff)
downloadchef-c196fa94b5353402916d96b6b92ddb6a1830ab25.tar.gz
allow_downgrade in rpm_package
-rw-r--r--lib/chef/provider/package.rb13
-rw-r--r--lib/chef/provider/package/rpm.rb6
-rw-r--r--lib/chef/provider/package/yum.rb8
-rw-r--r--lib/chef/resource/rpm_package.rb9
-rw-r--r--spec/unit/provider/package/rpm_spec.rb12
-rw-r--r--spec/unit/resource/rpm_package_spec.rb12
6 files changed, 49 insertions, 11 deletions
diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb
index 9edf8d5f52..fd317a3a31 100644
--- a/lib/chef/provider/package.rb
+++ b/lib/chef/provider/package.rb
@@ -109,18 +109,20 @@ class Chef
converge_by(upgrade_description) do
upgrade_package(package_names_for_targets, versions_for_targets)
- Chef::Log.info("#{@new_resource} upgraded #{package_names_for_targets} to #{versions_for_targets}")
+ log_allow_downgrade = allow_downgrade ? '(allow_downgrade)' : ''
+ Chef::Log.info("#{@new_resource} upgraded#{log_allow_downgrade} #{package_names_for_targets} to #{versions_for_targets}")
end
end
def upgrade_description
+ log_allow_downgrade = allow_downgrade ? '(allow_downgrade)' : ''
description = []
target_version_array.each_with_index do |target_version, i|
next if target_version.nil?
package_name = package_name_array[i]
candidate_version = candidate_version_array[i]
current_version = current_version_array[i] || "uninstalled"
- description << "upgrade package #{package_name} from #{current_version} to #{candidate_version}"
+ description << "upgrade#{log_allow_downgrade} package #{package_name} from #{current_version} to #{candidate_version}"
end
description
end
@@ -475,6 +477,13 @@ class Chef
run_context.has_cookbook_file_in_cookbook?(new_resource.cookbook_name, path)
end
+ def allow_downgrade
+ if @new_resource.respond_to?("allow_downgrade")
+ @new_resource.allow_downgrade
+ else
+ false
+ end
+ end
end
end
end
diff --git a/lib/chef/provider/package/rpm.rb b/lib/chef/provider/package/rpm.rb
index 504932f257..c96261bcd1 100644
--- a/lib/chef/provider/package/rpm.rb
+++ b/lib/chef/provider/package/rpm.rb
@@ -93,7 +93,11 @@ class Chef
unless @current_resource.version
shell_out!( "rpm #{@new_resource.options} -i #{@new_resource.source}" )
else
- shell_out!( "rpm #{@new_resource.options} -U #{@new_resource.source}" )
+ if allow_downgrade
+ shell_out!( "rpm #{@new_resource.options} -U --oldpackage #{@new_resource.source}" )
+ else
+ shell_out!( "rpm #{@new_resource.options} -U #{@new_resource.source}" )
+ end
end
end
diff --git a/lib/chef/provider/package/yum.rb b/lib/chef/provider/package/yum.rb
index 40da14413e..3c4721b6a1 100644
--- a/lib/chef/provider/package/yum.rb
+++ b/lib/chef/provider/package/yum.rb
@@ -976,14 +976,6 @@ class Chef
end
end
- def allow_downgrade
- if @new_resource.respond_to?("allow_downgrade")
- @new_resource.allow_downgrade
- else
- false
- end
- end
-
# Helpers
#
diff --git a/lib/chef/resource/rpm_package.rb b/lib/chef/resource/rpm_package.rb
index 8634f1e25d..f00121dd69 100644
--- a/lib/chef/resource/rpm_package.rb
+++ b/lib/chef/resource/rpm_package.rb
@@ -28,6 +28,15 @@ class Chef
def initialize(name, run_context=nil)
super
@resource_name = :rpm_package
+ @allow_downgrade = false
+ end
+
+ def allow_downgrade(arg=nil)
+ set_or_return(
+ :allow_downgrade,
+ arg,
+ :kind_of => [ TrueClass, FalseClass ]
+ )
end
end
diff --git a/spec/unit/provider/package/rpm_spec.rb b/spec/unit/provider/package/rpm_spec.rb
index ea126e1fb8..cd72044998 100644
--- a/spec/unit/provider/package/rpm_spec.rb
+++ b/spec/unit/provider/package/rpm_spec.rb
@@ -155,6 +155,18 @@ describe Chef::Provider::Package::Rpm do
provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
end
+ context "allowing downgrade" do
+ let(:new_resource) { Chef::Resource::RpmPackage.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm") }
+ let(:current_resource) { Chef::Resource::RpmPackage.new("ImageMagick-c++") }
+
+ it "should run rpm -U --oldpackage with the package source to downgrade" do
+ new_resource.allow_downgrade(true)
+ current_resource.version("21.4-19.el5")
+ expect(provider).to receive(:shell_out!).with("rpm -U --oldpackage /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
+ provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
+ end
+ end
+
context "installing when the name is a path" do
let(:new_resource) { Chef::Resource::Package.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm") }
let(:current_resource) { Chef::Resource::Package.new("ImageMagick-c++") }
diff --git a/spec/unit/resource/rpm_package_spec.rb b/spec/unit/resource/rpm_package_spec.rb
index d209c6a5a2..d3b505fff5 100644
--- a/spec/unit/resource/rpm_package_spec.rb
+++ b/spec/unit/resource/rpm_package_spec.rb
@@ -32,3 +32,15 @@ describe Chef::Resource::RpmPackage, "initialize" do
end
end
+
+describe Chef::Resource::RpmPackage, "allow_downgrade" do
+ before(:each) do
+ @resource = Chef::Resource::RpmPackage.new("foo")
+ end
+
+ it "should allow you to specify whether allow_downgrade is true or false" do
+ expect { @resource.allow_downgrade true }.not_to raise_error
+ expect { @resource.allow_downgrade false }.not_to raise_error
+ expect { @resource.allow_downgrade "monkey" }.to raise_error(ArgumentError)
+ end
+end