在另一本食谱中重复使用一本食谱的输出

Re-using the output of one cookbook in another cookbook

假设我有 2 本食谱,A 和 B,它们都是在 AWS EC2 实例上执行的运行列表的一部分。第一本食谱 A 执行一些代码并生成一个值并将其存储在 node.run_state['pass'] 变量中。我在食谱 B 中需要这个值,所以我可以直接在食谱 B 中重新使用这个值,因为它是在同一个节点上执行的。我无法在厨房中测试场景,因为食谱 A 由于某些依赖关系在厨房中失败。我需要直接在 EC2 中尝试这个,但在尝试之前需要先了解一下。 Chef新手,请帮忙理解

是的,您可以从不同的食谱中读取和写入节点属性和 run_state,以便在它们之间共享一些信息。但您需要记住:

  1. 在 运行 列表中,食谱 A 必须在食谱 B 之前 运行,或者食谱 B 的食谱中必须有 include_recipe 'A'
  2. Chef 运行 中有 2 个阶段:编译和执行。首先编译阶段在两本食谱中执行,然后是执行阶段。因此,您必须确保在 B 中读取 run_state 变量之前,您确实在 A 中写入了该变量。

有时,通过查看配方 'A' 中的 node.run_state 属性的输出,您尝试在使用和不使用惰性修饰符。

log 'foo' do
  message "node.run_state['foo']: #{node.run_state['foo']}"
  level :info
end
log 'lazy foo' do
  message lazy "{ node.run_state['foo']: #{node.run_state['foo']} }"
  level :info
end