首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨Recipe的访问属性

跨Recipe的访问属性
EN

Stack Overflow用户
提问于 2013-09-23 13:50:27
回答 1查看 3.4K关注 0票数 3

是否可以配置可跨菜谱访问的属性?如果是,怎么做?我已经为每个菜谱配置了属性,但是我想消除大量重复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的所有属性仍然为零。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18961026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档