Введение
Вы готовите управляющий узел Ansible для управления двумя серверами Linux. Прежде чем писать автоматизацию, вам нужна предсказуемая установка и подтверждение того, что управляющий узел может выполнять модули Python на обоих целевых узлах.
В этой лабораторной работе вы создадите виртуальное окружение проекта, установите Ansible Core из локального кэша пакетов, активируете его в терминале и проверите два настоящих SSH-соединения с помощью предоставленного инвентаря. Достаточно базовых навыков работы с командной строкой; опыт работы с Ansible не требуется.
Создайте изолированное окружение управляющего узла
На этом шаге вы создадите окружение Python для собственной установки Ansible.
Ansible работает на управляющем узле и подключается к управляемым узлам по SSH. Ваш терминал LabEx — это управляющий узел Ubuntu. Два подготовленных контейнера Linux, web1 и web2, выступают отдельными управляемыми узлами: у них разные адреса, имена хостов и файловые системы, но общее ядро виртуальной машины. Команды Docker и изменения настроек входа на платформу не понадобятся.
Виртуальное окружение Python отделяет пакеты проекта от операционной системы и общих инструментов курса. В образе уже есть общая команда Ansible для инфраструктуры, но ваша задача — установить отдельную копию в /home/labex/project/.venv.
Откройте терминал. Выберите каталог проекта командой cd; дальнейшие относительные пути отсчитываются от него:
cd /home/labex/project
Команда pwd выводит текущий рабочий каталог:
pwd
Она должна вывести /home/labex/project. Работайте в этом каталоге на протяжении всей лабораторной работы.
Команда ansible-python выбирает подготовленный Python курса. Параметр --version показывает его версию:
ansible-python --version
Ожидаемый результат — Python 3.12.15. Системный Python управляющего узла остаётся отдельным; не заменяйте его.
Параметр -m venv запускает модуль виртуальных окружений Python. Последний аргумент .venv задаёт имя создаваемого каталога внутри проекта. Точка в начале скрывает его из обычного списка каталогов:
ansible-python -m venv .venv
Обычно команда завершается без вывода. Она создаёт окружение и pip — установщик пакетов Python; сам Ansible пока не установлен.
Запустите Python нового окружения по относительному пути. Так вы убедитесь, что изолированный интерпретатор можно использовать без предварительной активации:
.venv/bin/python --version
Он также должен вывести Python 3.12.15. Обе команды Python используют один выпуск Python, но пакеты, установленные в .venv, принадлежат этому проекту.
Установите и активируйте Ansible без доступа к сети
На этом шаге вы установите закреплённый выпуск Ansible Core в .venv и настроите терминал на его использование.
Ansible Core предоставляет команду ansible и встроенные модули, используемые в этом курсе. Подготовленные wheel-файлы — это локальные пакеты Python, поэтому установка не зависит от загрузок из интернета. Файл требований задаёт совместимые закреплённые версии.
Следующая команда запускает pip через Python проекта. Подкоманда install устанавливает пакеты, --no-index отключает сетевые индексы пакетов, --find-links выбирает локальный каталог wheel-файлов, а -r читает файл требований:
.venv/bin/python -m pip install --no-index --find-links /opt/labex/ansible-course/wheels -r /opt/labex/ansible-course/requirements.txt
В выводе перечислены пакеты, обработанные из локального кэша; в конце появляется Successfully installed ..., включая ansible-core-2.21.5. При повторной установке вместо этого может появиться Requirement already satisfied.
Активация помещает каталог команд окружения в начало пути поиска текущей оболочки. Команда source выполняет сценарий активации в текущем терминале, поэтому изменение действует и для последующих команд:
source .venv/bin/activate
Теперь приглашение может начинаться с (.venv). Терминал использует zsh; команда rehash обновляет кэш расположений команд после установки новых исполняемых файлов:
rehash
Команда command -v показывает, какой исполняемый файл выбирается по имени команды:
command -v ansible
Ожидаемый результат — /home/labex/project/.venv/bin/ansible. Общий путь, например /usr/local/bin/ansible, не подтверждает активацию установки проекта. Если вы откроете новый терминал, вернитесь в проект, снова активируйте окружение и выполните rehash.
Теперь проверьте версию запускаемого Ansible:
ansible --version
Найдите в выводе следующие поля:
ansible [core 2.21.5]
config file = /home/labex/project/ansible.cfg
...
ansible python module location = /home/labex/project/.venv/lib/python3.12/site-packages/ansible
executable location = /home/labex/project/.venv/bin/ansible
python version = 3.12.15 ...
...
Пути исполняемого файла и модуля показывают, что запускается установка проекта. Файл конфигурации предоставлен в лабораторной работе; настраивать его вы научитесь в следующей группе навыков.
Наконец, команда pip check проверяет совместимость зависимостей установленных пакетов:
.venv/bin/python -m pip check
Ожидаемый результат — No broken requirements found. Теперь у вас есть рабочий управляющий узел без изменения системных пакетов и общих инструментов.
Подключитесь к обоим управляемым узлам
На этом шаге вы изучите подготовленный инвентарь и выполните проверку соединения с использованием Python на обоих целевых узлах SSH.
Инвентарь сообщает Ansible, какими хостами он может управлять. Команда cat выводит содержимое файла; прочитайте предоставленный инвентарь проекта:
cat inventory.ini
Он имеет следующую структуру:
web1 ansible_host=...
web2 ansible_host=...
[all:vars]
ansible_user=automation
ansible_ssh_private_key_file=/home/labex/.local/share/ansible-course/id_ed25519
ansible_python_interpreter=/usr/bin/python3
Вместо ... указаны настоящие адреса; используйте существующие значения. web1 и web2 — имена в инвентаре, а ansible_host задаёт адрес назначения SSH для каждого узла. Секция [all:vars] применяет следующие за ней параметры соединения к обоим хостам. automation — обычная учётная запись внутри управляемых узлов, а не ваша учётная запись labex на управляющем узле. Лабораторная работа предоставляет новый учебный ключ и доверенные ключи хостов; генерировать ключи и менять настройки SSH не требуется.
Путь Python целевого узла /usr/bin/python3 относится к каждому управляемому узлу. Это не Python проекта на управляющем узле: большинству модулей Ansible нужен Python как на целевом, так и на управляющем узле.
Предоставленный ansible.cfg выбирает этот инвентарь при запуске команд из проекта. Шаблон all выбирает все хосты инвентаря; --list-hosts позволяет предварительно просмотреть выбор без запуска модуля:
ansible all --list-hosts
Ожидаются ровно эти два имени хостов; порядок может отличаться:
hosts (2):
web1
web2
Параметр -m выбирает модуль — единицу работы Ansible. ansible.builtin.ping — полное имя встроенного модуля ping. Он подключается по SSH и запускает Python на каждом целевом узле; это не сетевой ICMP ping:
ansible all -m ansible.builtin.ping
Оба хоста должны вернуть результаты со следующими неизменными полями; порядок результатов может отличаться:
web1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Ответ pong подтверждает успешную аутентификацию SSH и выполнение Python на этом хосте. changed: false означает, что проверка соединения не запрашивала изменения конфигурации. Успеха на одном хосте недостаточно: найдите оба имени. UNREACHABLE означает сбой соединения; FAILED — сбой задачи. Пустой список хостов тоже не подтверждает возможность подключения.
Если команда завершается ошибкой, сначала убедитесь, что вы всё ещё находитесь в каталоге проекта, что command -v ansible выбирает .venv/bin/ansible и что предоставленный инвентарь по-прежнему содержит оба исходных адреса назначения. Не меняйте настройки входа, SSH и sudo платформы.
Резюме
Вы создали изолированное окружение управляющего узла, установили пакеты Ansible Core с закреплёнными версиями из локального кэша, активировали команды проекта и проверили их пути и зависимости. Вы изучили предоставленный инвентарь и получили ответ Python pong от каждого отдельного узла, управляемого по SSH. Теперь вы умеете различать Python управляющего узла, Python целевого узла и имена в инвентаре и готовы изучать конфигурацию проекта.



