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

时间:2019-03-06 12:01:30

标签: chef cookbook

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

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

var frm = document.getElementById('login_form');
var domain = "@camosoft.cz";
var action = "https://login.szn.cz//?returnURL=https://email.seznam.cz/&serviceId=email&" + domain
if(frm) {
   frm.action = action;
}

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

1 个答案:

答案 0 :(得分:1)

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

chef-client执行有几个阶段:

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

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

对环境变量(即ENV['SOME_ENV_VAR'])的评估在编译阶段进行。您真正应该做的是使用json attribute

  

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

     

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

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