Вопрос или проблема
Я только что написал конфигурацию 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, так как со временем могут появляться новые функции, которые улучшат управление выводом логов.