MCollective Inventory Scripts - 有条件地替换某些事实

MCollective Inventory Scripts - Replace certain facts conditionally

我正在尝试更新现有的 mcollective 清单脚本。该脚本当前收集有关可用更新的信息。我想用标记替换某些 "true" 值,当复制到我的 wiki 时会产生一个复选框。这是我当前脚本的简化版本(更少字段)。

# patching_inventory.mc
inventory do
  puts "||Server||Update Needed||Package Count||Kernel Release||"
  format "|%s|%s|%s|%s|"
  fields { [
    identity,
    facts["apt_has_updates"],
    facts["apt_updates"],
    facts["kernelrelease"]
  ] }
end

我想用 {checkbox}done{checkbox} 替换 Update Needed 列中的值,但是 只有 当需要更新时 true。否则,占位符(例如“-”)将起作用。输出如下所示:

||Server||Update Needed||Package Count||Kernel Release||
|host1|true|26|3.20.96|
|host2|false|0|4.18.120|
|host3|true|109|3.21.17|
 ...
|host197|true|26|3.20.96|

我希望它看起来像这样:

||Server||Update Needed||Package Count||Kernel Release||
|host1|{checbox}done{checkbox}|26|3.20.96|
|host2|-|0|4.18.120|
|host3|{checbox}done{checkbox}|109|3.21.17|
 ...
|host197|{checbox}done{checkbox}|26|3.20.96|

我最初的尝试是做这样的事情:

inventory do
  updates = (facts["apt_has_updates"] == 'true') ? "{checkbox}done{checkbox}" : '-'

  puts "||Server||Update Needed||Package Count||Kernel Release||"
  format "|%s|%s|%s|%s|"
  fields { [
    identity,
    updates,
    facts["apt_updates"],
    facts["kernelrelease"]
  ] }
end

但我突然想到,inventory do 可能不会像我的非 ruby 头脑中假设的那样迭代。然而在某个地方,一定会发生迭代,因为格式字符串多次用于不同的事实。有没有办法告诉格式化程序为每个事实替换值,就像我在上面尝试的那样?

你们中的任何一个能指出我正确的方向吗?

经过更多的探索,原来我只是把三值转换放在了错误的地方。如果将该值放在字段列表中,它就可以正常工作。这是我的工作代码:

# patching_inventory.mc
inventory do
  puts "||Server||Update Needed||Package Count||Kernel Release||"
  format "|%s|%s|%s|%s|"
  fields { [
    identity,
    facts["apt_has_updates"],
    facts["apt_updates"] == "true" ? "{checkbox}done{checkbox}" : "-",
    facts["kernelrelease"]
  ] }
end

老实说,我不确定为什么会这样......必须有一些迭代器正在评估清单中每个主机的字段。如果有人有更多见解,请随时 post 另一个答案。