Json在Ansible中解析

tri*_*999 13 json ansible

我必须解析以下命令的输出:

mongo <dbname> --eval "db.isMaster()"
Run Code Online (Sandbox Code Playgroud)

输出如下:

 {
    "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
}
Run Code Online (Sandbox Code Playgroud)

我需要解析上面的输出来检查"ismaster"的值是否为true.请让我知道如何在ansible中做到这一点.

目前我只是检查文本"ismaster":使用以下代码在输出中显示true:

  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"
Run Code Online (Sandbox Code Playgroud)

然而,使用Ansible的json处理检查相同会很好.请指教.

Kon*_*rov 32

Ansible中有相当多有用的过滤器.

尝试: when: (output_text.stdout | from_json).ismaster