diff options
Diffstat (limited to 'lib/chef/provider/package/yum.rb')
-rw-r--r-- | lib/chef/provider/package/yum.rb | 41 |
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" |