Chef infra 当厨师长数据包发生变化时做些什么

Chef infra 当厨师长数据包发生变化时做些什么,chef-infra,chef-recipe,Chef Infra,Chef Recipe,当Chef数据包中的值发生变化时,是否有办法执行某些操作 假设一个数据包看起来像这样 { "data": { "version": "1.0.12-SNAPSHOT" } } 它变成了这个 { "data": { "version": "1.0.13" } } 厨师长资源是否有办法“订阅”此更改或“通知”资源此更改?常见的解决方案不是订阅数据包中的更改,而是明智地处理更改结果 您似乎描述了要安装在那里的软件版本。因此,明智的方法

当Chef数据包中的值发生变化时,是否有办法执行某些操作

假设一个数据包看起来像这样

{
    "data": {
        "version": "1.0.12-SNAPSHOT"
    }
}
它变成了这个

{
    "data": {
        "version": "1.0.13"
    }
}

厨师长资源是否有办法“订阅”此更改或“通知”资源此更改?

常见的解决方案不是订阅数据包中的更改,而是明智地处理更改结果

您似乎描述了要安装在那里的软件版本。因此,明智的方法是在每次厨师运行期间执行以下步骤:

  • 检查当前安装的软件版本是否与数据包中当前定义的版本相同
  • 如果匹配,则不执行任何操作
  • 如果不同,请更新软件
这样,您就不需要任何实际的发布/订阅体系结构,只需在常规的chef运行期间处理所有事情


事实上,这种通用方法是如何处理厨师工作中的所有提供者:检查当前状态,如果它与配方中定义的预期状态不同,则进行调整。

使用开源厨师服务器或企业厨师?我使用的是企业厨师。那么这不是一个明确的否。我不知道,如果您已经可以在enterprise chef中的数据包上载之类的事件上触发推送作业。但是这样的一个结果可能会触发主厨-客户。好的,我明白了。是否有一种“厨师”方式来记录节点上安装了哪些软件,或者您必须烘焙自己的解决方案才能做到这一点?我可以想一些事情,比如写一个包含版本的文件,然后从中读取……或者对流程进行grep以获得版本……这两个听起来都有点问题……想知道是否有chef方法?如果您使用“普通”软件包安装软件,chef附带了一些资源。如果您自己滚动,您可能需要知道版本存储在磁盘上的什么位置,并为此编写一个提供程序。不过这有点先进。