json_query - получает ключ объекта текущего узла. - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь получить доступ к ключу объекта текущего узла

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

Мне нужен объект, который выглядит следующим образом

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

Это запрос, который я создал, но Я не уверен, как получить доступ к «ключу»

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

1 Ответ

1 голос
/ 24 января 2020

Запрос ниже выполняет работу

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

дает

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

Тот же результат дает задачу без json_query

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