【问题标题】:Vagrant and Berkshelf and Chef Solo: specifying specific recipe/cookbook versions?Vagrant、Berkshelf 和 Chef Solo:指定特定的食谱/食谱版本?
【发布时间】:2023-12-31 02:40:01
【问题描述】:

我正在与 Berkshelf 和 Chef Solo 一起使用 Vagrant。我有多个带有多个虚拟机的项目。我最近意识到,对于某些人来说,我需要使用“yum”cookbook 2.x 版本,而对于其他人来说,我需要使用“yum”cookbook 3.x 版本。我相信 Berkshelf 可以很好地安装两者,但我不知道如何在我的 Vagrantfile 中具体指定哪一个。

它是 Chef Solo 配置块中 JSON 的一部分吗?还是 add_recipe() 方法的参数?

我找不到任何好的参考。

TIA!

【问题讨论】:

  • 你有一个无法解决的依赖关系图。您需要升级食谱或选择不同的版本。
  • 谢谢,赛斯!我终于弄明白了。显然我可以在 Vagrant 文件的 chef solo config 的 json 部分中指定具体版本。

标签: chef-infra vagrant chef-solo berkshelf


【解决方案1】:

我想出了答案。我想我会把它贴在这里,因为我花了一段时间才弄明白......

在一个需要一些需要旧 yum 的依赖项的项目上:

config.vm.provision :chef_solo do |chef|
  chef.add_recipe 'yum'
  # ... other recipes
  chef.json = {
    yum: { version: '2.4.4' }
  }
end

在另一个需要一些需要最新 yum 的依赖项的项目上:

config.vm.provision :chef_solo do |chef|
  chef.add_recipe 'yum'
  # ... other recipes
  chef.json = {
    yum: { version: '3.1.4' }
  }
end

在我的第一个项目的 Berksfile 中:

site :opscode
cookbook 'yum', '= 2.4.4'

还有第二个项目的 Berksfile:

site :opscode
cookbook 'yum', '= 3.1.4'

它将两本食谱都放在 Berkshelf 食谱目录中,我可以在给定的 Vagrant 项目中使用它们。

我唯一不知道的是:在 chef.json 块中,版本只能是特定的还是可以包含与 Berksfile 中相同的选项?

【讨论】: