summaryrefslogtreecommitdiff
path: root/lib/chef/provider/package/yum.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/provider/package/yum.rb')
-rw-r--r--lib/chef/provider/package/yum.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/chef/provider/package/yum.rb b/lib/chef/provider/package/yum.rb
index 9048048b83..f67262ef6f 100644
--- a/lib/chef/provider/package/yum.rb
+++ b/lib/chef/provider/package/yum.rb
@@ -664,12 +664,16 @@ class Chef
@allow_multi_install = []
+ @extra_repo_control = nil
+
# these are for subsequent runs if we are on an interval
Chef::Client.when_run_starts do
YumCache.instance.reload
end
end
+ attr_reader :extra_repo_control
+
# Cache management
#
@@ -693,6 +697,10 @@ class Chef
raise ArgumentError, "Unexpected value in next_refresh: #{@next_refresh}"
end
+ if @extra_repo_control
+ opts << " #{@extra_repo_control}"
+ end
+
one_line = false
error = nil
@@ -848,6 +856,22 @@ class Chef
@allow_multi_install
end
+ def enable_extra_repo_control(arg)
+ # Don't touch cache if it's the same repos as the last load
+ unless @extra_repo_control == arg
+ @extra_repo_control = arg
+ reload
+ end
+ end
+
+ def disable_extra_repo_control
+ # Only force reload when set
+ if @extra_repo_control
+ @extra_repo_control = nil
+ reload
+ end
+ end
+
private
def version(package_name, arch=nil, is_available=false, is_installed=false)
@@ -995,6 +1019,23 @@ class Chef
@yum.reload
end
+ if @new_resource.options
+ repo_control = []
+ @new_resource.options.split.each do |opt|
+ if opt =~ %r{--(enable|disable)repo=.+}
+ repo_control << opt
+ end
+ end
+
+ if repo_control.size > 0
+ @yum.enable_extra_repo_control(repo_control.join(" "))
+ else
+ @yum.disable_extra_repo_control
+ end
+ else
+ @yum.disable_extra_repo_control
+ end
+
# At this point package_name could be:
#
# 1) a package name, eg: "foo"