列表中的 Ansible 项目明确

Ansible item in list explicitly

item_list: [data, database, proddata]

我正在尝试做一个有条件的 when: item.name in item_list

如何使 when 子句显式化,以便如果我循环遍历的项目列表仅为 [data],则 'database' 和 'proddata' 不会通过条件真的?我只想通过准确的拼写。

例子

---

- name: Explicit example
  hosts: localhost
  connection: local
  vars:
    source_list: 
      - name: proddata
      - name: data
      - name: other
    dest_list1: [this, thing]
    dest_list2: [database, proddata]
    final_list: '{{ dest_list1 | union(dest_list2) | join(",") }}'

  tasks:
  - name: test
    debug:
      msg: '{{ item.name }}'
    with_items: 
      - '{{ source_list }}'
    when: item.name in final_list

如您所见,data 不在 final_list 中,但显示为 true。我相信是因为 data 包含在 proddatadatabase 中。如果可能的话,我希望做 when: item.name == (item.name in final_list)。我只是不确定我需要哪个过滤器。

如果您的 final_list 是一个列表而不是用逗号分隔值的字符串,它会起作用。

因此,如果您的 var 定义是这样的:

final_list: '{{ dest_list1 | union(dest_list2) }}'

条件

when: item.name in final_list

会工作。

但我假设您将它存储为字符串是有原因的,因为您在其他地方使用它。如果是这种情况并且您无法更改它(您可以在需要它的地方将其作为字符串执行 join ),您可以根据您的情况简单地拆分它:

when: item.name in final_list.split(",")