在同一食谱中使用多个食谱

Using multiple recipes in same cookbook

我有一本包含四个食谱的厨师食谱。每个配方配置一个 Web 应用程序:

myCookbook
   |
   |_ _ recipes
       |_ _ default.rb
       |_ _ app1.rb
       |_ _ app2.rb
       |_ _ app3.rb
       |_ _ app4.rb

我已将此说明书配置为根据 default.rb 配方更新应用程序,该配方只是迭代其他网络应用程序配方并 运行 发送它们。该食谱由数据包中更新的网络应用程序版本启动。

因为我把所有的应用程序都放在一本食谱中,如果我想更新一个应用程序,那么我必须更新所有的应用程序。我可以手动覆盖 运行list 以仅部署一个应用程序,但是有没有办法 "knife diff"默认配方(或类似的东西)中的数据包仅运行已更新的网络应用程序版本的相应配方?

您必须使用本地副本自己实现差异以进行幂等性跟踪。总的来说,我会建议修改你的食谱,使其本身是幂等和收敛的。

你应该写自收敛的食谱而不是这个。

如果在这里使用外部配方(默认配方)的主要原因是为了避免在所有配方(更新应用程序的代码)上一遍又一遍地编写相同的代码,您应该尝试编写 library or a custom resource 将可供您的所有应用食谱使用。

在线 chef 文档提供了足够的信息,如果您有基本的 Ruby 知识,也很容易。