【问题标题】:Ansible check if key/value pair exists in list of dictionariesAnsible 检查字典列表中是否存在键/值对
【发布时间】:2017-07-06 18:50:45
【问题描述】:

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

我发现了这个问题,但是我不确定从 python 到 ansible 的语法是否不同(我从未见过 ansible 中的 if 语句!) Check if value already exists within list of dictionaries?

我已经尝试过when条件:

  when: '"value" not in list'

但是我没有任何运气。

例如,列表看起来像:

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

例如,我试图找出 "key2":"value5" 对是否存在于列表中的任何字典中。希望有一种方法可以做到这一点,如果该对存在,则返回 true,否则返回 false?

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

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

    给你:

    - 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
    

    【讨论】:

    • equalto 自 Jinja2 2.8 起可用,所以我猜你的系统上存在一些包混乱。检查 pip/system 包,确保 Ansible 使用 Jinja2>=2.8。
    • 现在可以使用了,谢谢!我想 jinja 升级是最近的,服务器只需要重新启动。感谢您的帮助。
    • 如何获取该对所在的字典索引?
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 2016-03-20
    • 2012-06-15
    • 2019-02-13
    • 1970-01-01
    • 2017-09-28
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多