【问题标题】:Ruby operations on template variables - Chef模板变量上的 Ruby 操作 - Chef
【发布时间】:2017-07-05 09:20:06
【问题描述】:

我在我的厨师食谱食谱中编写了以下模板

template '/etc/app.conf' do
   variables({
   my_id: Chef::HTTP.new(https://example.com).get('/',{header})
})
end

我的 erb 文件是

Output is : <%= @my_id %>

我实际上想执行一些 ruby​​ 操作(主要是过滤和计算 my_id 的组件),然后将这些值(每个组件的计数)传递回模板并进一步使用它。 erb 配置应该是什么或需要在模板块中添加的任何内容?

(这里,my_id 实际上有子网,我想获取这些子网的计数及其值,以便我可以进一步使用它来执行另一个 http 请求并获取每个子网中的节点)。

【问题讨论】:

    标签: ruby-on-rails ruby chef-infra chef-recipe


    【解决方案1】:

    不太了解 Chef Cookbooks,但您可以在 ERB 模板中编写一些 ruby​​。这不是我相信的最干净的解决方案。

    请参阅here,了解如何在您的 ERB 中嵌入代码

    【讨论】:

    • 试过了。问题是变量 my_id 在 JSON 中,我需要在执行任何操作之前将其转换为 ruby​​ 哈希。如何转换它? JSON.parse 不起作用,因为 my_id 不是字符串
    • 你用 JSON 说它。如果它是 JSON,JSON.parse 应该可以工作。你能发布你的 JSON 吗?
    【解决方案2】:

    您粘贴的内容(希望您在总结,因为您错过了一堆引号)只是一个快速提示。要获取您想要使用Chef::HTTP::SimpleJSON 的 JSON 数据,它会为您进行解析等等。

    variables data: Chef::HTTP::SimpleJSON.new('https://whatever.com/').get('/foo')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多