Настройка Ansible: файл ansible.cfg и приоритеты конфигурации

Рейтинг: 55.2% · 12 голосов
Подробный курс по Ansible с прицелом на экзамен RHCE EX294: установка и инвентарь, плейбуки, переменные и факты, Vault, циклы и условия, шаблоны Jinja2, роли и коллекции, Execution Environments и ansible-navigator, управление системами (диски, LVM, cron, SELinux, firewalld). Примеры на RHEL/Fedora. Актуально на 2026.
Ответить
Аватара пользователя
Maksim_DevOps
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Настройка Ansible: файл ansible.cfg и приоритеты конфигурации

Сообщение Maksim_DevOps »

Оглавление курса (47)
  1. Что такое Ansible и зачем он нужен: автоматизация без агентов
  2. Сертификация RHCE и экзамен EX294: что внутри и как готовиться
  3. Архитектура Ansible: control node, узлы, модули и плагины
  4. Установка Ansible на control node: dnf, pip и версии ansible-core
  5. Подготовка управляемых узлов: SSH, пользователь и sudo
  6. Инвентарь Ansible: hosts, группы и переменные
  7. Настройка Ansible: файл ansible.cfg и приоритеты конфигурации (вы здесь)
  8. Host patterns и инструменты командной строки Ansible
  9. Ad hoc команды Ansible: быстрые задачи без плейбука
  10. Ansible playbook: что это такое и как устроен
  11. Структура плейбука: play, task, модули и переменные
  12. Запуск плейбуков: проверка, теги, ограничения и отладка
  13. Параллелизм и порядок выполнения: forks, serial, strategy
  14. Факты Ansible: сбор информации об узлах
  15. Переменные Ansible: типы, объявление и приоритет
  16. Регистрация результатов и специальные переменные
  17. Ansible Vault: шифрование паролей и секретов
  18. Организация инвентаря: group_vars, host_vars и вложенные группы
  19. Динамический инвентарь и инвентарные плагины
  20. Циклы в Ansible: loop, списки и словари
  21. Повтор задачи до условия: until, retries и delay
  22. Условия в Ansible: директива when и логика
  23. Jinja2 в Ansible: выражения, фильтры и подстановки
  24. Обработчики Ansible: handlers, notify и flush_handlers
  25. Обработка ошибок: failed_when, changed_when и ignore_errors
  26. Блоки в Ansible: block, rescue и always
  27. Управление файлами: модули file, copy, fetch и stat
  28. Архивы и сборка файлов: archive, unarchive, assemble
  29. Точечное редактирование файлов: lineinfile и blockinfile
  30. Шаблоны Jinja2: модуль template и динамические конфиги
  31. Jinja2 продвинуто: фильтры, циклы, макросы и lookup
  32. Модули Ansible: ansible-doc и поиск нужного модуля
  33. Разработка собственного модуля Ansible на Python
  34. Роли Ansible и Ansible Galaxy: переиспользование
  35. Разработка роли Ansible: создание с нуля
  36. Зависимости ролей и requirements.yml
  37. Коллекции Ansible: ansible.posix, community и своя коллекция
  38. Execution Environments: контейнеры для запуска Ansible
  39. Сборка Execution Environment с ansible-builder
  40. ansible-navigator: запуск плейбуков в Execution Environment
  41. Управление SSH-ключами через Ansible: authorized_key
  42. Управление дисками: filesystem, mount и parted
  43. LVM через Ansible: тома, группы и расширение
  44. Планировщик задач: cron и systemd timers через Ansible
  45. Безопасность: hardening SSH и репозитории dnf/yum
  46. SELinux через Ansible: булевы, контексты и порты
  47. Сквозной проект и подготовка к экзамену EX294
Представь: ты пишешь первый плейбук, запускаешь его, а в ответ - "Permission denied" или вопрос про SSH-ключ хоста, который ломает автоматизацию. Ты лезешь в man, гуглишь, добавляешь флаги в командную строку, и через неделю у тебя простыня из ключей -u, --become, --inventory, которую невозможно вспомнить. Так вот, 90 процентов этой боли снимается одним файлом - ansible.cfg в каталоге проекта. Этот урок про то, как работает настройка Ansible, где лежит конфигурация, кто кого перебивает, и почему свой локальный ansible.cfg - не просто удобство, а то, что реально экономит минуты на экзамене RHCE.

Где Ansible ищет ansible.cfg и какой приоритет

Главное, что надо понять про конфигурацию Ansible: файлов конфигурации может быть несколько, но рабочим становится РОВНО ОДИН. Ansible не сливает их между собой и не докидывает недостающие параметры из соседнего файла. Он идёт по списку мест сверху вниз, берёт ПЕРВЫЙ найденный ansible.cfg и на этом останавливается. Все остальные игнорируются полностью.

Порядок поиска ansible.cfg такой:
  • ANSIBLE_CONFIG - если задана эта переменная окружения, берётся файл по указанному в ней пути. Высший приоритет, перебивает всё.
  • ./ansible.cfg - файл в текущем каталоге, откуда ты запускаешь ansible. Это и есть локальный конфиг проекта.
  • ~/.ansible.cfg - файл в домашнем каталоге пользователя.
  • /etc/ansible/ansible.cfg - системный, общий для всех. Кладётся пакетом, по умолчанию почти пустой.
