diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2018-03-13 12:20:57 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2018-03-15 18:03:30 -0700 |
commit | ae84b5fdde301541795d59bead22868541a1e823 (patch) | |
tree | ca40d35d79ad68d5a4354aa30b8d89d6d6e1dd37 | |
parent | ac266b80fe43900c14f145cb8e8c1c876ab88cd1 (diff) | |
download | chef-ae84b5fdde301541795d59bead22868541a1e823.tar.gz |
check for multipackage locking/unlocking properly
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r-- | lib/chef/provider/package.rb | 13 | ||||
-rw-r--r-- | lib/chef/provider/package/yum.rb | 8 |
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) |