如何在 Chef bootstrap 期间更新服务器包,但在随后的 Chef 运行期间不更新?

How to update server packages during Chef bootstrap, but not during subsequent Chef runs?

仅当节点被 bootstrap 执行,但在随后的 Chef 运行 期间,在 Chef 中 运行 特定命令的最佳方式是什么?例如,如果我想在第一个 Ubuntu 节点被 bootstrap 时 运行 apt-get upgrade,最简单的方法是什么?

一个解决方案可能是在任务完成后写入文件,并且 运行 任务 only_if 该文件不存在 - 但这有 运行为已有此配方的现有节点设置任务。唯一的选择是覆盖默认的 bootstrap 模板吗?

通常你可能会使用文件幂等性,但你也可以检查节点属性。特别是对于这种情况,您可能希望 touch 所有现有节点上的跟踪文件,knife ssh '*:*' 'touch /whatever'.