【问题标题】:Puppet : External facter json array iteration inside puppet template木偶:木偶模板内的外部因素json数组迭代
【发布时间】:2014-06-19 19:04:06
【问题描述】:

我正在将数据从 puppet 代理发送到主节点。在这里,我在我的 facters/facts.d/myData.json 文件中使用了 json 数组。在主人方面,我有一个模板。在那里我想迭代这个外部事实 json 数组。

{ "employees" :
     [ 
      {"firstName":"John", "lastName":"Doe"},
      {"firstName":"Anna", "lastName":"Smith"},
      {"firstName":"Peter", "lastName": "Jones"},
    ]
   }

我可以在 puppet 模板中做这件事吗?我怎样才能迭代这个数组?我尝试关注但失败了

<% @employees.each do |firstname| -%>
malintha
<% end -%>

问候, 马林萨

【问题讨论】:

    标签: json puppet facter


    【解决方案1】:

    您的模板本质上是一个 Ruby scriptlet。要对 Ruby 代码中的 JSON 数据进行操作,您必须将其 deserialize 转换为真正的 Ruby 对象。

    请注意,您的 Array 包含哈希,因此您的模板需要以不同的方式构造:

    <% require 'json'
       JSON.parse(@employees).each do |person|
         firstname, lastname = person['firstName'], person['lastName'] -%>
    <%= firstname %>
    <% end -%>
    

    【讨论】:

    • 我试过这个,它在执行“puppet agent -test”时出现以下错误错误:无法从远程服务器检索目录:服务器上的错误 400:无法解析模板配置/carbon.xml.erb:文件路径:/usr/lib/ruby/vendor_ruby/json/common.rb 行:155 详细信息:无法在节点 puppetclient.localdomain 上的 /etc/puppet/modules/config/manifests/init.pp:16 将 nil 转换为字符串
    • 另外请注意,我在客户端上运行了“facter -p”,但它没有显示任何关键的“员工”。我的json有问题吗
    • 不,您的事实有问题。先解决这个问题。
    • 请阅读外部事实。您不能只将 JSON 数据转储到 /etc/facts.d。 Facter 希望在那里找到可以很好地输出 JSON 数据的可执行脚本,但它必须以符合事实的方式:docs.puppetlabs.com/guides/custom_facts.html#external-facts
    • 但我关注的是docs.puppetlabs.com/guides/…。它说我们可以直接使用 .json 文件。最初我使用 .txt 文件并成功了。然后我想试试json。 WDYT ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多