如何将比较运算符与字典值一起使用?

时间:2019-06-06 09:35:59

标签: ansible

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

我是这项技术的新手。请任何人按以下要求提供帮助。

我尝试了以下代码。请在下面检查。

- 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

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码。

- 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"
    ]
}

答案 1 :(得分:0)

以下为我工作:

---
- hosts: localhost
  vars:
    dv:
      1A: 'True'
      2A: 'False'
      3A: 'True'
      4A: 'False'
  tasks:
    - name: debug
      debug:
        msg: "{{ item.value }}"
      loop: "{{ dv | dict2items }}"

    - set_fact:
        v1: "{{ v1| default([]) + item.key if (item.value in 'False') else('') }}"
      loop: "{{ dv | dict2items }}"

    - debug:
        var: v1

输出->

TASK [set_fact] *********************************************************************************************************
ok: [localhost] => (item={'key': u'1A', 'value': u'True'})
ok: [localhost] => (item={'key': u'3A', 'value': u'True'})
ok: [localhost] => (item={'key': u'2A', 'value': u'False'})
ok: [localhost] => (item={'key': u'4A', 'value': u'False'})

TASK [debug] ************************************************************************************************************
ok: [localhost] => {
    "v1": "2A4A"
}