Анзибль. Выбор словаря по значению поля - PullRequest
0 голосов
/ 26 октября 2018

Ответ на вопрос о выборе словаря по значению поля.

Я бы хотел что-то вроде:

{{ 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 голосов
/ 21 ноября 2018
- 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
0 голосов
/ 26 октября 2018

Я думаю, вы ищете фильтр selectattr.Например:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - debug:
        msg: >-
          {{ lookup('filetree', '~/tmp')|
          selectattr('state', 'eq', 'directory')|list }}

См. Документацию к фильтру Jinja для получения дополнительной информации.

...