Удаление управляющих символов из Ansible Playbook stdout_lines: руководство по чистому выводу

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,
        }
}

Чтобы использовать этот плагин пользовательского фильтра в своей книге, выполните следующие действия:

  1. Создайте каталог filter_pluginsв каталоге вашей книги игр.
  2. Поместите файл remove_control_characters.pyв каталог filter_plugins.
  3. Используйте собственный фильтр в своей книге:
- 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 и сделать результаты более удобными и управляемыми.