Проверить, какой именно файл подхватился прямо сейчас, проще всего так:

Код: Выделить всё

$ ansible --version
ansible [core 2.16.x]
  config file = /home/devops/project/ansible.cfg
  ...
Строка config file - это и есть ответ на вопрос "откуда сейчас читается ansible конфигурация". Если там твой проектный путь - всё правильно. Если /etc/ansible/ansible.cfg или вообще None - значит твой локальный файл не там лежит или сработала защита, о которой ниже.

Изображение

Ключевые параметры ansible.cfg, которые реально нужны

Файл ansible.cfg - это обычный INI: секции в квадратных скобках и пары ключ = значение. Базовая настройка Ansible живёт в секции [defaults], повышение привилегий - в [privilege_escalation]. Разберём то, что встречается каждый день.

Код: Выделить всё

[defaults]
inventory = ./inventory
remote_user = devops
host_key_checking = False
forks = 20
roles_path = ./roles
collections_path = ./collections

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
Что тут происходит:
  • inventory - путь к файлу или каталогу инвентаря. Задал один раз - и больше не пишешь -i в каждой команде.
  • remote_user - под каким пользователем подключаться к управляемым хостам по SSH. По умолчанию берётся текущий локальный пользователь, что часто не то, что нужно.
  • host_key_checking - проверка SSH-ключа хоста. На свежих хостах, которых нет в known_hosts, проверка вешает плейбук на интерактивном вопросе "yes/no". В лабе и на тестовых стендах ставят False. В проде - думай головой, это снижение безопасности.
  • forks - сколько хостов Ansible обрабатывает параллельно. По умолчанию 5, что мало для большого инвентаря. 20-50 ускоряет прогон в разы.
  • roles_path - где искать роли, помимо стандартного ./roles. Можно перечислять через двоеточие.
  • collections_path - где искать установленные коллекции (модули вроде ansible.posix или community.general живут именно в коллекциях).
  • become - включить повышение привилегий по умолчанию. Аналог sudo для всех задач, где явно не сказано иначе.
Запомни про булевы значения: Ansible понимает True/False, yes/no, 1/0. Регистр в первой букве лучше держать единообразно, чтобы файл читался.

Как посмотреть всю конфигурацию: ansible-config dump и list

Руками сверять десятки параметров - путь в никуда. Для этого есть отдельная утилита ansible-config, и на экзамене она экономит время не хуже самого конфига.

Код: Выделить всё

# полный список всех параметров с описанием и значениями по умолчанию
$ ansible-config list

# текущие действующие значения (с учётом твоего ansible.cfg и переменных)
$ ansible-config dump

# только то, что ОТЛИЧАЕТСЯ от значений по умолчанию - самое полезное
$ ansible-config dump --only-changed
Команда ansible-config dump --only-changed - твой главный диагностический инструмент. Она показывает ровно то, что ты сам поменял, и откуда это значение пришло. В выводе рядом со значением Ansible помечает источник: из файла конфигурации, из переменной окружения или дефолт. Если плейбук ведёт себя странно, первым делом смотри сюда - часто оказывается, что какая-нибудь переменная ANSIBLE_* из соседнего шелла перебивает твой файл.

Переменные окружения ANSIBLE_ и общий приоритет

Почти у каждого параметра ansible.cfg есть зеркальная переменная окружения с префиксом ANSIBLE_. Это удобно для CI/CD и для разовых запусков, когда лезть в файл не хочется.

Код: Выделить всё

$ export ANSIBLE_INVENTORY=./inventory
$ export ANSIBLE_REMOTE_USER=devops
$ export ANSIBLE_HOST_KEY_CHECKING=False
$ ansible all -m ansible.builtin.ping
Теперь про итоговый приоритет настроек, от слабого к сильному:
  • значения по умолчанию, зашитые в ansible-core;
  • параметры из того ansible.cfg, который победил в поиске;
  • переменные окружения ANSIBLE_*;
  • флаги командной строки (-u, --become, -i, -f и так далее) - перебивают всё.
То есть переменная ANSIBLE_REMOTE_USER сильнее, чем remote_user в файле, а ключ -u в команде сильнее их обоих. Это логично: чем ближе к моменту запуска ты задал параметр, тем выше его приоритет.

Типичные грабли
  • Конфиг в мире-для-всех каталоге не читается. Если каталог доступен на запись посторонним (классика - /tmp или каталог с правами 0777), Ansible из соображений безопасности откажется грузить ./ansible.cfg и просто молча проигнорирует его. В ansible --version увидишь, что config file = None или указывает на /etc/ansible. Лечится правами на каталог проекта (например 0755) и владельцем-тобой.
  • Несколько файлов и сюрприз с приоритетом. Есть ~/.ansible.cfg с одними настройками и ./ansible.cfg с другими - победит локальный, и параметры из домашнего НЕ доедут. Файлы не складываются. Всегда держи полный набор нужных параметров в одном файле.
  • Забытая переменная окружения. Кто-то в .bashrc прописал export ANSIBLE_REMOTE_USER=root, а ты потом полдня не понимаешь, почему подключение идёт не под тем юзером. ansible-config dump --only-changed покажет источник env.
  • Параметр не в той секции. become = True, положенный в [defaults] вместо [privilege_escalation], в современных версиях ansible-core обычно ещё подхватывается, но это не по правилам и сбивает с толку. Держи become-параметры в своей секции.
  • Опечатка в имени параметра. Ansible не ругается на неизвестные ключи в ansible.cfg - он их тихо пропускает. Написал host_key_check вместо host_key_checking - параметр просто не сработает, и ошибки не будет. Сверяйся через ansible-config list.
