Ansible
2026-02-26 18:55 Diff

Одной из ключевых особенностей 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, что расширяет возможности кастомизации и адаптации инструмента под конкретные задачи.