我正在尝试编写一个根据条件将字典值存储在变量中的任务。
我是这项技术的新手。请任何人按以下要求提供帮助。
我尝试了以下代码。请在下面检查。
- 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
答案 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"
}