Chef:从 shell 环境变量中读取属性值
Chef: reading attribute value from shell environment variables
我正在尝试读取 chef cookbook 属性文件中环境变量的值。许多帖子都描述了我可以使用 ruby 的 ENV[] 来实现我想要的。
我的属性文件看起来像这样
default['some_object']['some_attribute'] = ENV['SOME_ENV_VAR']
虽然 运行 配方,它似乎导致空字符串。有什么指点吗?
假设你描述的是正确的方法(实际上不是),注意你需要在你执行的节点上设置环境变量chef-client
.
chef-client
执行,有几个阶段:
- 编译阶段:所有配方都按照扩展的运行列表指定的顺序加载。
- 收敛阶段:每个资源按照运行-列表确定的顺序执行,然后按照每个资源在每个配方中列出的顺序执行. ...每个操作都会配置系统的特定部分。
有关 chef-client 阶段的更多信息,请参阅 chef-client overview。
环境变量的评估,即 ENV['SOME_ENV_VAR']
发生在编译阶段。你真正应该做的是使用 :
you can provide custom attributes by including --json-attributes
(i strongly advise you to visit the documentation, since it holds examples) in chef-client
-j PATH, --json-attributes PATH
The path to a file that contains JSON data. Used to setup the first client run. For all the future runs with option -i the attributes are expected to be persisted in the chef-server.
您始终可以使用为您设置的环境变量来构造一个json结构,然后在您执行它时将其提供给chef-client。
我正在尝试读取 chef cookbook 属性文件中环境变量的值。许多帖子都描述了我可以使用 ruby 的 ENV[] 来实现我想要的。
我的属性文件看起来像这样
default['some_object']['some_attribute'] = ENV['SOME_ENV_VAR']
虽然 运行 配方,它似乎导致空字符串。有什么指点吗?
假设你描述的是正确的方法(实际上不是),注意你需要在你执行的节点上设置环境变量chef-client
.
chef-client
执行,有几个阶段:
- 编译阶段:所有配方都按照扩展的运行列表指定的顺序加载。
- 收敛阶段:每个资源按照运行-列表确定的顺序执行,然后按照每个资源在每个配方中列出的顺序执行. ...每个操作都会配置系统的特定部分。
有关 chef-client 阶段的更多信息,请参阅 chef-client overview。
环境变量的评估,即 ENV['SOME_ENV_VAR']
发生在编译阶段。你真正应该做的是使用
you can provide custom attributes by including
--json-attributes
(i strongly advise you to visit the documentation, since it holds examples) in chef-client
-j PATH, --json-attributes PATH
The path to a file that contains JSON data. Used to setup the first client run. For all the future runs with option -i the attributes are expected to be persisted in the chef-server.
您始终可以使用为您设置的环境变量来构造一个json结构,然后在您执行它时将其提供给chef-client。