diff options
author | Eike Waldt <waldt@b1-systems.de> | 2016-09-29 15:24:54 +0200 |
---|---|---|
committer | Eike Waldt <waldt@b1-systems.de> | 2016-09-29 15:24:54 +0200 |
commit | 5977d0b11323ca39ff81f2ad4f8ff1e229863039 (patch) | |
tree | ecd884536de64e65b801da22e758313edb17e1ee | |
parent | 45a0e9b565bf9401e59e99e7cc94414fe93427b2 (diff) | |
download | chef-5977d0b11323ca39ff81f2ad4f8ff1e229863039.tar.gz |
added locking for yum
-rw-r--r-- | lib/chef/provider/package/yum.rb | 22 | ||||
-rw-r--r-- | spec/unit/provider/package/yum_spec.rb | 18 |
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 => "") |