1

我有一个 Chef 项目,在本地与 Vagrant 合作,效果非常好。我正在使用librarian-chef,这意味着我可以像这样指定我的依赖项Cheffile

site 'http://community.opscode.com/api/v1'
cookbook 'jenkins'

然后当我运行时,它会将它所依赖的所有食谱拉到一个librarian-chef install目录中。jenkinscookbooks

还有另一个目录,site-cookbooks,这是我编写所有我自己的自定义食谱和食谱的地方。

在 中Vagrantfile,您可以告诉它查看食谱的两种不同路径:

config.vm.provision "chef_solo" do |chef|
  chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
  # snip
end

当我运行时,这非常有效vagrant up。但是,它似乎不能很好地与 AWS OpsWorks 配合使用——因为这要求所有说明书都位于 Chef 存储库的顶层。

那么我的问题是:在不包括我的存储库顶层的所有依赖项的情况下,将 Chef 与 OpsWorks 一起使用的最佳方式是什么?

4

2 回答 2

1

OpsWorks 不能很好地配合为 Chef 创建的许多工具。我在它出现后不久就尝试使用它并放弃了它(当时 OpsWorks 使用的是 Chef 9)。

我建议您要么从 OpsWorks 转到 Enterprise Chef,要么尝试以下方法:

1. 为你的食谱创建一个单独的仓库

将所有食谱保存在单独的存储库中。如果您希望它成为更大存储库的一部分,则可以将其包含为git submodule。Git 子模块通常是一件坏事,但食谱是一个独立的实体,可以独立于项目的其余部分存在,因此在这种情况下它实际上工作得很好。

要在另一个存储库中添加食谱存储库,请使用:

git submodule add git://github.com/my/cookbooks.git ./cookbooks

2. 将您的食谱与社区食谱放在一起

您可以将食谱克隆到您的存储库中,将它们添加为子模块,或者尝试使用 librarian-chef/Berkshelf 来管理它们。您可以尝试使用此方法,它应该与图书管理员一起使用:https ://sethvargo.com/using-amazon-opsworks-with-berkshelf/

于 2014-03-25T12:30:07.373 回答
1

截至最近,OpsWorks 支持 Chef 11.10 和 Berkshelf,为您提供了一种更好的方式来管理说明书依赖项。

于 2014-04-09T10:16:59.893 回答