【问题标题】:Chef: reading attribute value from shell environment variablesChef:从 shell 环境变量中读取属性值
【发布时间】:2019-03-14 14:40:58
【问题描述】:

我正在尝试在厨师食谱的属性文件中读取环境变量的值。许多帖子都描述了我可以使用 ruby​​ 的 ENV[] 来实现我想要的。

我的属性文件看起来像这样

default['some_object']['some_attribute'] = ENV['SOME_ENV_VAR']

在运行配方时,它似乎会导致空字符串。有什么指点吗?

【问题讨论】:

    标签: chef-infra cookbook


    【解决方案1】:

    假设您描述的是正确的方法(不是),请注意您需要在执行chef-client的节点上设置环境变量。

    chef-client 执行,有几个阶段:

    • 编译阶段:所有配方都按照扩展运行列表指定的顺序加载。
    • 收敛阶段: 每个资源按照运行列表标识的顺序执行,然后按照每个资源在每个配方中列出的顺序执行。 ...每个操作都配置系统的特定部分。

    有关此阶段的 chef-client 的更多信息,请参阅chef-client overview

    环境变量的评估,即ENV['SOME_ENV_VAR'] 发生在编译阶段。你真正应该做的是使用json attribute

    您可以通过在 chef-client 中包含 --json-attributes(我强烈建议您访问文档,因为它包含示例)来提供自定义属性

    -j PATH, --json-attributes PATH 包含 JSON 数据的文件的路径。用于设置第一个客户端运行。对于使用选项 -i 的所有未来运行,属性预计将保留在厨师服务器中。

    您始终可以使用为您设置的环境变量来构建一个 json 结构,然后在执行时将其提供给 chef-client。

    【讨论】:

    • 其他一些进程已经为我设置了 env-var,因此我想使用这种方法。如果我这样做有什么问题?
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多