微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nvme命令的Ansible过滤输出中的json_query不返回任何内容?

如何解决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 举报,一经查实,本站将立刻删除。