Как извлечь элементы из Ansible из stdout с помощью json_query - PullRequest
0 голосов
/ 09 октября 2019

Я выполняю сценарий оболочки с Ansible, который возвращает вывод json.

 - name: Get mlist
    become: no
    shell: "PYTHONPATH=/home/centos/scripts/users/ python /home/centos/scripts/users/team_members.py {{ parameter }}"
    register: account_list

вывод выглядит как

ok: [localhost] => {
    "msg": {
        "changed": true,
        "cmd": "PYTHONPATH=/home/centos/scripts/users/ python /home/centos/scripts/users/team_members.py parameter",
        "delta": "0:00:00.530377",
        "end": "2019-10-09 08:28:20.222480",
        "failed": false,
        "rc": 0,
        "start": "2019-10-09 08:28:19.692103",
        "stderr": "2019-10-09 08:28:19,915 INFO",
        "stderr_lines": [
            "2019-10-09 08:28:19,915 INFO"
        ],
        "stdout": "[{'id': 'XXX=', 'name': 'XXX', 'login': 'xxx'}, {'id': 'YYY', 'name': 'YYY', 'login': 'yyy'}, {'id': 'ZZZ', 'name': 'zzz', 'login': 'zzz'}]",
        "stdout_lines": [
            "[{'id': 'XXX=', 'name': 'XXX', 'login': 'xxx'}, {'id': 'YYY', 'name': 'YYY', 'login': 'yyy'}, {'id': 'ZZZ', 'name': 'ZZZ', 'login': 'zzz'}]"
        ]
    }
}

Что я хотел бы сделать, это извлечь все элементы входа в систему. До сих пор я пробовал разные способы

  - debug:
      msg: "{{ account_list.stdout | to_json | json_query('[*].login') }}"

Но это не работает. При помещении .stdout в JSONPath Online Evaluator,. [*]. Login делает то, что я хочу, я просто не могу сделать это с Ansible json_query. Кто-нибудь, кто знает, как это сделать?

Большое спасибо заранее.

1 Ответ

0 голосов
/ 09 октября 2019

Я нашел решение. Мне пришлось обновить скрипт Python, чтобы фактически выводить json, так как раньше он не выводил правильный json (см. Использование «вместо»), а затем

 - debug:
      msg: "{{ item }}"
   with_items: "{{ account_list.stdout | from_json | json_query('[*].login') }}"

работал правильно

...