В некоторых случаях, когда вы используете Ansible для автоматизации различных задач, вам может потребоваться преобразовать данные и управлять ими. В Ansible вы можете использовать набор встроенных фильтров или создавать собственные фильтры для управления, обработки и преобразования данных. Ansible использует фильтры шаблонов jinja2 в фоновом режиме, чтобы пользователи могли создавать фильтры для определенных данных.
Важно отметить, что создание шаблонов фильтров выполняется на контроллере Ansible, а не на указанных удаленных хостах. Это помогает уменьшить объем данных, передаваемых на удаленный хост после локальной обработки. Если вы не знакомы с шаблонами jinja, Jinja - это простой, интуитивно понятный, быстрый и безопасный язык шаблонов для языка программирования Python, разработанный на основе популярных шаблонов Django фреймворка Python.
Мы не будем вдаваться в подробности работы шаблонов jinja, хотя понимание того, как они работают с шаблонами, может быть дополнительным преимуществом.
Ознакомьтесь с предоставленным ниже ресурсом, чтобы узнать больше о Jinja.
https: // linkfy.в / jinjaDocs
Как работают фильтры Ansible
Как уже упоминалось, механизм фильтрации Ansible основан на модели шаблонов Jinja. Это позволяет пользователям использовать эти шаблоны для ввода данных, их обработки и предоставления вывода на основе определенных фильтров.
После преобразования и фильтрации данных с использованием определенного шаблона вы можете использовать их для выполнения других задач в Ansible. Вы можете узнать больше о фильтрах в Ansible на следующем веб-сайте:
https: // linkfy.в / AnsibleFilters
В Ansible есть множество фильтров, которые очень полезны и применимы ко многим различным сценариям. Получив результат фильтра, вы можете использовать его для выполнения других задач, таких как отладка.
Общий синтаксис фильтрации данных следующий:
|Использование Ansible Filters
Теперь мы рассмотрим примеры фильтров Ansible, которые мы можем использовать для выполнения различных задач.
ПРИМЕЧАНИЕ: Как упоминалось ранее, в Ansible много фильтров, поэтому мы не можем охватить их все в этой статье. Вместо этого в этом руководстве представлены основы использования различных фильтров Ansible.
Пример 1: фильтры данных формата Ansible
Фильтры данных формата Ansible принимают структуру выходных данных в шаблоне и используют указанный фильтр для отображения ее в формате, который вызывается в фильтре.
Ниже приведен пример фильтра для преобразования в JSON и YAML:
переменная | to_jsonпеременная | to_yaml
Например, рассмотрим следующий сценарий:
- хосты: все задачи:- оболочка: cat / tmp / all.json
регистрация: результат
- отлаживать:
msg: "результат.stdout | to_nice_yaml "
Выполнение приведенного выше сценария приведет к выводу данных JSON, преобразованных в YAML. Ниже приведен пример вывода:
Вы также можете указать другие фильтры, такие как to_nice_yaml, для получения вывода в удобочитаемом формате.
переменная | to_nice_jsonпеременная | to_nice_yaml
Используя фильтры форматирования данных, вы можете преобразовывать данные в различные форматы и использовать их для различных задач.
Например, вы можете передать синтаксический анализ многодокументных строк YAML, как в playbook ниже:
- хосты: все задачи:- оболочка: cat / tmp / all.json
регистр: результат
- отлаживать:
msg: "результат.stdout | to_yaml | список"
Пример 2: Ansible Default Filter
Фильтр по умолчанию Ansible помогает установить значения по умолчанию для неопределенных переменных. Конфигурация Ansible по умолчанию не работает с неопределенными переменными. Например, если у вас есть неопределенная переменная, вы можете указать Ansible использовать значение по умолчанию вместо того, чтобы выдавать ошибку.
Общий синтаксис фильтра по умолчанию следующий:
Например:
- хосты: всевары:
задачи:
set_fact:
undef_var: "0_var | default (5)"
В приведенном выше сборнике сценариев значение переменной '0_var' будет установлено равным 5, если оно не определено явно, вместо выдачи ошибки.
Чтобы определить переменную, вы можете использовать обязательный фильтр. Все, что вам нужно сделать, это обратиться к приведенному выше примеру и заменить значение по умолчанию на обязательное:
0_var | обязательныйПример 3: фильтры отладки Ansible
При отладке вы можете использовать фильтр type_debug для получения информации о типе переменной. Тип переменной будет на Python, так как движок основан на Python. Общий синтаксис фильтра следующий:
переменная | type_debugПример 4: Математические фильтры
Математические фильтры Ansible позволяют выполнять математические запросы. Эти фильтры включают следующее:
- Логарифм фильтр - переменная | log - указывает основание логарифма в круглых скобках как переменная | журнал (2)
- Фильтр мощности - переменная | pow (3) - возвращает переменную, возведенную в указанную степень
- Абсолютный фильтр - переменная | abs - возвращает абсолютное значение переданной переменной
- Корневой фильтр - переменная | root - возвращает квадратный корень переменной. Чтобы явно указать корень, передайте значение в круглых скобках; например, кубический корень переменная | корень (3)
Эти математические фильтры могут быть весьма полезны, особенно при работе с большими объемами данных и мгновенными математическими операциями.
Пример 5: Хэш-фильтры
Хэш-фильтры Ansible позволяют получить хэш строки или переданных данных. В большинстве случаев эти фильтры вам не понадобятся, но их можно использовать при необходимости. Эти фильтры включают следующее:
- Sha1 - var | хэш («sha1»)
- Sha256 / sha512 - var | password_hash («sha256 / 512»)
- Md5 - var | хэш («md5»)
- Контрольная сумма строки - var | контрольная сумма
Другие полезные фильтры
Как вы могли заметить, в Ansible много фильтров. Некоторые фильтры Ansible, которые могут оказаться полезными, включают следующее:
- Фильтр разделения URL - «[Электронная почта защищена]: // linuxhint.com: 8080 / index.html?query = linux »| urlspilt («hostname»), - возвращает «linuxhint.com »
- Присоединиться к списку - список | join - используется для добавления списка в строку var
- Путь к каталогу - путь | dirname
- Развернуть тильду - путь | expanduser
Заключение
Ansible-фильтры пригодятся, когда вы выполняете задачи отладки или вам нужна конкретная информация без лишнего набора текста. Поскольку Ansible поддерживает настраиваемые фильтры, эти фильтры могут быть особенно полезны в определенных случаях использования.