Установка Ansible на control node: dnf, pip и версии ansible-core

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

Установка Ansible на control node: dnf, pip и версии ansible-core

Сообщение 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
Ты можешь сколько угодно читать про плейбуки и роли, но пока на твоей машине нет рабочего Ansible, всё это теория. И тут начинается классическая боль новичка: ставишь что-то наугад, потом ansible --version выдаёт непонятную версию, плейбук падает с "module not found", а на экзамене RHCE ты теряешь время на ровном месте. Поэтому в этом уроке разбираем установку Ansible по уму: куда ставить, что именно ставить, какую версию выбрать и как проверить, что всё взлетело.

Сразу зафиксируем главную мысль, которая экономит кучу нервов. Ansible ставится ТОЛЬКО на управляющую машину - control node. На управляемые узлы (managed nodes) ничего ставить не надо, там нужен лишь Python и доступ по SSH. Это agentless-подход: никаких демонов и агентов на серверах. Запомни это сразу, потому что новички часто пытаются "поставить ansible на сервер, которым управляют" и потом не понимают, зачем.

Установка Ansible на Linux: пакет из репозитория (основной путь)

В мире RHEL/Fedora установка и настройка Ansible начинается с менеджера пакетов dnf. Здесь важно понимать разницу между двумя пакетами.
  • ansible-core - это сам движок: интерпретатор плейбуков, команды ansible, ansible-playbook, ansible-doc плюс встроенная коллекция ansible.builtin. Лёгкий, минимальный, предсказуемый.
  • ansible - это "батарейки в комплекте": тот же ansible-core плюс несколько тысяч готовых модулей из популярных коллекций (community.general, ansible.posix и так далее).
На RHEL 9 ansible-core лежит прямо в репозитории AppStream, никакой EPEL или сторонних репозиториев подключать не нужно. Ставим так:

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

# RHEL / Rocky / AlmaLinux / CentOS Stream 9
sudo dnf install -y ansible-core

# Если нужен пакет с коллекциями "из коробки"
sudo dnf install -y ansible
На Fedora всё то же самое, dnf тот же, имена пакетов те же. Если ты на отечественном дистрибутиве - RED OS ставит Ansible так же через dnf (sudo dnf install ansible-core), потому что это RHEL-совместимая система. На Astra Linux логика другая, это Debian-based, там идёт apt (про apt поговорим ниже врезкой).

После установки сразу проверяем, что получилось:

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

ansible --version
Вывод будет примерно такой:

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

