Установка Ansible AWX

В предыдущей публикации я рассказывал о том, как выполняется установка 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_hostpg_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 комментариев

  1. sudo make docker-compose-build
    Здесь не удалось запустить сборку:
    make: *** Нет правила для сборки цели «docker-compose-build».

        1. Пробую ставить на 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 собирали?

          1. Я собирал версию “Ansible AWX 0.1.dev1+g6b381aa.d20230625”

            Возможно, что в последующих версия процесс сборки немного поменялся.

            Попробуйте установить модуль etuptools-scm для Python:
            pip install setuptools-scm

    1. у меня была такая же ошибка, когда находился в каталоге
      djuz@acer:~/app/awx/tools/docker-compose$ sudo make docker-compose-build
      [sudo] пароль для djuz:
      make: *** Нет правила для сборки цели «docker-compose-build». Останов.
      После того, как перешел в каталог /awx и запустил повторно sudo make docker-compose-build, то сборка началась

  2. В итоге собрал на k3s, не обнаружил большой разницы с 17 версией.
    Спасибо…

  3. Пришлось поставить setuptools-scm и скачать buildx, и команда make docker-compose-build с sudo не захотела работать, а просто так отработала норм.
    В итоге, как ни странно, все заработало. Спасибо!

    1. Спасибо за обратную связь! Отсутсвие какие-то пакетов, возможно, зависит от окружения и конфигурации сервера. Если сервер устанавливался в минимальной конфигурации, то часть пакетов можем отсутствовать. Добавлю примечание в статью.

  4. Здравствуйте, Роман. Спасибо за инструкции по развертыванию Ansible AWX. Подскажите, какую версию AWX вы разворачивали?

    1. Добрый день! Я уже разобрал стенд с AWX, к сожалению 🙁 Не смогут ответить по версии. Но, да, согласен – впредь буду указывать версии.

  5. Добрый день.
    Возникла задача – управление парком линукс-рабочих станций, практически с нуля. Начали копать в сторону ansible, поставили AWX17.1, как последнюю версию на докере. Даже HelloWorld в виде пинга хостов отрабатывает.
    Компы весело инстоллятся по PXE-boot, скрипт в preseed имя и адрес ПК откладывает в определенную папку на сервере, есть инвентори-скрипт, который на выходе из них делает инвентори в json-формате. А вот в AWX-инвентори никак скрипт не прикручивается. Вот с ESXI список машин – запросто, а свое – никак.
    Подскажите, как сделать.
    Насколько понял, “Custom Inventory Script” в AWX по каким-то причинам не работает, Пробовал сделать локальный проект, чтобы его инвентори указать – не дает выбрать скрипт

    1. Добрый день! К сожалени, не подскажу – не прорабатывал работу кастомных скриптов инвентаризации.

  6. Нужно что бы порты были свободны, иначе контейнеры не запустятся, мне например мешал занятый апачем 8080. Еще оперативной памяти нужно более 2 Гб, процесс сборки UI привел к зависанию ВМ, включал своп на 4 Гб.

  7. Добрый день! При попытки выполнить команду: sudo docker exec tools_awx_1 make clean-ui ui-devel
    Выдает следующий результат:
    make: *** No rule to make target ‘clean-ui’. Stop.

    Подскажите, куда копать?

    1. Добрый день! Спасибо, что поделились решением – нашим с вами коллегам будет полезно. Да, ИТ очень быстро меняется – актуализировать все статьи я не найду время 🙁

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *