Chef:从shell环境变量中读取属性值

问题描述 投票:0回答:1

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

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

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

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

chef cookbook
1个回答
1
投票

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

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

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

有关阶段的厨师 - 客户的更多信息,请参阅chef-client overview

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.