Ansible 如何对字典值使用比较运算符?

Ansible 如何对字典值使用比较运算符?,ansible,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}] 实际上,这里我只使用比较运算符在v

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

我不熟悉这项技术。请任何人帮助下面的请求

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

- 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

您可以尝试以下代码

- 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是一个在不满足条件时声明为direct的变量

上述代码的输出如下所示:

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

您可以尝试下面的代码

- 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是一个在不满足条件时声明为direct的变量

上述代码的输出如下所示:

ok: [localhost] => {
    "msg": [
        "3A",
        "4A"
    ]
}
下面是我的作品:

---
- 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
输出-->

下面是我的作品:

---
- 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
输出-->



Hi Sriram,它正在失败,出现以下错误。致命:[localhost]:失败!=>{}MSG:该任务包含一个带有未定义变量的选项。错误是:列表对象没有元素1,可以吗check@sushmithai我已经更新了完整的代码。我认为您错过了声明和实例化v2。只需在一个测试yaml中完成整个代码。这是一个错误**错误!加载YAML时出现语法错误。发现意外“:”出现问题的行似乎是:vars:dv:[{1A:True},{2A:True},{3A:False},{4A:False}]^here**@sushmitai缩进和间距很重要。如果您已复制粘贴了代码,请尝试键入所有代码。这可以解决上面的错误。上面的错误已经解决了,但仍然会得到与我前面提到的相同的错误。该任务包括一个带有未定义变量的选项。错误是:列表对象没有元素1我想错误是指向**@if(item.keys()| first)。split(“:”)[1]==“False”**Hi Sriram,它失败了,错误如下。致命:[localhost]:失败!=>{}MSG:该任务包含一个带有未定义变量的选项。错误是:列表对象没有元素1,可以吗check@sushmithai我已经更新了完整的代码。我认为您错过了声明和实例化v2。只需在一个测试yaml中完成整个代码。这是一个错误**错误!加载YAML时出现语法错误。发现意外“:”出现问题的行似乎是:vars:dv:[{1A:True},{2A:True},{3A:False},{4A:False}]^here**@sushmitai缩进和间距很重要。如果您已复制粘贴了代码,请尝试键入所有代码。这可以解决上面的错误。上面的错误已经解决了,但仍然会得到与我前面提到的相同的错误。该任务包括一个带有未定义变量的选项。错误是:列表对象没有元素1我想错误是指向**@if(item.keys()| first)。拆分(':')[1]=='False'**您好,dict2items筛选器不支持。请建议ansible 2.6版中有任何其他.dict2项。您的版本是什么?使用ansible 2.5.15。请建议使用除dict2items之外的任何其他筛选器。您好,dict2items筛选器不支持。请建议ansible 2.6版中有任何其他.dict2项。您的版本是什么?使用ansible 2.5.15。请建议除Dict2项目外的任何其他过滤器。