chef-infra - Chef - 读取 chef recipe.rb 文件中的外部属性
问题描述
我是 Chef 部署工具的新手,想将它用于我的一个用例。我能够调用 POST 调用来休息端点。但是使用硬编码的 url 和 json 数据,如下所示:
配方/default.rb
template '/etc/response.txt' do
owner "root"
group "root"
mode "0644"
source "response.erb"
variables({
response:Chef::HTTP.new('https://abc.om/').post('/api/v1/something',
{ "data1": "value1", "data2": "value2"},
{'Accept'=> 'application/json', 'Content-Type'=>'application/json'})
})
end
我想使用 url、json 和其他请求参数的动态值。我希望它被外部化,例如在环境文件中(我们在 java Web 应用程序中这样做的方式),以便在节点上运行 chef-client 之前,用户可以提供请求参数的值。我们如何在厨师中实现这一目标?
解决方案
chef 语法(recipe dsl)在 ruby 之上运行。因此,您可以利用 ruby 的力量来动态地 - 用厨师的术语来说,您可以在编译阶段或收敛阶段进行:
- 编译阶段:所有配方按扩展运行列表指定的顺序加载。
- 收敛阶段:每个资源按照运行列表标识的顺序执行,然后按照每个资源在每个配方中列出的顺序执行。...每个操作都配置系统的特定部分。
有关此阶段的 chef-client 的更多信息,请参阅chef-client 概述。
最好在收敛阶段做到这一点,你可以使用ruby_block
and\orhttp_request
资源来实现它。
如果你想在你的食谱中有一个静态文件,然后把它放在里面COOKBOOK_NAME/files/default
并随意阅读。见cookbook_file
资源。
推荐阅读
- image-processing - 如果我改变相机的高度,是否需要相机校准
- c - 示例应用程序 - 客户端没有证书
- awk - 在 awk 中赋值之前的变量评估
- python-3.x - 链表,跳过每 n 个用户输入
- javascript - 如何接受来自 Node.js web application.js 的 POST 请求并返回响应?
- wpf - 如何从另一个资源设置 WPF 按钮 TextBlock 样式?
- reactjs - React - 循环:将数据传递给 Modal 组件
- database - 数据库中的图片字段
- amazon-s3 - 从 Datalake 构建 OLTP 数据库?
- php - 函数php的参数太少