Одной из основных частей любой структуры или программного обеспечения для управления является то, как оно обрабатывает и обрабатывает данные. Учитывая направление, в котором движется мир информационных технологий, будет справедливо сказать, что данные — это главное. Ежедневно генерируются огромные объемы данных, которые используются для различных целей. Таким образом, управление данными и их обработка очень важны.
Программное обеспечение, такое как Ansible, требуется для обработки огромных объемов данных. Глядя на облегчение, которое должны обеспечивать эти типы приложений, их возможности обработки данных должны быть первоклассными.
Всякий раз, когда нам нужно обрабатывать, форматировать или манипулировать данными в Ansible, мы используем фильтры. В Ansible доступно два набора фильтров. Один набор — это шаблонные фильтры jinja2, а другой набор — фильтры, созданные пользователями.
Однако в фоновом режиме все фильтры являются производными от шаблона jinja2, который работает таким образом, что данные, вводимые в фильтры, сначала преобразуются в выражения шаблона, чтобы к ним можно было применить фильтры.
Еще один важный момент, на который следует обратить внимание, заключается в том, что все фильтры применяются локально, а это означает, что никакая фильтрация не может выполняться с использованием удаленных хостов. Итак, все манипуляции и обработка происходят на управляющей машине Ansible.
Если вы хотите узнать о фильтрах, доступных в Ansible, и о том, как они используются, вы нашли нужную статью, поскольку мы расскажем вам, как работают эти фильтры и как вы можете создавать плейбуки Ansible для обработки данных так, как вы хотите. система к.
Как работают фильтры
Работа с фильтрами данных проста. Вы даете предварительно разработанным фильтрам некоторые данные или информацию в качестве входных данных; фильтр анализирует данные в соответствии с командами, данными в плейбуке, и заданными вами условиями. После того, как данные будут проанализированы, вы получите настраиваемый результат, который вы хотели, из данных, которые у вас были.
Различные типы фильтров выполняют различные виды фильтрации данных. Как упоминалось ранее, все они работают на основе шаблона jinja2 и есть список всех доступных фильтров. Вы можете увидеть этот список, нажав на эту ссылку.
Существует множество преимуществ использования фильтров, поскольку они значительно расширяют возможности Ansible. Вы также можете использовать фильтры для отладки в определенных случаях.
Как реализовать фильтры в Ansible
Основной синтаксис любого фильтра Ansible задается следующим образом:
{{<input> | <filter>}}
Еще один важный момент, на который следует обратить внимание, это то, что преобразование данных в фоновом режиме выполняется с помощью Python. Если определенный тип шаблона недоступен в Python, фильтр может дать вам неверный результат. Таким образом, вы должны быть осторожны при использовании некоторых фильтров.
До сих пор вы изучили основы фильтров Ansible. Чтобы прояснить дальнейшие вопросы, давайте рассмотрим несколько примеров фильтрации и различных типов фильтров.
Примеры
— name: Generate multiple arbitrary hostnames
ansible.builtin.debug:
msg: «{{ [‘abc’, ‘xyz’] | product([‘com’]) | map(‘join’, ‘.’) | join(‘,’) }}»
Кроме того, мы хотели бы упомянуть здесь, что для запуска playbook необходимо выполнить следующую команду с помощью терминала Linux:
ansible-playbook testbook.yml
В этом примере мы использовали фильтр «продукт». Фильтр произведения используется для реализации декартова умножения. Фильтр «продукт» в некотором роде аналогичен использованию циклов for в традиционных языках программирования. Вывод, который вы получите, запустив такой код, будет.
{ «msg»: «abc.com,xyz.com» }
Вот как вы можете получить комбинации для наборов из двух чисел.
— name: Give me combinations for sets of two
ansible.builtin.debug:
msg: «{{ [10,20,30,40,50] | ansible.builtin.combinations(2) | list }}»
Мы использовали фильтр «комбинация», чтобы получить комбинации двух чисел из заданного набора. 2, указанные в скобках, предписывают составлять комбинации из 2, а ключевое слово «список» даст вам результат в виде списка.
— name: Largest permutations (order matters)
ansible.builtin.debug:
msg: «{{ [0,2,4,6,8] | ansible.builtin.permutations | list }}»
— name: Permutations of sets of three
ansible.builtin.debug:
msg: «{{ [1,3,5,7,9] | ansible.builtin.permutations(3) | list }}»
Также предусмотрен фильтр «перестановки». Этот фильтр дает нам перестановки заданного набора переменных или данных. В приведенном выше примере мы получим самые большие перестановки из набора четных чисел и перестановки наборов из трех из нечетных чисел.
«{{ [‘a’,’b’,’c’] | random }}»
В этом примере используется «случайный» фильтр для генерации случайного числа из заданного набора данных.
{{ 51 | random(step=10) }}
В этом примере также использовался «случайный» фильтр для генерации случайного числа от 0 до 50. Мы также дали условие, что размер шага должен быть равен 10, поэтому на выходе вы получите число, кратное 10.
{{ [‘a’,’b’,’c’,’d’,’e’] | shuffle }}
Фильтр «перемешивания» можно использовать для перетасовки набора данных для получения вывода, в котором данные будут перемешаны, а затем показаны вам.
{{ [{‘val’: 1}, {‘val’: 2},{‘val’:3},{‘val’:4}] | min(attribute=’val’) }}
Наконец, мы использовали фильтр «минимум», который сравнивает два входных числа, которые мы дали в качестве входных данных, и дает вам наименьшее число в качестве выходных данных.
{{ [{‘val’: 1}, {‘val’: 2}] | max(attribute=’val’) }}
Точно так же здесь мы используем фильтр «max», чтобы получить максимальное число из данного набора данных.
Итак, это были примеры некоторых фильтров, доступных в Ansible. Существует множество других фильтров, с помощью которых можно обрабатывать и форматировать данные.
Заключение
В этой статье мы рассмотрели фильтры Ansible. Мы установили, зачем нужны фильтры при анализе данных, и рассмотрели некоторые фильтры, предоставляемые плагином. Мы надеемся, что смогли помочь вам понять, почему фильтры важны, и, что более важно, теперь вы понимаете, как вы можете использовать их в своих интересах. Не стесняйтесь оставлять любые вопросы в разделе комментариев.