summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2018-03-13 12:20:57 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2018-03-15 18:03:30 -0700
commitae84b5fdde301541795d59bead22868541a1e823 (patch)
treeca40d35d79ad68d5a4354aa30b8d89d6d6e1dd37
parentac266b80fe43900c14f145cb8e8c1c876ab88cd1 (diff)
downloadchef-ae84b5fdde301541795d59bead22868541a1e823.tar.gz
check for multipackage locking/unlocking properly
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r--lib/chef/provider/package.rb13
-rw-r--r--lib/chef/provider/package/yum.rb8
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb
index 9bfe94d5d0..1b2b6d7659 100644
--- a/lib/chef/provider/package.rb
+++ b/lib/chef/provider/package.rb
@@ -1,6 +1,6 @@
#
# Author:: Adam Jacob (<adam@chef.io>)
-# Copyright:: Copyright 2008-2017, Chef Software Inc.
+# Copyright:: Copyright 2008-2018, Chef Software Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -220,6 +220,11 @@ class Chef
end
def action_lock
+ packages_locked = if respond_to?(:packages_all_locked?)
+ packages_all_locked?(Array(new_resource.package_name), Array(new_resource.version))
+ else
+ package_locked(new_resource.package_name, new_resource.version)
+ end
unless package_locked(new_resource.package_name, new_resource.version)
description = new_resource.version ? "version #{new_resource.version} of " : ""
converge_by("lock #{description}package #{current_resource.package_name}") do
@@ -234,6 +239,11 @@ class Chef
end
def action_unlock
+ packages_locked = if respond_to?(:packages_all_unlocked?)
+ packages_all_unlocked?(Array(new_resource.package_name), Array(new_resource.version))
+ else
+ package_locked(new_resource.package_name, new_resource.version)
+ end
if package_locked(new_resource.package_name, new_resource.version)
description = new_resource.version ? "version #{new_resource.version} of " : ""
converge_by("unlock #{description}package #{current_resource.package_name}") do
@@ -247,6 +257,7 @@ class Chef
end
end
+ # for multipackage just implement packages_all_[un]locked? properly and omit implementing this API
def package_locked(name, version)
raise Chef::Exceptions::UnsupportedAction, "#{self} has no way to detect if package is locked"
end
diff --git a/lib/chef/provider/package/yum.rb b/lib/chef/provider/package/yum.rb
index 4545adb88f..3ce475efe0 100644
--- a/lib/chef/provider/package/yum.rb
+++ b/lib/chef/provider/package/yum.rb
@@ -181,8 +181,12 @@ class Chef
end
end
- def package_locked(name, version)
- name.all? { |n| locked_packages.include? n }
+ def packages_all_locked?(names, versions)
+ names.all? { |n| locked_packages.include? n }
+ end
+
+ def packages_all_unlocked?(names, versions)
+ !names.any? { |n| locked_packages.include? n }
end
def version_gt?(v1, v2)