Nehmen wir an, ich habe das folgende Beispiel, in dem alle git config
-Werte in einer Ansible-Variablen gespeichert werden:
Ansible speichert das Ergebnis dieses Befehls in der Variablen git_config_list
, und eines der Elemente ist stdout_lines
, das die Ausgabe des Befehls in einem Array von Einträgen enthält, z. B.
Wie kann ich prüfen, ob ein bestimmter Wert bereits eingestellt ist, z. um zu überprüfen, ob user.name
einen Wert hat?
Gibt es eine Möglichkeit, etwas wie contains
im Array aufzurufen, kombiniert mit einem regulären Ausdruck, so dass ich den Wert finde, den ich suche? Oder muss ich die stdout_lines
Einträge durchlaufen, um zu finden, wonach ich suche?
Ein Beispiel, wie man so etwas macht, wäre zu begrüßen.
Theoretisch sollte dies möglich sein, indem die Filter match
und select
. Letzterer gibt nur diejenigen Listenelemente zurück, die einen anderen Filter passieren. Dann könnten Sie die Länge des Ergebnisses testen.
In der Theorie. Ich habe es gerade getestet und kann es nicht zur Arbeit bringen. Im Allgemeinen gibt der select
(sowie der reject
) Filter einen String wie <generator object _select_or_reject at 0x10531bc80>
zurück, sogar mit einfachen Filtern wie dem Beispiel aus den Dokumenten mit odd
. Konnte noch keine Lösung finden. Vielleicht hast du mehr Erfolg.
Sie könnten jedoch einfach join
Ihrer Liste zu einer Zeichenkette hinzufügen und dann in der Zeichenkette mit match
suchen. Obwohl es hässlich ist, funktioniert es.
Einfaches Python in
würde gut funktionieren. HINWEIS: Ich verwende stdout
anstelle von stdout_lines
:
Alles in allem ansible
ist schrecklich für die Programmierung. Versuchen Sie so viel wie möglich außerhalb des Playbooks zu tun und schreiben Sie nur die Orchestrierungslogik in das Playbook. Hier sind ein paar Beispiele, wie Sie es mit der Option --get
von git
machen können.
Tags und Links ansible