В предыдущей публикации я рассказывал о том, как выполняется установка Ansible. Однако, этот вариант предоставляет лишь CLI консоль без какого либо графического интерфейса. Чтобы получить Ansible с графическим интерфейсом есть несколько вариантов – либо использовать коммерческий Ansible Tower, либо использовать open source решение – Ansible AWX.
Есть несколько вариантов установки Ansible AWX – установка через AWX operator или установка через Docker. Вариант с Docker проще, т.к. он не требует наличия Kubernetes в вашей инфраструктуре. Хотя для целей тестирования его вполне можно развернуть на minikube.
В этой публикации я буду расскажу про вариант установки через Docker. В качестве операционной системы я буду использовать Ubuntu Server 22.04.
Предварительные требования
Все предварительные требования приведены в репозитории продукта.
Кратко перечислю основные из них:
1. Для клонирования репозитория нужен git.
2. Установленный Docker.
3. Также нужен Docker Compose.
4. Для процесса установки еще нужен Ansible.
5. Также нужна утилита OpenSSL.
Давайте установим все необходимые компоненты. О ток, как выполнить установку Ansible я рассказывал в предыдущей публикации.
Для установки оставшихся компонентов выполните следующую команду:
sudo apt install -y git docker.io docker-compose openssl
После завершения процесса установки предварительных компонентов можно перейти к установки основного дистрибутива.
Дополнительно разрешим текущему пользователю запускать команды docker без sudo:
sudo usermod -aG docker $USER
После этого нужно завершить текущую сессию в терминале и установить новую сессию.
Также убедитесь, что на вашем сервере установлены пакеты setuptools-scm и buildx. Они потребуются для сборки.
Установка Ansible AWX
Первый шаг – это клонирование репозитория продукта. Я склонирую самую актуальную версию:
git clone --depth 1 https://github.com/ansible/awx
roman@ansible:~$ git clone --depth 1 https://github.com/ansible/awx
Cloning into 'awx'...
remote: Enumerating objects: 3914, done.
remote: Counting objects: 100% (3914/3914), done.
remote: Compressing objects: 100% (3038/3038), done.
remote: Total 3914 (delta 836), reused 1893 (delta 510), pack-reused 0
Receiving objects: 100% (3914/3914), 16.93 MiB | 9.12 MiB/s, done.
Resolving deltas: 100% (836/836), done.
roman@ansible:~$
Перейдем в директорию проекта:
cd awx
Теперь нужно скорректировать инвентаризационный ф
nano tools/docker-compose/inventory
Укажем пароль для базы данных PostgreSQL и необходимые секреты:
GNU nano 6.2 tools/docker-compose/inventory *
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"
[all:vars]
# AWX-Managed Database Settings
# If left blank, these will be generated upon install.
# Values are written out to tools/docker-compose/_sources/secrets/
pg_password="Qwerty123"
broadcast_websocket_secret="Qwerty123"
secret_key="Qwerty123"
Для теста я укажу пароли от которых серьезные администраторы должны покраснеть. Вы можете использовать внешнюю базу данных PostgreSQL. Для этого необходимо задать вот эти переменные: pg_host
, pg_hostname
и pg_username
. Но я буду использовать базу данных из контейнера.
Далее необходимо собрать образ системы Ansible AWX:
sudo make docker-compose-build
Дождитесь окончания процесса сборки Docker образов. На моем тестовом сервере этот процесс занял примерно 5 минут. В случае успешного завершения сборки у вас должен отобразиться соответствующий образ Docker в перечне всех образов:
docker images
roman@ansible:~/awx$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/ansible/awx_devel devel 882452ec2ea3 42 seconds ago 2.01GB
roman@ansible:~/awx$
Теперь запустим сборку всех остальных компонентов системы. Я передам дополнительный аргумент COMPOSE_UP_OPTS=-d для того, чтобы запустить все контейнеры в фоне, а не в активном терминале:
make docker-compose COMPOSE_UP_OPTS=-d
Дождитесь окончания процесса сборки образов. На этот этап на моем тестовом сервере ушло примерно минута.
Теперь нужно подготовить UI:
docker exec tools_awx_1 make clean-ui ui-devel
Дождитесь окончания процесса сборки UI. Опять же на моем тестовом сервере мне понадобилось около 5 минут.
Один из заключительных шагов – это создание пользователя:
docker exec -ti tools_awx_1 awx-manage createsuperuser
roman@ansible:~/awx$ docker exec -ti tools_awx_1 awx-manage createsuperuser
Username (leave blank to use 'awx'):
Email address:
Password:
Password (again):
Superuser created successfully.
roman@ansible:~/awx$
Я оставлю стандартное имя – awx и укажу пароль пользователя.
Важный шаг – настроить политику перезапуска контейнеров. В противном случае после перезапуска docker хоста контейнеры не запустятся автоматически и вы не сможете получить доступ к Ansible AWX:
docker update --restart unless-stopped tools_awx_1
docker update --restart unless-stopped tools_postgres_1
docker update --restart unless-stopped tools_redis_1
Опционально можно загрузить демо данные:
docker exec tools_awx_1 awx-manage create_preload_data
Установка Ansible AWX завершена. Теперь можно перейти к оценки результатов нашего с вами труда.
Веб интерфейс администрирования
Веб интерфейс администрирования Ansible AWX доступен по следующему адресу (только с поправкой на IP-адрес вашего сервера):
https://10.10.10.106:8043
Вот так выглядит страница с запросом учетных данных:
Укажите учетные данные того пользователя, которого вы создали в процессе настройки продукта. После успешной аутентификации вы должны увидеть стартовую страницу панели администрирования Ansible AWX:
На этом я завершаю публикацию по процессу установки Ansible AWX. Постараюсь еще подготовить пару статей по первоначальной настройки и примерам использования данного продукта.
Установка Ansible AWX: 20 комментариев
sudo make docker-compose-build
Здесь не удалось запустить сборку:
make: *** Нет правила для сборки цели «docker-compose-build».
Добрый день! На какой ОС вы выполняете настройку?
Добрый день!
Debian 12
Пробую ставить на Ubuntu Server 22.04, получаю такое:
Unable to import setuptools-scm, attempting to install now…
Traceback (most recent call last):
File “/home/***/awx/tools/scripts/scm_version.py”, line 6, in
from setuptools_scm import get_version
ModuleNotFoundError: No module named ‘setuptools_scm’
Не помните какую версию AWX собирали?
Я собирал версию “Ansible AWX 0.1.dev1+g6b381aa.d20230625”
Возможно, что в последующих версия процесс сборки немного поменялся.
Попробуйте установить модуль etuptools-scm для Python:
pip install setuptools-scm
у меня была такая же ошибка, когда находился в каталоге
djuz@acer:~/app/awx/tools/docker-compose$ sudo make docker-compose-build
[sudo] пароль для djuz:
make: *** Нет правила для сборки цели «docker-compose-build». Останов.
После того, как перешел в каталог /awx и запустил повторно sudo make docker-compose-build, то сборка началась
В итоге собрал на k3s, не обнаружил большой разницы с 17 версией.
Спасибо…
Branson, не подскажите гайд по которому устанавливали??
Пришлось поставить setuptools-scm и скачать buildx, и команда make docker-compose-build с sudo не захотела работать, а просто так отработала норм.
В итоге, как ни странно, все заработало. Спасибо!
Спасибо за обратную связь! Отсутсвие какие-то пакетов, возможно, зависит от окружения и конфигурации сервера. Если сервер устанавливался в минимальной конфигурации, то часть пакетов можем отсутствовать. Добавлю примечание в статью.
Здравствуйте, Роман. Спасибо за инструкции по развертыванию Ansible AWX. Подскажите, какую версию AWX вы разворачивали?
Добрый день! Я уже разобрал стенд с AWX, к сожалению 🙁 Не смогут ответить по версии. Но, да, согласен – впредь буду указывать версии.
Добрый день.
Возникла задача – управление парком линукс-рабочих станций, практически с нуля. Начали копать в сторону ansible, поставили AWX17.1, как последнюю версию на докере. Даже HelloWorld в виде пинга хостов отрабатывает.
Компы весело инстоллятся по PXE-boot, скрипт в preseed имя и адрес ПК откладывает в определенную папку на сервере, есть инвентори-скрипт, который на выходе из них делает инвентори в json-формате. А вот в AWX-инвентори никак скрипт не прикручивается. Вот с ESXI список машин – запросто, а свое – никак.
Подскажите, как сделать.
Насколько понял, “Custom Inventory Script” в AWX по каким-то причинам не работает, Пробовал сделать локальный проект, чтобы его инвентори указать – не дает выбрать скрипт
Добрый день! К сожалени, не подскажу – не прорабатывал работу кастомных скриптов инвентаризации.
Нужно что бы порты были свободны, иначе контейнеры не запустятся, мне например мешал занятый апачем 8080. Еще оперативной памяти нужно более 2 Гб, процесс сборки UI привел к зависанию ВМ, включал своп на 4 Гб.
Добрый день! Благодарю за комментарий!
Добрый день! При попытки выполнить команду: sudo docker exec tools_awx_1 make clean-ui ui-devel
Выдает следующий результат:
make: *** No rule to make target ‘clean-ui’. Stop.
Подскажите, куда копать?
Нашел, немного поменяли make ui
https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md
Добрый день! Спасибо, что поделились решением – нашим с вами коллегам будет полезно. Да, ИТ очень быстро меняется – актуализировать все статьи я не найду время 🙁
Спасибо большое, ставил по вашей инструкции, версию 24.0.0