厨师 – 如何使用Vagrant的新opscode回购?

我前一段时间使用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

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

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

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

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

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

site :opscode
cookbook "nginx"
cookbook "mysql"
cookbook "my_application", :git => "https://git.example.com/cookbooks/my_application.git"

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

require 'berkshelf/vagrant'

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

Jamie Winsor是Riot Games的Berkshelf的主要开发人员之一,他写了一篇thorough guide.

Berkshelf的另一个工具是Librarian Chef.它纯粹是一个依赖管理工具,而不是一个工作流工具.它“接管”您的烹饪书目录,管理那里的所有内容,您的定制食谱进入网站烹饪书.然后使用Vagrant和正常的独奏配置器,或者使用刀库菜单上传的客户端/服务器.

最后,与Chef Client RubyGem一起提供的刀具有一个插件,即cookbook网站安装.虽然这是由Opscode作为Chef gem的一部分支持和维护的,但许多人正在将他们的工作流程转移到使用Berkshelf或Librarian. Chef documentation has more information on this plugin.

如果您还有其他问题,#chef irc channelChef mailing list是提问和讨论工作流程的好地方.

转载注明原文:厨师 – 如何使用Vagrant的新opscode回购? - 代码日志