2016-11-28 2 views
6

Я должен проанализировать вывод следующей команды:Json разбор в анзибле

mongo <dbname> --eval "db.isMaster()" 

, который дает выход следующим образом:

{ 
    "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 
} 

мне нужно разобрать выше выход, чтобы проверить значение «Исмастер» - это правда. Пожалуйста, дайте мне знать, как я могу сделать это в незаменимом.

На данный момент я просто проверка, что текст «ismaster»: верно показано на выходе, используя следующий код:

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" 

Однако было бы неплохо использовать обработку JSon анзибль, чтобы проверить то же самое , Пожалуйста, порекомендуйте.

ответ

12

В Ansible есть довольно много полезного filters.

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

+0

получает эту ошибку, когда я пытаюсь сделать это:. «Условный чек '(output_text.stdout | from_json) .ismaster' не удался Ошибка: Нет объект JSON не может быть расшифрован \ п \ nПроизошла ошибка в «xxxx»: строка xx, столбец x, но может \ nbe в другом месте в файле в зависимости от конкретной проблемы синтаксиса. \ n \ nСогласная строка выглядит как: \ n \ n \ n - name: Run command on master \ n^here \ n "} – trial999

+0

Ouch ... у вас нет чистого JSON-материала, такого как' ObjectId() 'и' ISODate() '. Не уверен, что для этого есть легкое решение. –

+1

Вместо этого использовала эту команду, которая выводит «true». mongo --eval "db.isMaster(). ismaster". Спасибо за руководство. – trial999