Перейти к основному содержимому

Настройка ansible.cfg. Зачем и как?

·364 слов·2 минут
Работа
Юрий Семеньков
Автор
Юрий Семеньков
DevOps, tech, geek, mentor

ansible.cfg — это файл с различными настройками для Ansible. По умолчанию Ansible будет искать этот файл в разных местах.

Если мы храним наши ansible-плейбуки в git-репозитории и прокатываем их автоматизированно, с помощью CI-системы (Jenkins, Gitlab CI, etc), то мы можем хранить конфиг-файл прямо в корне нашего репозитория.

С помощью команды ansible-config init –disabled > ansible.cfg можно сгенерить файл со всеми настройками, но в закомментированном виде.

Конфиг описывается в ini-формате и разбит на категории, вроде [defaults]. Все эти настройки можно так же передать программе через переменные окружения, типа ANSIBLE_PIPELINING=True

Вот пример моего ansible.cfg файла:

[defaults]
host_key_checking=False
pipelining = True
strategy = free
callbacks_enabled = timer, profile_roles
forks = 40
deprecation_warnings=False
stdout_callback = yaml

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
retries=3
  • host_key_checking - отвечает за проверку host keys. ⚠️ Небезопасно, используйте с осторожностью. (ну, я должен это написать)
  • pipelining - ansible поднимает ssh-сессию для каждой команды. Pipelining позволяет протолкнуть сразу несколько команд через одну сессию. Это существенно может ускорить выполнение заданий, но разработчики предупреждают, что это может вызывать проблемы, если на серверах включен requiretty в /etc/sudoers.
  • strategy - стратегия выполнения тасок. free позволяет выполнять таски на разных хостах асинхронно. Например у тебя есть task1, task2, task3. По умолчанию Ansible будет ждать, пока task1 завершится на всех хостах.
  • callbacks_enabled - включает различные callback плагины. Например, для отображения времени выполнения тасок.
  • forks - указываем максимальное количество параллельных подключений. По умолчанию - 5, что довольно мало. Увеличение этого числа сильно ускоряет выполнение плейбуков на больших инвентори, но и увеличивает нагрузку на процессор.
  • deprecation_warnings - отключаем различные уведомления о deprecated функционале.
  • stdout_callback = yaml - помогает лучше отформатировать вывод ошибок и дебаг-команд. Подробнее.
  • Под группой [ssh_connection] содержатся различные настройки для SSH-подключений, примерно такие же какие мы можем указать в ssh-config файле.

Так же в переменных окружения я передаю:

  • ANSIBLE_VAULT_PASSWORD_FILE: '/tmp/vault.pass' - путь к файлу, где лежит пароль от ansible-vault. Мы же не храним его в репозитории, а прокидываем в среду исполнения извне (например из Gitlab Variables или Infisical).
  • ANSIBLE_DISPLAY_OK_HOSTS: 'False' и ANSIBLE_DISPLAY_SKIPPED_HOSTS: ‘False’, чтобы не выводить информацию об ОК- и SKIPPED-хостах, зачем этот мусор…

В общем и целом, использование ansible.cfg — это довольно удобный способ указать глобальные настройки при работе с репозиторием несколькими инженерами или с помощью систем автоматизации.

Related

Аутентификация и авторизация. В чем разница?
·222 слов·2 минут
Работа
SLI, SLO и SLA. В чем разница?
·242 слов·2 минут
Работа
Не усложняй
·471 слово·3 минут
Работа