gpt4 book ai didi

chef-infra - 如何获取要先加载的当前配方属性文件?

转载 作者:行者123 更新时间:2023-12-04 10:25:30 28 4
gpt4 key购买 nike

我有节点的配方和属性文件。例如。本地主机和 linode。我试图在默认或其他属性之前先加载属性文件(并设置主机名等)。例子:

属性/本地主机.rb:

default[:hostname] = "localhost"
default[:nginx][:hostname] = 'mbdev-localhost'

include_attribute 'mbdev::common'

属性/common.rb
default[:nginx][:website1][:url] = "subdomain." + default[:nginx][:hostname]

食谱/本地主机.rb
include_recipe 'mbdev::default'

运行列表:
'mbdev::localhost'

然而,似乎 include_attribute 使 'common' 属性首先加载。所以 nginx-hostname 还没有设置......

我得到的顺序是:
1) 加载属性/default.rb
2) 加载attributes/common.rb
3) 关于 + 的错误

如何在 common.rb 之前加载 localhost.rb?

最佳答案

默认情况下,属性文件按字母顺序加载。这曾经在任何地方都不是完全一致的,但在 CHEF-2903 中得到了修复。 .

因此,您的 attributes/common.rb之前加载 attributes/localhost.rb仅仅是因为它按字母顺序出现得更早。该规则的一个异常(exception)是 attributes/default.rb它总是在说明书中的任何其他属性文件之前加载。

一般来说,属性文件的加载顺序如下:

  • 按字母顺序加载所有食谱依赖项的属性
  • 负载 attributes/default.rb (是否存在)
  • 按文件名的字母顺序加载任何其他属性文件

  • 您可以使用 include_attribute 比正常加载更早加载属性文件。 ,但你不能让它稍后加载。

    这个逻辑在厨师中是硬编码的,不能改变。不过,您可以执行一些解决方法:
  • 您可以以加载顺序不再重要的方式编写属性文件
  • 您可以以与上述逻辑一致的方式命名配方/属性
  • 您可以强制再次加载属性文件:
    node.from_file(run_context.resolve_attribute("cookcook_name", "attribute_file"))
  • 关于chef-infra - 如何获取要先加载的当前配方属性文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19628418/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com