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

Chef infra Chef:从shell环境变量读取属性值,chef-infra,cookbook,Chef Infra,Cookbook,我正在尝试读取chef cookbook属性文件中环境变量的值。许多帖子都描述了我可以使用ruby的ENV[]来实现我想要的 我的属性文件如下所示 default['some_object']['some_attribute'] = ENV['SOME_ENV_VAR'] 运行recipe时,它似乎会导致空字符串。有任何指针吗?假设您所描述的方法是正确的(事实并非如此),请注意,您需要在执行chef client的节点上设置环境变量 chef-client执行分为几个阶段: 编译阶段:按照扩

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

我的属性文件如下所示

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

运行recipe时,它似乎会导致空字符串。有任何指针吗?

假设您所描述的方法是正确的(事实并非如此),请注意,您需要在执行
chef client
的节点上设置环境变量

chef-client
执行分为几个阶段:

  • 编译阶段:按照扩展运行列表指定的顺序加载所有配方
  • 收敛阶段:每个资源按照运行列表确定的顺序执行,然后按照每个配方中列出的每个资源的顺序执行。。。每个操作配置系统的特定部分
有关该阶段的chef client的更多信息,请参阅

环境变量的计算,即
ENV['SOME_ENV_VAR']
在编译阶段进行。您真正应该做的是使用:

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

-j路径,--json属性路径
包含JSON数据的文件的路径。用于设置第一次客户端运行。对于使用选项-i的所有未来运行,这些属性都应持久保存在chef服务器中


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

其他一些进程已经在为我设置env var,因此我希望使用这种方法。如果我这样做有什么不对?