2013-09-23 59 views
3

是否可以配置跨配方访问的属性?如果是,如何?我为每个配方配置了属性,但是我想消除重复的重复。跨配方访问属性

回答

4

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的所有属性仍然会无。

+0

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