1

我已经阅读了 Chef 文档并了解了食谱、食谱和 run_lists 是什么,但仍然发现很难决定如何将项目组织成食谱、食谱和run_lists。

这些之间的概念差异是什么?在什么情况下,我会使用除了 1 份食谱和 1 份食谱之外的东西?(我在网上找到的大多数示例/教程只有 1 个食谱和 1 个食谱)

例子

我正在尝试制作一个 Chef 项目来启动和运行 webapp。具体来说,我想:

  1. 安装 JDK 1.8、Tomcat 7 和 Postgres 9.3
  2. 使用特定的数据目录启动 Postgres
  3. 配置 Postgres(创建数据库、创建超级用户等...)
  4. context.xml文件放入Tomcat
  5. 启动 Tomcat

这些都应该写进一本食谱吗?

这些步骤中的每一个都应该对应一个单独的配方吗?

如果它们都进入 1 个配方,那么为什么run_lists 有用?


免责声明:我主要考虑将 Chef 与 一起使用knife-solo,所以我的困惑可能是由于描述典型部署的文档(例如,具有许多节点的主节点),而我所关心的只是在特定机器上运行我的食谱。

4

1 回答 1

1

食谱和食谱是您分离关注点和组织代码的方法。将您的应用程序组件分解为单独的食谱或食谱将使其更具可读性、可测试性和可维护性。

代码重用是另一个原因。假设您的组织想要构建一本 tomcat 食谱并在团队之间共享。然后其他团队可以将其包含在他们的运行列表中以重用代码。将食谱中的一个食谱与许多其他与 tomcat 无关的食谱共享会更加困难。

随着您开始发展您的基础设施,您可能还希望将 Tomcat 和 postgres 移动到不同的服务器上。让他们分开会让这更容易。

这些都应该写进一本食谱吗?

您使用 chef-solo 和一台服务器的用例,您可以保持简单并将其放入一本食谱中。

这些步骤中的每一个都应该对应一个单独的配方吗?

是的。看看下面的例子。如果它们开始觉得太复杂,可以很容易地将它们移到单独的食谱中。

如果它们都进入 1 个配方,那么为什么run_lists有用?

Arun_list可以拥有您的utilitiesappdatabase食谱。通过这种方式,您可以与可能与您的应用程序无关的其他服务器共享您的utilities或食谱。database

这是一个与您的用例非常相似的示例,其中所有内容都在一本食谱中,堆栈的每个部分都有单独的食谱。这些可以很容易地分解成食谱。https://github.com/erichelgeson/grails-app-server/tree/master/chef-repo/cookbooks/grailsapp/recipes

于 2015-08-02T18:45:30.350 回答