Типовое применение: из templates/nginx/sites-available/ нужно скопировать с заменой переменных ряд конфигов. Вариант "в лоб":
- name: install sites
template:
src: "{{ item }}"
dest: "/etc/nginx/sites-enabled/{{ item }}"
with_items:
- nginx/sites-available/site1.conf
- nginx/sites-available/site2.conf
Это хорошо, пока сайтов 2-3, но если их 50? На каждый чих менять неудобно, и есть механизмы копирования "всего из папки". И имя такому механизму - with_fileglob. Но... там есть нюансы.
Если в примере выше просто заменить with_items то ничего хорошего не выйдет.
Казалось бы, будет тот же '{{ item }}', но по факту рабочий конфиг выглядит так
- name: install sites
template:
src: "{{ item }}"
dest: "/etc/nginx/sites-enabled/{{ item | basename | regex_replace('\.j2$', '') }}"
with_fileglob: "templates/nginx/sites-available/*.conf.j2"
Да, тут шаблоны уже .j2, вся доработка для первого блока это | regex_replace('\.j2$', ''). Причём работать будет даже если файл просто .conf (меняем строку выборки у файлглоба), просто не произойдёт замены имени ибо нечего. Тут суть в basename.
А ещё он сам не заглянет в templates, это нужно указывать явно.
Причём один раз у меня работало через массив (это как в первом примере), правда из одного элемента. (пример). А ещё файлглоб не умеет в рекурсию, для этого нужны другие механизмы.
Есть ещё варианты, в том числе find (по ссылке достаточно примеров) и даже такие извраты как shell ls -1 и подобное. А ещё можно нарисовать свой модуль.
Комментариев нет:
Отправить комментарий