Ich versuche ein vorhandenes mcollective Inventory-Skript zu aktualisieren. Das Skript erfasst derzeit Informationen zu verfügbaren Updates. Ich möchte bestimmte "wahre" Werte durch Markierungen ersetzen, die ein Kontrollkästchen erzeugen, wenn sie in mein Wiki kopiert werden. Hier ist eine vereinfachte Version (weniger Felder) meines aktuellen Skripts.MCollective Inventory Scripts - Bestimmte Fakten bedingt ersetzen
# 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
Ich möchte die Werte in der Spalte Update Needed
mit {checkbox}done{checkbox}
ersetzen, aber nur wenn Update benötigt wahr ist. Ansonsten funktioniert ein Platzhalter (zB '-'). Ausgabe sieht wie folgt aus:
||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|
Und ich will es wie folgt aussehen:
||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|
Mein erster Versuch, so etwas zu tun war:
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
Aber es fällt mir dass die inventory do
vielleicht nicht iteriert, wie mein nicht-rubinischer Verstand angenommen hat, würde es sein. Irgendwo muss eine Iteration stattfinden, da die Formatzeichenfolge oft mit unterschiedlichen Fakten verwendet wird. Gibt es eine Möglichkeit, dem Formatierer zu sagen, dass er für jede Tatsache Werte ersetzen soll, wie ich oben versucht habe?
Kann einer von euch mir in die richtige Richtung zeigen?
"Ich möchte die Werte in der Spalte Update erforderlich durch {checkbox} done {checkbox} ersetzen, aber nur wenn die Aktualisierung erforderlich ist." Es scheint, dass Sie wirklich versuchen, die Werte durch '-' zu ersetzen, aber nur wenn die Tatsache falsch ist. Ist deine Beschreibung deine Absicht oder ist dein Code deine Absicht? –
@MattSchuchard Die Zeile 'updates = (Bedingung)? "{checkbox} done {checkbox}": "-" 'benutzt den ternären Operator. Es würde 'Updates' gesetzt, die entweder dem Checkbox-Makro oder einem Bindestrich entsprechen, abhängig von der angegebenen Bedingung. – vastlysuperiorman
Ok, also ist deine Absicht, was der Code tut. Mit diesen Informationen kann ich Ihnen sagen, dass Ihr "do" nicht über alles iteriert, sondern lediglich "inventory" als Codeblock spezifiziert, so dass Sie seine Funktionalität näher erläutern können. Was hier wirklich hilfreich wäre, ist, wenn Sie zeigen, was Ihre gewünschte Ausgabe ist, so müssen wir nicht erraten. –