2017-02-02 11 views
1

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?

+0

"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? –

+0

@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

+0

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. –

Antwort

0

Nach mehr erkunden, stellte sich heraus, dass ich gerade die ternäre Wertumwandlung an der falschen Stelle gesetzt habe. Es funktioniert gut, wenn der Wert in der Liste der Felder platziert wird. Hier ist mein Arbeitscode:

# 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 

Ich werde ehrlich sein, ich bin mir nicht sicher, warum das funktioniert ... es muss eine Iterator sein, die die Felder für jeden Host in der Bestandsliste ist die Bewertung. Wenn jemand zusätzliche Einblicke hat, können Sie gerne eine andere Antwort schreiben.