Сразу зафиксируем главную мысль, которая экономит кучу нервов. 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 / Rocky / AlmaLinux / CentOS Stream 9
sudo dnf install -y ansible-core
# Если нужен пакет с коллекциями "из коробки"
sudo dnf install -y ansible
После установки сразу проверяем, что получилось:
Код: Выделить всё
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
Лайфхак для экзамена: на 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==2.16.6"
# Или конкретная версия community-пакета
pip install "ansible==9.5.1"
Где живут конфиги и подготовка рабочего каталога проектаВрезка: Ansible на Ubuntu/Debian (apt)
Для общего кругозора - если ты администрируешь не только RHEL. Установка Ansible на Ubuntu и Debian идёт через apt:Пакет ansible в репозиториях Debian/Ubuntu обычно отстаёт от апстрима, поэтому для свежих версий часто подключают официальный PPA (sudo add-apt-repository --yes --update ppa:ansible/ansible) или ставят тем же pip в venv. Команды самого Ansible после установки одинаковы на любом дистрибутиве - меняется только способ установки. Но помни: для подготовки к RHCE твой control node - это RHEL, и основным остаётся dnf.Код: Выделить всё
sudo apt update sudo apt install -y ansible
Ansible ищет конфиг ansible.cfg по строгому порядку приоритета, и это надо понимать, иначе будешь гадать, почему настройки "не подхватываются":
- переменная окружения ANSIBLE_CONFIG (если задана - побеждает всё);
- файл ansible.cfg в ТЕКУЩЕМ каталоге, откуда ты запускаешь команду;
- файл ~/.ansible.cfg в домашнем каталоге пользователя;
- глобальный /etc/ansible/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 на управляемые узлы. Не надо. На целевых машинах нужен только 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 используется и какой конфиг сейчас активен. С этим фундаментом дальше можно спокойно браться за инвентарь и плейбуки.