На данный момент у нас используется GitLab для работы с Ansible Playbook. В целом все устраивает и деплой производится из пайплайн GitLab, но хотелось бы использовать более специализированный инструмент.
Анализ доступных решений показал, что наиболее подходящим и полноценным решением является AWX который как раз и представляет собой специализированный WEB-интерфейс для работы с Ansible PlayBook.
Установка AWX в Docker
Установка Docker в RedOS
Подготовка системы
# dnf update -y
# dnf install -y yum-utils device-mapper-persistent-data lvm2
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Устанавливаем Docker
# dnf install -y docker-ce docker-ce-cli
Настраиваем автозапуск
# systemctl enable docker
# systemctl start docker
Проверяем статус
# systemctl status docker
# docker ps
Устанавливаем Docker Compose
# dnf install docker-compose.x86_64
Устанавливаем Ansible и Docker-py
# dnf install python3-pip.noarch
# dnf install ansible
# pip install docker-py
Устанавливаем git и клонируем репозиторий AWX
# dnf install -y git
# git clone https://github.com/ansible/awx.git
# cd ./awx/
# git checkout 24.3.1
Установка AWX
Редактируем Inventory файл
# mcedit tools/docker-compose/inventory
Задаем параметры базы данных.
pg_password="Qe32f7932t"
broadcast_websocket_secret="Qe32f7932t"
secret_key="Qe32f7932t"
Собираем образ системы
# make docker-compose-build
Проверяем, что образ собран корректно
# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> b18c3d934cf0 10 hours ago 2.38GB
ghcr.io/ansible/awx_devel devel 1b58e9c4bce4 10 hours ago 2.38GB
Запускаем сборку и загрузку прочих компонентов системы
# make docker-compose
В процессе запуска будет создано окружение и к базе данных применены миграции. Обратите внимание, что суперпользователь администратор создается автоматически со случайным паролем который выводится в консоль после применения миграций.
tools_awx_1 | Superuser created successfully.
tools_awx_1 | Admin password: xxxxPASSWORDxxxx
Если сейчас попробовать подключиться к web-интерфейсу по адресу https://10.88.14.115:8043 то получим ошибку, что web-интерфейс на собран.

Приступаем к сборке интерфейса.
Сборка WEB-интерфейса AWX
Останавливаем текущий docker-compose комбинацией ctrl+c и запускаем docker-образы фоновым процессом.
# make docker-compose COMPOSE_UP_OPTS=-d
Для сборки нам понадобится NodeJS и установим его командой.
# dnf install nodejs
Запускаем сборку WEB-интерфейса командой.
# make ui-next
Удаляем старый образ и все последовательно пересобираем.
Дополнительно
Задаем политику перезапуска контейнеров (для автозапуска после перезагрузки).
# 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 -ti tools_awx_1 awx-manage createsuperuser
Если при сборке вы поучили ошибку.
DOCKER_BUILDKIT=1 docker build \
--ssh default= \
-f Dockerfile.dev \
-t ghcr.io/ansible/awx_devel:devel \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--cache-from=ghcr.io/ansible/awx_devel:devel .
[+] Building 0.0s (0/0) docker:default
ERROR: invalid empty ssh agent socket: make sure SSH_AUTH_SOCK is set
make: *** [Makefile:569: docker-compose-build] Ошибка 1
В данном случае необходимо сгененировать сокет аутентификации и передать его в переменную окружения.
# ssh-agent -t 3h
SSH_AUTH_SOCK=/tmp/ssh-XXXXXXcN85Oh/agent.2073; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2074; export SSH_AGENT_PID;
echo Agent pid 2074;
Экспортируем переменную.
# export SSH_AUTH_SOCK="/tmp/ssh-XXXXXXcN85Oh/agent.2073"





