0
item_list: [data, database, proddata]

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

如何使 when 子句明确,以便如果我正在循环的项目列表仅是 [data],那么“database”和“proddata”不会将条件传递为 true?我只想通过 EXACT 拼写。

例子

---

- 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但它显示为真。我相信因为数据包含在产品数据数据库中。when: item.name == (item.name in final_list)如果可能的话,我希望这样做。我只是不确定我需要哪个过滤器。

4

1 回答 1

3

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

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

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

条件

when: item.name in final_list

会工作的。

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

when: item.name in final_list.split(",")
于 2016-02-18T05:17:33.620 回答