Chef infra 跨配方访问属性

Chef infra 跨配方访问属性,chef-infra,vagrant,Chef Infra,Vagrant,是否可以配置可跨配方访问的属性?如果是,如何进行?我已经为每个菜谱配置了属性,但是我想消除一些重要的重复 Chef的工作方式是,在聚合开始时,Chef迭代所有包含将在节点上运行的菜谱的菜谱(直接在运行列表上或通过include_recipe引用)。对于每个cookbook,厨师将读入存储在属性文件夹中的所有属性文件,并将属性添加到节点散列中 这里需要注意的重要一点是,属性与您正在执行的配方无关,所有配方都将看到加载的属性的相同视图 你的描述有点含糊不清,但据我所知,你有一本食谱,里面有一些食谱,

是否可以配置可跨配方访问的属性?如果是,如何进行?我已经为每个菜谱配置了属性,但是我想消除一些重要的重复

Chef的工作方式是,在聚合开始时,Chef迭代所有包含将在节点上运行的菜谱的菜谱(直接在运行列表上或通过
include_recipe
引用)。对于每个cookbook,厨师将读入存储在
属性
文件夹中的所有属性文件,并将属性添加到
节点
散列中

这里需要注意的重要一点是,属性与您正在执行的配方无关,所有配方都将看到加载的属性的相同视图

你的描述有点含糊不清,但据我所知,你有一本食谱,里面有一些食谱,你为每个食谱创建了一个相应的属性文件。在每个属性文件中,您都定义了相同的属性(例如,
default['myapp']['foo']=“blah”

这是不必要的,因为我在开始时描述了这个过程。在收敛时间,Chef将读取所有属性文件,而不管您运行的是什么菜谱。这意味着要加载的第二个(或第三个或第四个等)属性文件将只覆盖先前加载的属性文件设置的
节点['myapp']['foo']
属性

在这种情况下,通用模式是有一个
default.rb
属性文件,它定义了所有配方将使用的所有通用属性。如果需要,您可以将特定于配方/成分的属性移动到它们自己的属性文件中


在这种情况下需要注意的一点是,Chef按字母顺序加载属性文件。如果您的配方特定属性文件(例如
client.rb
)引用了
default.rb
中定义的属性之一,则您需要使用该指令,以便让Chef在
client.rb
之前加载
default.rb
,否则,
default.rb
中的所有属性仍将为零。

如何在烹饪书之间共享属性?