如何解决nvme命令的Ansible过滤输出中的json_query不返回任何内容?
尝试使用json_query
来过滤某些外部命令(nvme list -o json
)的JSON输出时,我真是一团糟。
nvme
的输出是通过Ansible捕获的:
- name: Run nvme command
command:
cmd: nvme list -o json
register: nvme_output
become: yes
包含:
- name: nvme_ouput stdout
debug:
var: nvme_output.stdout
TASK [general : nvme_ouput stdout] *********************************************
ok: [dev-0600099bfee3c0f60.internal] => {
"nvme_output.stdout": {
"Devices": [
{
"DevicePath": "/dev/nvme0n1","Firmware": "1.0","Index": 0,"MaximumLBA": 33554432,"ModelNumber": "Amazon Elastic Block Store","PhysicalSize": 17179869184,"ProductName": "Non-Volatile memory controller: vendor 0x1d0f Device 0x8061","SectorSize": 512,"SerialNumber": "vol0e6af89fd1991cwtf","UsedBytes": 0
},{
"DevicePath": "/dev/nvme1n1","Index": 1,"MaximumLBA": 104857600,"PhysicalSize": 53687091200,"SerialNumber": "vol0885625da4a60awtf","UsedBytes": 0
}
]
}
}
我现在需要所有DevicePath
。使用在线测试仪,例如。 https://jmespath.org/,我想到了一个非常简单的查询:Devices[*].DevicePath
尝试在Ansible中使用它:
- name: nvme_ouput json_query var
debug:
msg: "{{ nvme_output.stdout | json_query(jq) }}"
vars:
jq: >-
Devices[*].DevicePath
但是...
TASK [general : nvme_ouput json_query var] *********************
ok: [dev-0600099bfee3c0f60.internal] => {
"msg": ""
}
为什么json_query()
的输出为空?
我正在Debian 10系统上的AWS EC2上运行此命令,
ansible-playbook 2.7.7
config file = /home/alex/sysops-ansible/ansible.cfg
configured module search path = ['/home/alex/.ansible/plugins/modules','/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible-playbook
python version = 3.7.3 (default,Jul 25 2020,13:03:44) [GCC 8.3.0]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。