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项目外的任何其他过滤器。