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

Why can I not install a package from a repo I just added using Chef?

我在厨师食谱中有以下内容:

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 配置服务器后,安装了错误版本的 Subversion(来自其他 yum 存储库的旧版本)。我可以立即 运行 yum list subversion 并查看可用的正确版本。

如果我手动执行上述操作(创建文件,运行 a 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_repository 处理 Chef 缓存和 Yum 缓存的刷新。有很多不同的选项可以按照您需要的方式设置存储库。可以在 chef-cookbooks/yum GitHub repository.

上找到文档