列表中的 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 包含在 proddata 和 database 中。如果可能的话,我希望做 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(",")
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 包含在 proddata 和 database 中。如果可能的话,我希望做 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(",")