chef-infra - Chef:从 shell 环境变量中读取属性值
问题描述
我正在尝试在厨师食谱的属性文件中读取环境变量的值。许多帖子都描述了我可以使用 ruby 的 ENV[] 来实现我想要的。
我的属性文件看起来像这样
default['some_object']['some_attribute'] = ENV['SOME_ENV_VAR']
在运行配方时,它似乎导致空字符串。任何指针?
解决方案
假设您描述的是正确的方法(不是),请注意您需要在执行的节点上设置环境变量chef-client
。
chef-client
执行,有几个阶段:
- 编译阶段:所有配方按扩展运行列表指定的顺序加载。
- 收敛阶段:每个资源按照运行列表标识的顺序执行,然后按照每个资源在每个配方中列出的顺序执行。...每个操作都配置系统的特定部分。
有关此阶段的 chef-client 的更多信息,请参阅chef-client 概述。
您的环境变量的评估,即ENV['SOME_ENV_VAR']
发生在编译阶段。你真正应该做的是使用json 属性:
--json-attributes
您可以通过在 chef-client 中包含(我强烈建议您访问文档,因为它包含示例)来提供自定义属性
-j PATH, --json-attributes PATH
包含 JSON 数据的文件的路径。用于设置第一个客户端运行。对于使用选项 -i 的所有未来运行,预计属性将保留在厨师服务器中。
您始终可以使用为您设置的环境变量来构建 json 结构,然后在执行时将其提供给 chef-client。
推荐阅读
- mongodb - 嵌入文档中的查询
- reactjs - Firestore 将部分数据存储到文档中
- unity3d - 在 Unity UI 中使用小规模文本网格时的文本大小问题
- java - 从 java 扩展时,静态函数在 kotlin 中不可见
- php - 并行 Ajax 调用的奇怪响应时间(PHP/Laravel 后端)
- python - 如何使用 python 控制 Windows 中的特定 USB 端口?
- rest-assured - 使用嵌套对象访问 jsonpath 元素
- json - 如何在 jq 中将嵌套的 json 转换为平面 csv
- google-app-engine - 如何在 App Engine Flex 上安装 Redis Slave
- vba - VBA:从定义的单元开始循环