通过json_query解析和过滤Ansible中的json输出

p1iqtdky  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(147)

我有下面的输出,我试图解析和过滤:

- name: lvs
    debug:
      msg: "{{ ansible_lvm.lvs }}"
ok: [localhost] => {
    "msg": {
        "av_root_snapshot": {
            "size_g": "4.00",
            "vg": "vg_root"
        },
        "av_var_snapshot": {
            "size_g": "5.00",
            "vg": "vg_root"
        },
        "lv_root": {
            "size_g": "20.00",
            "vg": "vg_root"
        },
        "lv_var": {
            "size_g": "15.00",
            "vg": "vg_root"
        }
    }
}

我正在尝试创建一个out的列表,因此它返回以下内容:

av_root_snapshot vg_root
av_var_snapshot vg_root

我可以通过以下方式获得'vg'的值:

- name: get snap
    debug:
      msg: "{{ ansible_lvm.lvs | json_query('*.vg') }}"

但我似乎不明白的是如何过滤以 *snapshot结尾的根对象名称并解析“vg”的值。我正在尝试这样做,这样我也可以删除这些快照。
如何正确地过滤上述输出并解析所需的信息?

u0njafvf

u0njafvf1#

Q:***“删除以'snapshot'结尾的对象名,解析vg的值。"***
A:拒绝匹配正则表达式的键

lvs_no_snapshot: "{{ ansible_lvm.lvs|dict2items|
                       rejectattr('key', 'regex', '^.*_snapshot$')|
                       items2dict }}"

给予

lvs_no_snapshot:
    lv_root:
      size_g: '20.00'
      vg: vg_root
    lv_var:
      size_g: '15.00'
      vg: vg_root

然后,您可以获得属性列表 vg

vg: "{{ lvs_no_snapshot|json_query('*.vg') }}"

相关问题