如何在Vagrant中使用新的opscode repo?

The*_*ohn 3 chef-infra vagrant

我前一段时间使用Vagrant并且能够使用以下内容:

config.vm.provision :chef_solo do |chef|
chef.recipe_url = 'https://github.com/opscode/cookbooks/tarball/master'
chef.add_recipe 'nginx'
chef.add_recipe 'mysql'
chef.add_role 'web'

# You may also specify custom JSON attributes:
# chef.json = { :mysql_password => '' }
end
Run Code Online (Sandbox Code Playgroud)

现在似乎已经弃用了.我怎么用新的回购?

jti*_*man 14

首先,我的建议是不要直接在Git的主分支上使用任何人的烹饪书.如果食谱库的个体作者/维护者 - 个人或单片 - 为每个"版本"都有Git标签,请使用它.否则,请使用您知道适用于您的基础结构的特定提交.虽然GitHub是一个用于共享代码的有用站点,但请务必记住这些是开发存储库.为了比较,大多数人不会将库核心的主分支用于他们的应用程序,他们会使用该库的发布版本(无论是gem,cpan模块,包还是其他).

其次,Opscode的烹饪书已经发布了经过测试的版本,以确保他们按照README所说的那样做.这些版本发布到Chef Community Site.虽然他们在GitHub上存储库,但我们建议使用该站点的版本.

要从本地系统获取烹饪书,有多种工具可支持本地开发工作流程.在内部,Opscode正在使用Berkshelf,就像社区中的许多人一样.它是一个相当完整的工作流管理工具,包含类似于RubyGems Bundler的依赖解析器.Berkshelf还与Vagrant集成,这意味着您的"berksfile"中的所有烹饪书都会被复制到Vagrant机器上,以便在Chef运行中使用.

chef-repo顶层的样本Berksfile看起来像这样;

site :opscode
cookbook "nginx"
cookbook "mysql"
cookbook "my_application", :git => "https://git.example.com/cookbooks/my_application.git"
Run Code Online (Sandbox Code Playgroud)

然后berks install用来下载食谱.Berkshelf也将使用cookbook中的元数据来解决它们的依赖关系.这将使用社区站点API下载nginx和mysql cookbook,然后从内部Git存储库中检索"my_application"cookbook.然后,在vagrant文​​件中使用berkshelf,将它放在vagrantfile的顶部;

require 'berkshelf/vagrant'
Run Code Online (Sandbox Code Playgroud)

然后当你"流浪"时,如果你正在使用Chef Solo,berkshelf会将所有的食谱复制到Vagrant机器中.如果您正在使用Chef Client/Server,那么您可以使用berks upload将所有cookbook上传到Server,并且vagrant中的client provisioner将从服务器下载.

Jamie Winsor是Riot Games的Berkshelf的主要开发人员之一,他撰写了一份详尽的指南.

Berkshelf的另一个工具是Librarian Chef.它纯粹是一个依赖管理工具,而不是一个工作流工具.它"接管"你的cookbooks目录管理那里的所有内容,你的自定义菜谱进入site-cookbooks.然后,您将Vagrant与solo provisioner一样正常使用,或者使用客户端/服务器knife cookbook upload.

最后,knife随着Chef Client随附,RubyGem有一个插件,cookbook site install.虽然这是由Opscode作为Chef gem的一部分支持和维护的,但许多人正在将他们的工作流程转移到使用Berkshelf或Librarian.该厨师文档有关于这个插件的更多信息.

如果您还有其他问题,那么#chef irc频道Chef邮件列表是提问和讨论工作流程的好地方.