Search code examples
ansiblejmespathjson-query

json_query - Get object key of current node


I am trying to access an object key of the current node

pkgs:
  pkg1:
    package_description: xzy
    owner: node1
  pkg2:
    package_description: desc2
    owner: node2

What I need is an object that looks like this

- name: pkgs1
  package_description: xyz
  owner: node1
- name: pkg
  package_description: desc2
  owner: node2

This is the query I created but am not sure how to access the "key"

- debug:
    msg: "{{ clusters.json | json_query(qry) | flatten }}"
    verbosity: 2
  vars:
    qry: '[*].pkgs.*.{"package_description": package_description, "ower": owner, "name": ??}'

Solution

  • The query below does the job

        - set_fact:
            pkgl: "{{ pkgs|
                      dict2items|
                      json_query('[].{name: key,
                                     package_description: value.package_description,
                                     owner: value.owner}') }}"
        - debug:
            var: pkgl
    

    gives

        "pkgl": [
            {
                "name": "pkg2", 
                "owner": "node2", 
                "package_description": "desc2"
            }, 
            {
                "name": "pkg1", 
                "owner": "node1", 
                "package_description": "xzy"
            }
        ]
    

    The same result gives the task without json_query

        - set_fact:
            pkgl: "{{ pkgl|default([]) +
                      [{'name': item.key,
                        'package_description': item.value.package_description,
                        'owner': item.value.owner}] }}"
          loop: "{{ pkgs|dict2items }}"