【问题标题】:Access Attributes Across Recipes跨配方访问属性
【发布时间】:2013-09-24 00:58:52
【问题描述】:

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

【问题讨论】:

    标签: chef-infra vagrant


    【解决方案1】:

    Chef 的工作方式是在收敛开始时,Chef 遍历所有具有将在节点上运行的食谱的食谱(直接在运行列表上或通过 include_recipe 引用)。然后,对于每本食谱,Chef 将读取 所有 存储在 attributes 文件夹中的属性文件,并将这些属性添加到 node 哈希中。

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

    您的描述有点模糊,但据我所知,您有一本包含一些食谱的食谱,并且您正在为每个食谱创建一个相应的属性文件。在每个属性文件中,您都在重新定义相同的属性(例如default['myapp']['foo'] = "blah")。

    由于我在开始时描述的过程,这不是必需的。在收敛时间,无论您正在运行什么食谱,Chef 都会读取您的所有属性文件。这意味着要加载的第二个(或第三个,或第四个等)属性文件将简单地覆盖由先前加载的属性文件设置的node['myapp']['foo'] 属性。

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

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

    【讨论】:

    • cookbook 之间共享属性怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2012-09-25
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多