太好了通过字段值选择字典

时间:2018-10-26 15:21:15

标签: ansible jinja2

关于按字段值选择字典的一个疑问。

我想要类似的东西

{{ 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

我想要一个更紧凑的版本

2 个答案:

答案 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