Вывод журнала Ansible в один строку

Вопрос или проблема

Я только что написал конфигурацию Ansible, чтобы сохранить мой ansible.log в формате одной строки на действие.

[defaults]
log_path = /var/log/ansible.log
nocows=true
stdout_callback=ansible.builtin.oneline
host_key_checking = false
inventory = /test/ansible/hosts.txt

Она прекрасно работает с командой ansible-playbook.

Но если я хочу выполнить эту команду

ansible all -m ping

Я получу многострочную запись в файле журнала.

2024-11-08 10:12:41,689 p=1164 u=root n=ansible | node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.10"
    },
    "changed": false,
    "ping": "pong"
}

Поэтому мне всегда нужно добавлять опцию -o для команд, не связанных с плейбуками

ansible all -m ping -o

чтобы получить мой уютный журнал в одной строке

2024-11-08 10:15:47,895 p=1181 u=root n=ansible | node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3.10"},"changed": false,"ping": "pong","warnings": ["..."]}

Мой вопрос: “Как заставить Ansible всегда использовать флаг -o в любой команде?” Это вообще возможно?

Ответ или решение

Вопрос, который вы подняли о настройке Ansible для автоматического использования флага -o (однострочный вывод) для всех неигровых команд, является интересным и актуальным для многих администраторов и пользователей. Рассмотрим, как добиться этого, а также прокомментируем текущие аспекты настройки.

1. Проблема

Как вы верно заметили, при запуске команд Ansible, таких как ansible all -m ping, без флага -o вывод в лог файл получается многстрочным, тогда как с использованием -o вывод однострочный. Это может затруднить анализ логов, если формат вывода отличается для различных команд.

2. Текущие настройки

Ваши текущие настройки конфигурации Ansible выглядят следующим образом:

[defaults]
log_path = /var/log/ansible.log
nocows = true
stdout_callback = ansible.builtin.oneline
host_key_checking = false
inventory = /test/ansible/hosts.txt

Эти настройки корректны и позволяют вам получить однострочный вывод для команд ansible-playbook. Однако, при использовании команды ansible этот вывод не применяется автоматически.

3. Решение

К сожалению, на данный момент Ansible не предоставляет возможности глобально задать использование флага -o для всех команд. Однако существуют некоторые обходные пути:

  • Создание вспомогательной оболочки (wrapper): Вы можете создать простой скрипт на Bash, который будет добавлять -o ко всем командам ansible, которые вы запускаете. Например:
#!/bin/bash
ansible "$@" -o

Сохраните этот скрипт как ansiblewrapper, сделайте его исполняемым командой chmod +x ansiblewrapper и добавьте в вашу переменную окружения PATH. Теперь вы можете использовать ansiblewrapper вместо ansible, и он будет автоматически добавлять флаг -o.

  • Создание alias в командной оболочке: Если вы не хотите создавать скрипты, вы можете установить alias в вашей оболочке. Например, для Bash вы можете добавить следующее в ваш .bashrc:
alias ansible='ansible -o'

После добавления этой строки запустите source ~/.bashrc, чтобы перезагрузить настройки. Теперь команда ansible будет всегда использовать флаг -o.

4. Заключение

Хотя Ansible не поддерживает автоматическое применение флага -o для всех команд, вы можете использовать простые обходные способы, такие как создание оболочки или alias, чтобы добиться желаемого эффекта. Это значительно упростит ведение логов и упростит анализ информации, что особенно критично в больших инфраструктурах.

Не забывайте поддерживать вашу конфигурацию в актуальном состоянии и следить за обновлениями Ansible, так как со временем могут появляться новые функции, которые улучшат управление выводом логов.

Оцените материал
Добавить комментарий

Капча загружается...