【问题标题】:Chef - Read external properties in chef recipe.rb filesChef - 读取 chef recipe.rb 文件中的外部属性
【发布时间】:2019-06-07 13:00:15
【问题描述】:

我是 Chef 部署工具的新手,想将它用于我的一个用例。我能够调用 POST 调用来休息端点。但是使用硬编码的 url 和 json 数据如下所示:

recipe/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 中实现这一点?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

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

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

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

    最好在收敛阶段进行,您可以使用ruby_block 和\或http_request 资源来实现。

    如果您想在您的食谱中添加一个静态文件,请将其放在COOKBOOK_NAME/files/default 中并随意阅读。请参阅cookbook_file 资源。

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2020-06-28
      相关资源
      最近更新 更多