1

当谈到 Chef / Berkshelf 并需要帮助和建议时,我感到非常困惑。

我发现/读到有一个关于 Berkshelf 的一些东西的下划线假设,对于新手来说,有一些灰色区域需要填充

让我试着解释一下:

我遵循了典型的 Chef 路径

在用户目录中创建 Chef-repo

C:\Users\itsmeofcourse\chef-repo

然后将其连接到内部 git-repo 并愉快地为 Windows 编写基本食谱并将所有内容上传到该 git-repo

就目前而言,每本食谱都存在于我的 chef-repo 中的“cookbook”文件夹下。

C:\Users\itsmeofcourse\chef-repo
                            /cookbook

然后我遵循了围绕社区食谱编写包装食谱的路径,所以它看起来像

client_iis - 取决于 department_iis - 取决于 global_iis - 取决于 iis - 社区食谱

这允许我们在我们的基础架构内的某些不同级别上进行 IIS 更改。

现在我觉得文档倒下了,每个人都在说把你的食谱移出“食谱”文件夹

所以我的理解是,“你的” chef-repo 将存在于 git-repo 中,但仅用于更改环境/数据包/角色/证书等子文件夹?然后食谱是单独的项目,正确与否?

你把你的食谱搬到哪里?你机器上的任何地方/你的用户%home%?Chef 如何知道这些存储在哪里,或者您是否必须修改“knife.rb”并指向某个目录?

所以看起来像

刀.rb cookbook_path ["c:/cookbooks"]

C:\Users\itsmeofcourse\chef-repo :github => repo_1

c:/cooksbooks
   /base  :github => repo_2
   /iis   :github => repo_3
   /sql   :github => repo_4
   /client_iis   :github => repo_
   /department_iis   :github => repo_3

我能问我错过了什么吗

或者你把一个berksfile放在我的厨师回购的根目录然后做什么?管理我的食谱文件夹中的所有内容?

我已阅读https://github.com/berkshelf/berkshelf/issues/535

请有人帮忙

4

1 回答 1

0

是的,这是正确的,您通常会将您的食谱移至单独的存储库。

我在阅读这篇文章时遇到了一个问题:http: //www.prashantrajan.com/posts/2013/06/leveling-up-chef-best-practices/和“每个食谱的单一回购”部分。通读全文,很好!

看起来你什么都没有错过。将您的食谱移出食谱目录,意味着为每个食谱创建单独的存储库,并使用顶级 Berksfile(在您的 chef-repo 的根目录中)依赖它们。

对于 web 应用程序(称为coolwebapp)的典型 vagrant+chef 存储库,我通常会有:

.
+-- cmp-cookbooks
|   +-- cmp-coolwebapp (this is only cookbook stored in this repo, and this repo exists because of this cookbook)
+-- data_bags
|   +-- users
|   |   +-- mysql.json
|   |   +-- os.json
|   |   +-- admins.json
|   +-- private_keys
|       +-- deployment.json
+-- environments
|   +-- production.rb
|   +-- staging.rb
|   +-- qa.rb
|   +-- integration.rb
|   +-- local.rb
+-- nodes (but this should not be stored in your repo I guess)
|   +-- ip_here.json
|   +-- other_ip_here.json
+-- Berksfile
+-- Vagrantfile

Berksfile 将包含:

cookbook "cmp-coolwebapp",   "~>0.3.0",  path: "./cmp-cookbooks/cmp-coolwebapp"
cookbook "cmp-provisioning", "~>0.7.0",  git: _priv_provisioning_cookbook_repo_
cookbook "cmp-role-db",      "~>0.7.0",  git: _priv_role1_cookbook_repo_
cookbook "cmp-role-www",     "~>0.8.0",  git: _priv_role2_cookbook_repo_
cookbook "cmp-role-devops",  "~>0.7.0",  git: _priv_role3_cookbook_repo_

“cmp”代表我们的公司名称。我们的食谱存储在私人仓库中,并单独维护。

例如,Cookbook cmp-role-www 将大部分社区食谱作为 Berksfile 中的依赖项,并将我们自己的 cmp-apache2、cmp-nginx、cmp-varnish 包装器食谱存储在其存储库中。

回答您的最后一个问题”“Chef 是如何知道这些存储在哪里的,还是您必须修改您的“knife.rb”并指向某个目录?”

如果您使用 Berkshelf 管理您的食谱依赖项,您可以从您喜欢的任何位置包含食谱:

cookbook "artifact",   path: "/Users/reset/code/artifact-cookbook"
cookbook "mysql",      git: "https://github.com/opscode-cookbooks/mysql.git", branch: "foodcritic"
cookbook "rightscale", git: "https://github.com/rightscale/rightscale_cookbooks.git", rel: "cookbooks/rightscale"

当您将几本公司食谱存储在一个存储库中时,最后一个非常有用。 http://berkshelf.com/ “来源选项”部分。

于 2014-11-16T15:59:35.067 回答