1

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": ??}'
Chris
  • 3,581
  • 8
  • 30
  • 51

1 Answers1

1

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 }}"
Vladimir Botka
  • 58,131
  • 4
  • 32
  • 63