我有一份清单:
@Resource
我想删除dict元素{
"foo": [
"A",
"B",
"C"
],
"bar": [
],
"baz": [
"D",
"E"
]
}
,以便只保留bar
和foo
。这甚至不需要动态检测空列表,我知道元素baz
将为空,我很乐意有一个解决方案来删除名称 - 或者如果更容易删除空列表。< / p>
我想用过滤器做这个,而不是在Ansible循环中。有没有写过自定义过滤器的机会?我还没有找到任何内置过滤器,看起来它可以做到这一点。 bar
和reject
使用dicts列表,而不是包含列表的dict。
答案 0 :(得分:3)
---
- hosts: all
gather_facts: no
vars:
dict: { foo: [ A, B, C ], bar: [], baz: [ D, E ] }
dict_filtered: |
{%- set o={} %}
{%- for k, v in dict.iteritems() %}
{%- if v %}
{%- if o.update({k: v}) %}
{%- endif %}
{%- endif %}
{%- endfor %}
{{ o }}
tasks:
- debug:
var: dict_filtered
示例会话:
$ ansible-playbook -i localhost, playbook.yml
PLAY [all] ********************************************************************
TASK: [debug ] ****************************************************************
ok: [localhost] => {
"var": {
"dict_filtered": {
"baz": [
"D",
"E"
],
"foo": [
"A",
"B",
"C"
]
}
}
}
PLAY RECAP ********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0