ansible - 如何使用 json_query 从标准输出中提取带有 Ansible 的项目
问题描述
我正在使用返回 json 输出的 Ansible 执行 shell 脚本。
- 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 来做到这一点。有谁知道该怎么做?
非常感谢您提前。
解决方案
我找到了解决方案。我不得不更新python脚本以实际输出json,因为以前它没有输出正确的json(请参阅使用'而不是“)然后
- debug:
msg: "{{ item }}"
with_items: "{{ account_list.stdout | from_json | json_query('[*].login') }}"
工作正常
推荐阅读
- mysql - mysql如何查看不同列中具有相同数字的行
- mobile - Flutter 应用本地化方法
- jenkins - Jenkinsfile 管道构造 JSON 对象并写入文件
- python - 动态迭代循环
- angular6 - 如何使用带有预渲染的 loopback3 服务器优化 angular6?
- python - 故障转移选项在 mysql.connector 中引发错误
- modal-dialog - Materializecss Modal on page load未打开模态
- report - 打印 odoo 10 的 xls 报告时出错
- c# - Azure 应用服务视图尚未预编译错误
- windows - az deployment 不适用于 template-uri 的 SAS 令牌