是否可以配置可跨菜谱访问的属性?如果是,怎么做?我已经为每个菜谱配置了属性,但是我想消除大量重复。
发布于 2013-09-23 16:58:52
Chef的工作方式是,在收敛开始时,Chef遍历所有具有将在节点上运行的菜谱的食谱(直接在运行列表上或通过include_recipe引用)。对于每个菜谱,厨师将读取存储在attributes文件夹中的所有属性文件,并将属性添加到node哈希中。
这里要注意的是,属性与正在执行的菜谱无关,所有菜谱都将看到加载的属性的相同视图。
您的描述有点模糊,但据我所知,您有一本包含几个菜谱的食谱,您正在为每个菜谱创建一个相应的属性文件。在每个属性文件中,您都要重新定义相同的属性(例如,default['myapp']['foo'] = "blah")。
这是不必要的,因为我在开始时描述了这个过程。在会聚时,Chef将读取所有属性文件,而不管您运行的是什么菜谱。这意味着要加载的第二个(或第三个或第四个)属性文件将简单地覆盖由先前加载的属性文件设置的node['myapp']['foo']属性。
在这种情况下,常见的模式是有一个default.rb属性文件,该文件定义了所有菜谱将使用的所有公共属性。如果需要,您可以将食谱/组件特定的属性移动到它们自己的属性文件中。
在这种情况下需要注意的一件事是,主厨按字母顺序加载属性文件。如果您的菜谱特定属性文件(例如client.rb)引用了default.rb中定义的属性之一,那么您将需要使用include_attribute指令来让主厨在client.rb之前加载default.rb,否则来自default.rb的所有属性仍然为零。
https://stackoverflow.com/questions/18961026
复制相似问题