2016-02-16 33 views
0
item_list: [data, database, proddata] 

我试图做一个条件when: item.name in item_listAnsible项明确

如何使条款时明确,这样,如果我的项目,我循环直通名单是[数据]只,那'数据库'和'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 

正如你所看到的,datafinal_list,但它显示了真实的。我相信,因为数据包含在产品数据数据基地。如果可能,我希望做when: item.name == (item.name in final_list)。我只是不确定我需要哪个过滤器。

+0

,你能不能给我们的例子吗?有可能,你需要'filter()',但这个问题很不明确。 – Goodies

+0

Woops!我很抱歉。我虽然看着python标签。尽管如此,我无法想象这对其他人来说很清楚。 – Goodies

+0

什么类型的数据等? – udondan

回答

1

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

所以,如果您的VAR定义是这样的:

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

条件

when: item.name in final_list 

会工作。

但我认为你有它存储为一个字符串的原因,因为你在别的地方使用它。如果是这样的话,你不能改变它(你可以做join在你需要它作为一个字符串),你可以在你的条件只拆分:

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

非常感谢你@udondan! “|加入(“,”)是我的问题 - 删除它的工作。我会投这个答案,但不会让我: - \ –