item_list: [data, database, proddata]
我正在尝试进行条件when: item.name in item_list
如何使when子句显式化,以便如果我循环的项目列表仅为[data],那么'database'和'proddata'不会将条件传递为true?我只希望通过精确拼写。
实施例
---
- 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
中,但它显示为真。我相信因为数据包含在prod 数据和数据库中。如果可能,我希望when: item.name == (item.name in final_list)
。我只是不确定我需要哪种过滤器。
答案 0 :(得分:2)
如果您的final_list
是一个列表而不是一个逗号分隔值的字符串,那么它会起作用。
所以如果你的var定义是这样的:
final_list: '{{ dest_list1 | union(dest_list2) }}'
条件
when: item.name in final_list
会起作用。
但我认为你将它存储为字符串是有原因的,因为你在其他地方使用它。如果是这种情况并且您无法更改它(您可以将join
作为字符串进行操作),您只需将其拆分为您的条件:
when: item.name in final_list.split(",")