1

我正在尝试访问当前节点的对象键

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

1 回答 1

1

下面的查询完成了这项工作

    - 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 }}"
于 2020-01-24T16:47:22.863 回答