如何在ansible中有条件地从注册的json输出中获取值

如何在ansible中有条件地从注册的json输出中获取值,json,loops,ansible,jinja2,Json,Loops,Ansible,Jinja2,我试图解析yum模块的json输出,以有条件地获取数据。 我的剧本如下所示: --- - hosts: all become: true tasks: - name: list ggk rpms yum: list: "{{ item }}" register: ggk_njk_info ignore_errors: yes with_items:

我试图解析yum模块的json输出,以有条件地获取数据。 我的剧本如下所示:

    ---
    - hosts: all
      become: true

      tasks:
      - name: list ggk rpms
        yum:
          list: "{{ item }}"
        register: ggk_njk_info
        ignore_errors: yes
        with_items:
          - ggk_base
          - njk_tt_client

      - debug: msg="{{ item.results }}"
        with_items: "{{ ggk_njk_info.results }}"
        when: item.results
     "msg": [
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.11",
                "yumstate": "available"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "installed",
                "version": "2.36.11",
                "yumstate": "installed"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.3-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.3",
                "yumstate": "available"
            }
        ]
    }
调试任务的输出如下所示:

    ---
    - hosts: all
      become: true

      tasks:
      - name: list ggk rpms
        yum:
          list: "{{ item }}"
        register: ggk_njk_info
        ignore_errors: yes
        with_items:
          - ggk_base
          - njk_tt_client

      - debug: msg="{{ item.results }}"
        with_items: "{{ ggk_njk_info.results }}"
        when: item.results
     "msg": [
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.11",
                "yumstate": "available"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "installed",
                "version": "2.36.11",
                "yumstate": "installed"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.3-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.3",
                "yumstate": "available"
            }
        ]
    }
调试的一部分如下所示:

    ---
    - hosts: all
      become: true

      tasks:
      - name: list ggk rpms
        yum:
          list: "{{ item }}"
        register: ggk_njk_info
        ignore_errors: yes
        with_items:
          - ggk_base
          - njk_tt_client

      - debug: msg="{{ item.results }}"
        with_items: "{{ ggk_njk_info.results }}"
        when: item.results
     "msg": [
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.11",
                "yumstate": "available"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.11-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "installed",
                "version": "2.36.11",
                "yumstate": "installed"
            },
            {
                "arch": "noarch",
                "envra": "0:njk_tt_client-2.36.3-1.noarch",
                "epoch": "0",
                "name": "njk_tt_client",
                "release": "1",
                "repo": "ggk_Software",
                "version": "2.36.3",
                "yumstate": "available"
            }
        ]
    }
我只想在相应的“yumstate”已“安装”时找到rpm“版本”

在这种情况下,我希望能够获得以下版本:

                "repo": "installed",
                "version": "2.36.11",
他做这项工作。例如,下面的任务

- debug:
    msg: "{{ ggk_njk_info.results|
             json_query('[?yumstate==`installed`].{repo: repo,
                                                   version: version}') }}"
给予


类似的内容可能会有所帮助,
“{{item.results.msg[0].repo}}”
“{item.results.msg[0].version}”
我可以使用get_version:[?yumstate=='installed'].version”获得它。一切皆有可能。标量、列表或字典。