首页 > 解决方案 > 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-infra

解决方案


chef 语法(recipe dsl)在 ruby​​ 之上运行。因此,您可以利用 ruby​​ 的力量来动态地 - 用厨师的术语来说,您可以在编译阶段收敛阶段进行

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

有关此阶段的 chef-client 的更多信息,请参阅chef-client 概述

最好在收敛阶段做到这一点,你可以使用ruby_blockand\orhttp_request资源来实现它。

如果你想在你的食谱中有一个静态文件,然后把它放在里面COOKBOOK_NAME/files/default并随意阅读。见cookbook_file资源。


推荐阅读