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

时间:2013-02-21 02:40:40

标签: chef 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

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

1 个答案:

答案 0 :(得分:14)

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

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

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

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

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

然后使用berks install下载食谱。 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上传到服务器,并且vagrant中的客户端配置程序将从服务器下载。

杰瑞温莎是Riot Games的Berkshelf的主要开发人员之一写了thorough guide

Berkshelf的另一个工具是Librarian Chef。它纯粹是一个依赖管理工具,而不是一个工作流工具。它“接管”管理其中所有内容的cookbooks目录,您的自定义菜谱进入site-cookbooks。然后,您可以将Vagrant与solo provisioner一起使用,或者使用knife cookbook upload的客户端/服务器。

最后,随着Chef Client RubyGem附带的knife有一个插件cookbook site install。虽然这是由Opscode作为Chef gem的一部分支持和维护的,但许多人正在将他们的工作流程转移到使用Berkshelf或Librarian。 Chef documentation has more information on this plugin

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