2016-11-28 4 views
6

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.

Antwort

12

Es gibt ziemlich hilfreiche filters in Ansible.

Versuchen: when: (output_text.stdout | from_json).ismaster

+0

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

+0

Autsch ... Sie haben keine reinen JSON-Sachen wie' ObjectId() 'und' ISODate() '. Nicht sicher, dass es eine einfache Lösung dafür gibt. –

+1

Haben Sie stattdessen einen dieser Befehl verwendet, der ein "wahr" ausgibt. mongo --eval "db.isMaster() .ismaster". Danke für die Führung. – trial999