厨师:从外壳环境变量读取属性值



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

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

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

在运行食谱时,它似乎会导致空字符串。任何指针?

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

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

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

有关该阶段的厨师 - 客户的更多信息,请参见厨师 - 客户概述。

评估您的环境变量,即ENV['SOME_ENV_VAR']发生在汇编阶段。您应该真正做的是使用JSON属性:

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

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

您始终可以使用设置的环境变量来构建JSON结构,然后在执行它时将其馈送给厨师 - client。

最新更新