Ansible
Теория: Фильтры
Одной из ключевых особенностей Ansible является использование фильтров, основанных на системе шаблонов Jinja2, позволяющих трансформировать данные и управлять ими в процессе выполнения задач. На синтаксическом уровне, фильтры это функции, применяемые к переменным или выражениям для их изменения или форматирования.
Фильтры применяются к переменным или значениям внутри двойных фигурных скобок {{ }} с использованием символа вертикальной черты |. Например, {{ some_variable | filter_name }}. Ниже, несколько примеров:
Здесь применяются различные фильтры к списку чисел (переменная numbers). Синтаксически это выглядит как имя функции фильтрации, указанное после вертикальной черты. Вот что делают эти фильтры:
minнаходит минимальное значениеmaxнаходит максимальное значениеuniqueнаходит уникальные значения (результатом является список, поэтому для вывода на печать используем цикл)randomпозволяет выбрать случайное значение из списка
При выполнении этого плейбука мы получим вот такой результат:
Какие реальные задачи можно решать с помощью этих фильтров? Предположим, что мы хотим выбрать сервер из списка по определенным параметрам. Как мы можем применить фильтры:
- Найти сервер с самым большим количеством CPU.
- Найти сервер с наименьшим количеством оперативной памяти.
Ниже еще несколько примеров фильтров, которые встречаются достаточно часто в реальной жизни:
Рассмотрим фильтры, которые мы использовали, более подробно:
- Фильтр
ipaddrпозволяет извлекать из ip-адреса различные его части. В примере выше извлекается адрес. - Фильтр
hashсоздает хэш, который затем может быть использован, например, в файлах конфигурации. - Фильтры
basenameиdirnameработают с путями. С помощью них можно выделить имя файла и путь к директории expanduserраскрывает путь. ~/Movies, для пользователя hexlet превратится в /home/hexlet/Movies.
Другие популярные фильтры:
default: Устанавливает значение по умолчанию для переменной, если она не определена.map: Преобразует каждый элемент в списке.json_query: Позволяет запросить структуры JSON с помощью специального запроса.regex_replace: Заменяет текст, используя регулярные выражения.
Ansible позволяет разработчикам создавать собственные фильтры на Python, что расширяет возможности кастомизации и адаптации инструмента под конкретные задачи.






