Chris
Chris

Reputation: 3715

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": ??}'

Upvotes: 1

Views: 873

Answers (1)

Vladimir Botka
Vladimir Botka

Reputation: 68189

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 }}"

Upvotes: 1

Related Questions