首页 > 解决方案 > 如何将比较运算符与字典值一起使用?

问题描述

我正在尝试编写一个任务,根据条件将字典值存储在变量中。

我是这项技术的新手。请任何人帮助解决以下请求。

我尝试使用以下代码。请检查以下。

- set_fact:
      v1: "{{ v1|default([]) + item.keys() if item.values() == false else 1 }}"
    loop: "{{ dv }}"

'dv' 是一本字典。

[{1A:True},{2A:True},{3A:False},{4A:False}]

实际上,在这里我试图通过仅使用比较运算符将错误值存储在 v1 中。

预期输出:

v1 应包含以下列表:

[3A,4A]

Ansible 版本:2.5.15

标签: ansible

解决方案


你可以试试下面的代码。

- hosts: localhost
  connection: local
  vars:
    dv: [{1A:True},{2A:True},{3A:False},{4A:False}]
    v2: []
    v1: []
  tasks:
    - set_fact:
        v1: "{{ v1|default([]) }} + [ {{ v1.append((item.keys()|first).split(':')[0]) if (item.keys()|first).split(':')[1] == 'False' else v2.append('1') }} ]"
      with_items: "{{ dv }}"
    - debug:
        msg: "{{ v1 }}"

这里 v2 是一个变量,如果条件不满足,则声明为定向。

上述代码的输出如下:

ok: [localhost] => {
    "msg": [
        "3A",
        "4A"
    ]
}

推荐阅读