Мини-лаба: собери свой ansible.cfg руками

Повтори на любой машине с установленным ansible-core (на RHEL/Fedora ставится через dnf install ansible-core; на Ubuntu/Debian - apt install ansible; в RED OS и Astra тоже есть в репозиториях):
  • Создай каталог проекта, например ~/ansible-lab, и зайди в него.
  • Запусти ansible --version и посмотри, какой config file сейчас активен (скорее всего системный или None).
  • Создай в каталоге файл ansible.cfg с секцией [defaults], пропиши inventory = ./inventory, remote_user = твой_юзер, host_key_checking = False, forks = 15.
  • Снова запусти ansible --version и убедись, что config file теперь указывает на твой локальный файл.
  • Выполни ansible-config dump --only-changed и найди в выводе свои значения вместе с пометкой источника.
  • Экспортируй export ANSIBLE_FORKS=30, снова сделай dump --only-changed и убедись, что forks теперь приходит из env, а не из файла - так ты увидишь приоритет своими глазами.
  • Сними переменную (unset ANSIBLE_FORKS) и проверь, что значение вернулось к файловому.
После этого упражнения у тебя в голове будет чёткая картина: где лежит ansible.cfg, кто кого перебивает и как это проверить за пять секунд.

Связь с экзаменом RHCE (EX294)

На экзамене RHEL 9 (EX294, ansible-core свежей ветки, запуск часто через ansible-navigator с execution environment) тебе НЕ дают готовую удобную конфигурацию. Первое, что делает грамотный сдающий, - заходит в свой рабочий каталог и создаёт там ansible.cfg, где сразу прописаны inventory, remote_user и become. После этого все последующие задания запускаются простым ansible-navigator run playbook.yml без вороха флагов, и ты не теряешь время и баллы на ручном указании инвентаря в каждой команде. Это маленькая привычка, которая на длинной дистанции экзамена реально экономит минуты.

Контрольные вопросы
  • В каком порядке Ansible ищет ansible.cfg и сколько файлов в итоге применяется?
  • Что сильнее: remote_user в ansible.cfg, переменная ANSIBLE_REMOTE_USER или флаг -u в команде? Почему именно такой порядок?
  • Какой командой быстро увидеть только изменённые относительно дефолта параметры и их источник?
  • Почему Ansible может молча проигнорировать ./ansible.cfg, и как это починить?
Итог

Конфигурация Ansible - это один победивший файл, а не сумма всех. Порядок поиска: ANSIBLE_CONFIG, затем ./ansible.cfg, затем ~/.ansible.cfg, затем /etc/ansible/ansible.cfg - первый найденный выигрывает. Поверх файла всё перебивают переменные ANSIBLE_*, а поверх них - флаги командной строки. Держи локальный ansible.cfg в каталоге проекта, проверяй активный файл через ansible --version, а действующие значения - через ansible-config dump --only-changed. Сделаешь это привычкой - и настройка Ansible перестанет быть источником сюрпризов и в работе, и на RHCE.
👍2 ❤️1 🔥 😄 🤔2
Аватара пользователя
torchadmin
Сообщения: 2
Зарегистрирован: 22 май 2026, 08:30

Re: Настройка Ansible: файл ansible.cfg и приоритеты конфигурации

Сообщение torchadmin »

Спасибо, наконец дошло почему мой ~/.ansible.cfg не работал - в проекте лежал свой и он перебивал. Файлы реально не складываются, проверил через dump --only-changed.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
RegexGeek
Сообщения: 1
Зарегистрирован: 18 май 2026, 12:55

Re: Настройка Ansible: файл ansible.cfg и приоритеты конфигурации

Сообщение RegexGeek »

А на самом экзамене ansible.cfg надо самому создавать или он уже лежит в рабочем каталоге? Готовлюсь к EX294 на RHEL 9, хочу понимать сколько времени закладывать.
👍 ❤️1 🔥 😄 🤔1
Ответить
← Предыдущая глава
Инвентарь Ansible: hosts, группы и переменные
Следующая глава →
Host patterns и инструменты командной строки Ansible

Все главы курса «Ansible: автоматизация и подготовка к RHCE (EX294)»

Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое ansible простыми словамиansible для начинающих с чего начатьустановка ansible на linuxansible inventory и hosts файлчто такое playbook в ansibleструктура ansible playbook из чего состоит

Вернуться в «Ansible: автоматизация и подготовка к RHCE (EX294)»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость