可靠的。 Select key:value 对列表中的第 n 个项目,其中键等于 x

Ansible. Select n-th item in a list of key:value pairs where key equals to x

从包含多个项目的列表 entities 中,确定哪个项目(索引号)的键 is_default 等于 true。已知列表中只有一项符合此条件。将生产的项目分配给一个变量。

---  
- hosts: databases
  gather_facts: true
  vars:
    entities:
      - name: dude
        is_default: false
        id: 2104
        gen: 12-C
      - name: mate
        is_default: true
        id: 1724
        gen: 13-A
      - name: pal 
        is_default: false
        id: 1809
        gen: 13-A                                                                                                                                                       

通过查看列表,我们可以确定名为 mate 的列表中的第二项具有等于 true 的键 is_default。下面演示需要选择列表中的哪一项:

---  
- hosts: databases
  gather_facts: true
  vars:
    entities:
      - name: dude
        is_default: false
        id: 2104
        gen: 12-C
      - name: mate
        is_default: true
        id: 1724
        gen: 13-A
      - name: pal 
        is_default: false
        id: 1809
        gen: 13-A
    selected_item: "{{ entities[1] }}"                                                                                                                                                        
  tasks:
    - name: show
      debug:
        msg: "{{ selected_item }}"

在这种情况下,selected_item 变量存储列表的正确项。需要避免这种方法,因为键 is_default 等于 true 的项目可能位于列表中的任何索引处,关键是要避免查看列表以确定需要哪个项目。需要在显示的 Ansible 配置文件中解决。

尝试

selected_item: "{{ entities|selectattr('is_default')|list|first }}"