ansible parse text-string stdout aus
Mein problem ist mit ansible und analysieren stdout. Ich brauche, um zu erfassen den stdout von einem ansible spielen und analysieren diese Ausgabe für einen bestimmten Teilstrings innerhalb stdout und speichern Sie in einer var. Meine konkreten Anwendungsfall unter
- shell: "vault.sh --keystore EAP_HOME/vault/vault.keystore |
--keystore-password vault22 --alias vault --vault-block |
vb --attribute password --sec-attr 0penS3sam3 --enc-dir |
EAP_HOME/vault/--iteration 120 --salt 1234abcd"
register: results
become: true
Dies erzeugt eine Ausgabe mit der folgenden Zeile, das Ziel ist das erfassen der maskierte Schlüssel, der jboss-Tresor generiert und speichern Sie in einem ansible var, so kann ich es verwenden, um zu konfigurieren, die standalone.xml Vorlage:
vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/>
Ich brauche einen Weg, Parsen dieses Strings, eventuell mit regex und speichern Sie die "MASKE-5dOaAVafCSd" substring in einem ansible var mit set_facts-Modul oder jedes andere ansible-Modul.
Derzeit mein code sieht wie folgt aus
#example stdout
results: vault-option name=\"KEYSTORE_PASSWORD\" value=\"MASK-5dOaAVafCSd\"/>
- name: JBOSS_VAULT:define keystore password masked value variable
set_fact:
masked_value: |
"{{ results.stdout |
regex_replace('^.+(MASK-.+?)\\.+','\\\1') }}"
Dieser code ist die Definition masked_value als results.stdout
, nicht die erwarteten capture-Gruppe.
Hallo Konstantin, im wesentlichen versuche ich zu speichern-MASKE-5dOaAVafCSd in eine variable.
InformationsquelleAutor TonyNguyen | 2017-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sehr nahe. Ich rate Ihnen, verwenden Sie regex101.com zum testen von regulären Ausdrücken.
Hier ist meine Lösung:
Ergebnis:
Update:
regex_search
gibt eine Liste der gefundenen übereinstimmungen, so dass nur die erste verwenden:Aktualisiert meine Antwort
InformationsquelleAutor Konstantin Suvorov
Die oben genannte Lösung funktionierte für mich, aber ich hatte zu tun, einige zusätzliche Logik zum filtern shell-Befehl-Ausgabe zu bekommen, um die Linie enthält folgende
weil vault-Befehl-Ausgabe hat viele Zeilen. Sobald diese Zeile erfasst wird, ist die Lösung gegeben durch Konstantin funktioniert Prima. Unten ist die ganze Sache muss an einem Ort durchgeführt werden.
Sicher sein, um zu ersetzen Sie alle Variablen mit Ihren Werten in den oben vault.sh Befehl.
InformationsquelleAutor MNA