summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Waldt <waldt@b1-systems.de>2016-09-29 15:24:54 +0200
committerEike Waldt <waldt@b1-systems.de>2016-09-29 15:24:54 +0200
commit5977d0b11323ca39ff81f2ad4f8ff1e229863039 (patch)
treeecd884536de64e65b801da22e758313edb17e1ee
parent45a0e9b565bf9401e59e99e7cc94414fe93427b2 (diff)
downloadchef-5977d0b11323ca39ff81f2ad4f8ff1e229863039.tar.gz
added locking for yum
-rw-r--r--lib/chef/provider/package/yum.rb22
-rw-r--r--spec/unit/provider/package/yum_spec.rb18
2 files changed, 40 insertions, 0 deletions
diff --git a/lib/chef/provider/package/yum.rb b/lib/chef/provider/package/yum.rb
index 74d52946f7..e64ff5c22a 100644
--- a/lib/chef/provider/package/yum.rb
+++ b/lib/chef/provider/package/yum.rb
@@ -123,6 +123,19 @@ class Chef
end
end
+ def package_locked(name, version)
+ islocked = false
+ locked = shell_out_with_timeout!("yum versionlock")
+ locked.stdout.each_line do |line|
+ line_package = line.sub(/-[^-]*-[^-]*$/, "").split(":").last.strip
+ if line_package == name
+ islocked = true
+ end
+ end
+ return islocked
+ end
+
+
# Standard Provider methods for Parent
#
@@ -369,6 +382,15 @@ class Chef
remove_package(name, version)
end
+ def lock_package(name, version)
+ yum_command("-d0 -e0 -y#{expand_options(@new_resource.options)} versionlock add #{name}")
+ end
+
+ def unlock_package(name, version)
+ yum_command("-d0 -e0 -y#{expand_options(@new_resource.options)} versionlock delete #{name}")
+ end
+
+
private
def parse_arch(package_name)
diff --git a/spec/unit/provider/package/yum_spec.rb b/spec/unit/provider/package/yum_spec.rb
index e9aec933e2..23a28c6d37 100644
--- a/spec/unit/provider/package/yum_spec.rb
+++ b/spec/unit/provider/package/yum_spec.rb
@@ -785,6 +785,24 @@ describe Chef::Provider::Package::Yum do
end
end
+ describe "when locking a package" do
+ it "should run yum versionlock add with the package name" do
+ expect(@provider).to receive(:yum_command).with(
+ "-d0 -e0 -y versionlock add emacs"
+ )
+ @provider.lock_package("emacs", nil)
+ end
+ end
+
+ describe "when unlocking a package" do
+ it "should run yum versionlock delete with the package name" do
+ expect(@provider).to receive(:yum_command).with(
+ "-d0 -e0 -y versionlock delete emacs"
+ )
+ @provider.unlock_package("emacs", nil)
+ end
+ end
+
describe "when running yum" do
it "should run yum once if it exits with a return code of 0" do
@status = double("Status", :exitstatus => 0, :stdout => "", :stderr => "")