Ich habe die Ausgabe des folgenden Befehls zu analysieren:Json Parsing in ansible
mongo <dbname> --eval "db.isMaster()"
die Ausgabe gibt wie folgt:
{
"hosts" : [
"xxx:<port>",
"xxx:<port>",
"xxx:<port>"
],
"setName" : "xxx",
"setVersion" : xxx,
"ismaster" : true,
"secondary" : false,
"primary" : "xxx",
"me" : "xxx",
"electionId" : ObjectId("xxxx"),
"maxBsonObjectSize" : xxx,
"maxMessageSizeBytes" : xxxx,
"maxWriteBatchSize" : xxx,
"localTime" : ISODate("xxx"),
"maxWireVersion" : 4,
"minWireVersion" : 0,
"ok" : 1
}
Ich brauche die obige Ausgabe zu analysieren, den Wert zu überprüfen "Ismaster" ist wahr. Bitte lassen Sie mich wissen, wie ich das in Ansible tun kann.
Im Moment habe ich einfach, dass der Text „iSMaster“ bin Überprüfung:
tasks:
- name: Check if the mongo node is primary
shell: mongo <dbname> --eval "db.isMaster()"
register: output_text
- name: Run command on master
shell: <command to execute>
when: "'\"ismaster\\\" : true,' in output_text.stdout"
aber es ansible zu gebrauchen wäre schön, json Verarbeitung, das gleiche zu überprüfen: true wird in der Ausgabe mit dem folgenden Code gezeigt . Bitte beraten.
immer diese Fehlermeldung, wenn ich versuche, dies zu tun. „Die bedingte Check '(output_text.stdout | from_json) .ismaster' ist fehlgeschlagen Fehler: Kein JSON-Objekt \ n decodiert werden konnte \ nDer Fehler scheint in 'xxxx' zu sein: Zeile xx, Spalte x, kann aber \ nandwo anders in der Datei sein, abhängig vom genauen Syntaxproblem. \ n \ nDie Zeile scheint zu sein: \ n \ n \ n - name: Befehl auf Master ausführen \ n^here \ n "} – trial999
Autsch ... Sie haben keine reinen JSON-Sachen wie' ObjectId() 'und' ISODate() '. Nicht sicher, dass es eine einfache Lösung dafür gibt. –
Haben Sie stattdessen einen dieser Befehl verwendet, der ein "wahr" ausgibt. mongo --eval "db.isMaster() .ismaster". Danke für die Führung. –
trial999