Ansible — это мощный инструмент автоматизации, используемый для управления и настройки систем. При выполнении плейбуков Ansible принято захватывать выходные данные команд и сохранять их в переменных для дальнейшей обработки. Однако вывод иногда содержит управляющие символы, например символ u001b, что может затруднить чтение и обработку вывода. В этой статье мы рассмотрим различные методы удаления этих управляющих символов из книги воспроизведения Ansible stdout_lines.
Метод 1: использование фильтра regex_replace
Ansible предоставляет удобный фильтр regex_replace, который позволяет заменять определенные шаблоны в строке. Мы можем использовать этот фильтр для удаления управляющих символов из stdout_lines. Вот пример:
- name: Remove control characters using regex_replace
vars:
output: "{{ command_result.stdout_lines[0] | regex_replace('(\\u001b)\\[[0-9;]*[mK]','') }}"
debug:
var: output
Метод 2: использование фильтра перевода
Другой подход — использовать фильтр перевода в Ansible. Фильтр перевода заменяет символы в строке на основе таблицы перевода. Мы можем определить таблицу перевода, включающую управляющие символы, которые мы хотим удалить. Вот пример:
- name: Remove control characters using translate
vars:
control_characters: "\u001b"
output: "{{ command_result.stdout_lines[0] | translate({control_characters: ''}) }}"
debug:
var: output
Метод 3: написание собственного подключаемого модуля фильтра
Если вы часто встречаете управляющие символы в своих книгах воспроизведения Ansible, вы можете создать собственный подключаемый модуль фильтра для их удаления. Такой подход обеспечивает большую гибкость и возможность повторного использования. Вот упрощенный пример плагина пользовательского фильтра:
# filters/remove_control_characters.py
import re
def remove_control_characters(value):
return re.sub(r'\u001b\[[0-9;]*[mK]', '', value)
class FilterModule(object):
def filters(self):
return {
'remove_control_characters': remove_control_characters,
}
}
Чтобы использовать этот плагин пользовательского фильтра в своей книге, выполните следующие действия:
- Создайте каталог
filter_plugins
в каталоге вашей книги игр. - Поместите файл
remove_control_characters.py
в каталогfilter_plugins
. - Используйте собственный фильтр в своей книге:
- name: Remove control characters using custom filter
vars:
output: "{{ command_result.stdout_lines[0] | remove_control_characters }}"
debug:
var: output
Управляющие символы в Ansible playbook stdout_lines могут ухудшить читаемость и обработку вывода. Однако с помощью таких методов, как regex_replace, Translate и плагинов пользовательских фильтров, мы можем легко удалить эти символы и получить чистый результат. Применяя эти методы, вы можете улучшить рабочие процессы автоматизации Ansible и сделать результаты более удобными и управляемыми.