关于按字段值选择字典的一个疑问。
我想要类似的东西
{{ lookup('filetree', 'zabbix/') | grep('state', 'directory') }}
但目前,唯一想到的是
- debug:
msg: "{%- set rv = [] -%}
{%- for i in lookup('filetree', 'zabbix/') -%}
{%- do rv.append(i) if i.state == 'directory' -%}
{%- endfor -%}
{{ rv }}"
tags:
- test
我想要一个更紧凑的版本
答案 0 :(得分:0)
我认为您正在寻找selectattr
过滤器。例如:
---
- hosts: localhost
gather_facts: false
tasks:
- debug:
msg: >-
{{ lookup('filetree', '~/tmp')|
selectattr('state', 'eq', 'directory')|list }}
有关更多信息,请参见Jinja filter documentation。
答案 1 :(得分:0)
- name: nginx direcories
file:
path: "{{ nginx_dir }}/{{ item }}"
state: directory
loop: "{{ lookup('filetree', 'nginx/', wantlist=True) | json_query('[?state==`directory`].path') }}"
tags:
- nginx_update_configs
- name: install nginx configs
template:
src: "{{ item.src }}"
dest: "{{ nginx_dir }}/{{ item.path }}"
loop: "{{ lookup('filetree', 'nginx/', wantlist=True) | json_query('[?state!=`directory`]') }}"
loop_control:
label: "{{ item.path }}"
notify:
- reload nginx
tags:
- nginx_update_configs