ansible [core 2.16.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/devops/.ansible/plugins/modules', ...]
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /home/devops/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.11.x
Разбери этот вывод построчно - он отвечает на половину вопросов новичка. Версия ansible-core в квадратных скобках; путь к глобальному конфигу /etc/ansible/ansible.cfg; где Ansible ищет модули и коллекции; и какой Python он использует. Заметь: ansible-core напрямую зависит от версии Python на control node. Современные ansible-core (2.16 и новее) требуют Python 3.10+ именно на управляющей машине.
Лайфхак для экзамена: на EX294 control node тебе обычно уже подготовлен, но ansible --version - это первое, что стоит выполнить. Убедись, что движок на месте и версия адекватная, прежде чем писать плейбуки.
Изображение

Ansible install через pip в виртуальном окружении (когда нужна конкретная версия)

Пакет из dnf удобен, но привязан к версии, которую решил поставлять дистрибутив. Иногда тебе нужна свежая или, наоборот, строго определённая версия ansible-core - например, повторить окружение, в котором писались твои плейбуки, или прогнать тесты под конкретный релиз. Тогда правильный способ - pip внутри venv, чтобы не сломать системный Python.

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

# Ставим инструменты сборки venv (если ещё нет)
sudo dnf install -y python3 python3-pip

# Создаём изолированное окружение в каталоге проекта
python3 -m venv ~/ansible-lab/.venv

# Активируем его
source ~/ansible-lab/.venv/bin/activate

# Внутри venv ставим Ansible (community-пакет с коллекциями)
pip install --upgrade pip
pip install ansible
Хочешь только движок без коллекций - ставь pip install ansible-core. Нужна конкретная версия - указывай её через двойное равно:

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

# Конкретная версия движка
pip install "ansible-core==2.16.6"

# Или конкретная версия community-пакета
pip install "ansible==9.5.1"
Пока venv активирован, твоя оболочка видит именно этот Ansible, а ansible --version покажет executable location внутри .venv. Чтобы выйти из окружения - команда deactivate. Большой плюс venv: ты ставишь коллекции и зависимости без root, ничего системного не трогаешь, и проект легко переносится. Минус для экзамена - на RHCE проверяется штатная установка из репозитория, так что pip-venv это скорее инструмент для боевых проектов и CI, чем для самого EX294.
Врезка: Ansible на Ubuntu/Debian (apt)
Для общего кругозора - если ты администрируешь не только RHEL. Установка Ansible на Ubuntu и Debian идёт через apt:

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

sudo apt update
sudo apt install -y ansible
Пакет ansible в репозиториях Debian/Ubuntu обычно отстаёт от апстрима, поэтому для свежих версий часто подключают официальный PPA (sudo add-apt-repository --yes --update ppa:ansible/ansible) или ставят тем же pip в venv. Команды самого Ansible после установки одинаковы на любом дистрибутиве - меняется только способ установки. Но помни: для подготовки к RHCE твой control node - это RHEL, и основным остаётся dnf.
Где живут конфиги и подготовка рабочего каталога проекта

Ansible ищет конфиг ansible.cfg по строгому порядку приоритета, и это надо понимать, иначе будешь гадать, почему настройки "не подхватываются":
  • переменная окружения ANSIBLE_CONFIG (если задана - побеждает всё);
  • файл ansible.cfg в ТЕКУЩЕМ каталоге, откуда ты запускаешь команду;
  • файл ~/.ansible.cfg в домашнем каталоге пользователя;
  • глобальный /etc/ansible/ansible.cfg.
На практике это значит: правильный способ работать - держать ansible.cfg прямо в каталоге проекта. Тогда настройки путешествуют вместе с кодом, и ты не зависишь от глобального файла. Соберём минимальную структуру проекта руками:

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

mkdir -p ~/ansible-lab/{inventory,group_vars,host_vars,roles}
cd ~/ansible-lab

# Локальный конфиг проекта
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts.ini
remote_user = devops
host_key_checking = False
EOF

# Простейший инвентарь
cat > inventory/hosts.ini <<'EOF'
[web]
node1.example.com
node2.example.com
EOF
Теперь из каталога ~/ansible-lab команда ansible-config dump --only-changed покажет, какие параметры ты переопределил относительно дефолтов - удобно для самопроверки. А ansible-config view выведет активный конфиг целиком.

Типичные грабли
  • Ставят ansible на управляемые узлы. Не надо. На целевых машинах нужен только Python (как правило, уже стоит) и SSH. Ansible живёт исключительно на control node.
  • Путают ansible и ansible-core. Поставил ansible-core, а в плейбуке используешь модуль из community.general - получаешь "couldn't resolve module/action". Лечится либо установкой пакета ansible, либо ansible-galaxy collection install нужной коллекции.
  • Смешивают dnf-версию и pip-версию. Поставил из dnf, потом pip-ом сверху в системный Python - и теперь две установки дерутся за PATH. Если используешь pip, держи его строго в venv.
  • Старый Python на control node. Современный ansible-core не запустится на Python ниже 3.10. ansible --version всегда показывает используемый python version - сверяйся с ним.
  • Забывают про приоритет ansible.cfg. Правят /etc/ansible/ansible.cfg, а реально работает локальный файл в каталоге проекта, который перекрывает глобальный. Запускай ansible --version - он покажет, какой config file активен сейчас.
Мини-лаба

Сделай руками, не подсматривая:
  • Установи ansible-core через dnf на RHEL/Fedora (или в учебной ВМ). Выполни ansible --version и найди в выводе: версию core, путь к config file, версию Python.
  • Создай venv в каталоге проекта, поставь туда pip install "ansible-core==2.16.6" (или другую версию), активируй и сравни ansible --version с системным. Затем deactivate.
  • Собери структуру каталога проекта с локальным ansible.cfg и инвентарём, как в примере выше. Проверь, что Ansible видит именно твой конфиг (ansible-config dump --only-changed из каталога проекта).
  • Ради эксперимента поставь пакет ansible (с коллекциями) и сравни вывод ansible-galaxy collection list до и после.
Контрольные вопросы
  • Чем отличается пакет ansible-core от пакета ansible и когда какой ставить?
  • Что нужно установить на управляемый узел, чтобы Ansible мог им управлять?
  • В каком порядке Ansible ищет файл ansible.cfg и почему держать его в каталоге проекта - хорошая практика?
  • Когда оправдан pip install в venv вместо dnf, и какая минимальная версия Python нужна современному ansible-core?
Итог

Установка control node - это первый шаг и на боевом проекте, и на экзамене RHCE. Основной путь на RHEL/Fedora и RED OS - dnf install ansible-core (или ansible с коллекциями). Когда нужна конкретная версия - pip в venv внутри проекта. На Ubuntu/Debian тот же результат даёт apt. Управляемым узлам не нужен Ansible - только Python. И всегда первым делом запускай ansible --version: одна команда отвечает, что за версия установлена, какой Python используется и какой конфиг сейчас активен. С этим фундаментом дальше можно спокойно браться за инвентарь и плейбуки.
👍1 ❤️2 🔥3 😄 🤔1
Аватара пользователя
pat5678
Сообщения: 1
Зарегистрирован: 18 май 2026, 05:48

Re: Установка Ansible на control node: dnf, pip и версии ansible-core

Сообщение pat5678 »

Спасибо, наконец дошло в чем разница ansible-core и ansible. Поставил core, а плейбук с community.general падал, теперь понятно почему.
👍 ❤️ 🔥 😄 🤔1
Аватара пользователя
cadi
Сообщения: 1
Зарегистрирован: 12 май 2026, 21:26

Re: Установка Ansible на control node: dnf, pip и версии ansible-core

Сообщение cadi »

Вопрос: на экзамене RHCE лучше из dnf ставить или через venv? По уроку понял что dnf, но хочу убедиться что pip там вообще не нужен.
👍1 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Архитектура Ansible: control node, узлы, модули и плагины
Следующая глава →
Подготовка управляемых узлов: SSH, пользователь и sudo

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

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

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

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

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