2017-07-06 104 views
0

我想检查Ansible中的字典列表中是否存在某个键/值对。Ansible检查字典列表中是否存在键/值对

我发现了这个问题,但我不知道如果语法从蟒蛇ansible不同 Check if value already exists within list of dictionaries?

我已经尝试过,当条件(我从来没有见过ansible if语句!):

when: '"value" not in list' 

但是我对此没有任何运气。

例如,表看起来是这样的:

list: [ 
    { 
    "key1" : "value1", 
    "key2" : "value2", 
    "key3" : "value3" 
    }, 
    { 
    "key1" : "value4", 
    "key2" : "value5", 
    "key3" : "value6" 
    }, 
    and so on 

,我试图找出来,例如,一对"key2":"value5"内是否列表中的任何字典的存在。希望有一种方法可以做到这一点,如果双方存在就给出真实性,如果不存在则为假?

任何提示将不胜感激!谢谢。

+0

给示例数据:是什么'list',你想考什么。 –

+0

我已更新我的帖子以包含示例。 – astrade

回答

3

在这里你去:

- hosts: localhost 
    gather_facts: no 
    vars: 
    list_of_dicts: [ 
    { 
    "key1" : "value1", 
    "key2" : "value2", 
    "key3" : "value3" 
    }, 
    { 
    "key1" : "value4", 
    "key2" : "value5", 
    "key3" : "value3" 
    }] 
    tasks: 
    - debug: 
     msg: found 
     when: list_of_dicts | selectattr(search_key,'equalto',search_val) | list | count > 0 
     vars: 
     search_key: key3 
     search_val: value3 
+0

[equalto](http://jinja.pocoo.org/docs/2.9/templates/#equalto)自Jinja2 2.8开始可用,所以我猜你的系统上有一些乱码。检查点/系统包,确保Ansible使用Jinja2> = 2.8。 –

+0

现在正在工作,谢谢!我猜想忍者升级是最近的,服务器只需要重启。谢谢你的帮助。 – astrade

相关问题