Chef infra 为什么我不能从我刚刚使用Chef添加的repo安装软件包?

Chef infra 为什么我不能从我刚刚使用Chef添加的repo安装软件包?,chef-infra,Chef Infra,我的厨师食谱如下: cookbook_file '/etc/yum.repos.d/wandisco-svn.repo' do source 'wandisco-svn.repo' end execute 'yum clean all' package 'subversion' do action :install end 在使用Chef配置服务器后,从其他yum repos安装了错误版本的Subversion。我可以立即运行yum-list-subversion并查看是否提供了正

我的厨师食谱如下:

cookbook_file '/etc/yum.repos.d/wandisco-svn.repo' do
  source 'wandisco-svn.repo'
end

execute 'yum clean all'

package 'subversion' do
  action :install
end
在使用Chef配置服务器后,从其他yum repos安装了错误版本的Subversion。我可以立即运行yum-list-subversion并查看是否提供了正确的版本

如果我手动创建上述文件,运行yum clean all并运行yum install subversion,则会安装正确的版本


为什么上面的代码不能正常工作?

Chef将yum软件包数据库缓存在内存中,以加快配方执行。您可以使用以下方法刷新它:

yum_package 'subversion' do
  flush_cache before: true
end
而不是现有的包资源。

指出了代码的问题。您还可以通过使用yum_repository使Chef知道您正在添加存储库来解决此问题,而不是向文件系统添加任意文件并执行任意命令:

yum_repository 'wandisco-svn' do
  description 'Wandisco SVN Repo'
  baseurl 'http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$basearch/'
  gpgcheck false
  enabled true
end

package 'subversion' do
  action :install
end

默认情况下,yum_存储库同时处理Chef缓存和yum缓存的刷新。有许多不同的选项可以按您需要的方式设置存储库。文档可在上找到。

我感谢您的回答,我认为您是对的。不幸的是,在我的现实世界中,我不得不放弃包含包调用的烹饪书,转而使用yum\u包。我将研究是否有其他方法来清除Chef's yum cache inline,这在我的情况下会更好。感谢您在我的简化示例中正确识别了问题,谢谢。我已经开始了关于这个问题的元对话: