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
— это довольно удобный способ указать глобальные настройки при работе с репозиторием несколькими инженерами или с помощью систем автоматизации.