【问题标题】:MCollective Inventory Scripts - Replace certain facts conditionallyMCollective Inventory Scripts - 有条件地替换某些事实
【发布时间】:2017-06-20 05:50:17
【问题描述】:

我正在尝试更新现有的 mcollective 库存脚本。该脚本当前收集有关可用更新的信息。我想用复制到我的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

我想将Update Needed 列中的值替换为{checkbox}done{checkbox},但需要更新时为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 可能不像我的非红宝石头脑认为的那样迭代。然而,在某个地方,必须发生迭代,因为格式字符串多次使用不同的事实。有没有办法告诉格式化程序用我上面尝试的每个事实替换值?

谁能指出我正确的方向?

【问题讨论】:

  • “我想用 {checkbox}done{checkbox} 替换 Update Needed 列中的值,但仅当 update needed 为真时。”看来您真正想做的是用- 替换这些值,但前提是事实为假。你的描述是你的意图还是你的代码是你的意图?
  • @MattSchuchard updates = (condition) ? "{checkbox}done{checkbox}" : "-" 行使用三元运算符。它会将updates 设置为复选框宏或连字符,具体取决于所述条件。
  • 好的,你的意图就是代码在做什么。有了这些信息,我可以告诉您,您的 do 没有迭代任何内容,而只是将 inventory 指定为代码块,以便您可以详细说明其功能。在这里真正有帮助的是,如果您展示了您想要的输出,这样我们就不必猜测了。
  • @MattSchuchard 啊,对不起。使用所需的输出进行编辑。希望澄清。
  • 酷,不过看起来你想通了。您可能遇到了变量范围问题,并且您似乎已经成功调试了它。 MCo 库存脚本是一个罕见且有趣的问题,因此请为它投票。

标签: ruby mcollective


【解决方案1】:

经过更多探索,事实证明我只是将三元值转换放在错误的位置。如果将值放在字段列表中,它可以正常工作。这是我的工作代码:

# 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

老实说,我不确定为什么会这样……一定有一些迭代器在评估清单中每个主机的字段。如果有人有其他见解,请随时发布另一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 2018-08-28
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多