列表内的Ansible字典-获取字典的键和值

时间:2019-01-23 09:21:21

标签: ansible

我有一个可变值的Ansible剧本-

"instances": [
    {
        "architecture": "x86_64",
        "tags": {
            "A": "B",
            "C": "D"
        }
    },
    {
        "architecture": "x86",
        "tags": {
            "A": "X",
            "G": "D"
        }
    }
]

实例列表是动态的,并且每次运行时#value可能有所不同。

我要-

  1. 如果整个列表中都存在标记键“ A”,则获取键“体系结构”的值。
  2. 如果整个列表中都有标记值“ D”,则获取键“体系结构”的值。

我尝试了with_subelements,但是运气不好,因为它需要列表。

1 个答案:

答案 0 :(得分:1)

第一个任务可以使用纯Jinja来完成,第二个任务则需要一些JMESPath。

- name: List archs with tag A present
  debug:
    msg: >-
      {{ instances
         | selectattr('tags.A','defined')
         | map(attribute='architecture')
         | list
         | unique
      }}

- name: List archs with any tag set to D
  debug:
    msg: >-
      {{ instances
         | json_query('[?contains(values(tags),`D`)]')
         | map(attribute='architecture')
         | list
         | unique
      }}