Как получить список хостов для инвентаризации в AWX из Zabbix?
Имеется:
- AWX 21.x.x, установленный в контейнерах по мануалу: https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md
- Zabbix 4.x
Задача:
Подтянуть в инвентаризацию AWX из Zabbix список хостов по определенному признаку.
Что было сделано:
Как-то давно был установлен AWX 6.x.x (тоже в контейнерах). Был репозиторий в Gitlab со скриптом zabbix.py, который синхронизировался из Gitlab в проект AWX, запускался, подтягивал хосты из Zabbix и помещал их в инвентаризацию AWX.
Была единственная решенная проблема. Необходимо было зайти в контейнер AWX "awx_task:х.х.х" и запустить в нем установку плагина python "zabbix-api" для корректной отработки скрипта динамической инвентаризации "zabbix.py" "python3.6 -m pip install zabbix-api". После этого скрипт, подтянутый из Gitlab в контейнере AWX корректно запускался.
В новой версии AWX при попытке запуска скрипта zabbix.py AWX на выводе ошибка:
ansible-inventory [core 2.12.5.post0]
...
python version = 3.8.13 (default, Jun 24 2022, 15:27:57) [GCC 8.5.0 20210514 (Red Hat 8.5.0-13)]
...
error: Error: Zabbix API library must be installed: pip install zabbix-api.
...
В контейнере AWX, в который подтягивается и запускается скрипт zabbix.py zabbix-api был установлен. Что интересно, версии "python version = 3.8.13" нет ни в этом контейнере, ни в физической машине, на которой запускаются контейнеры AWX. Непонятно где этот скрипт пытается запуститься.
Вопрос 1:
Каким образом и куда (в контейнер AWX? в машину в которой запускаются контейнеры? в venv?) необходимо установить zabbix-api чтобы скрипт динамического получения инвентаризации отрабатывал корректно?
Вопрос 2:
Нашел информацию про плагины AWX для динамической инвентаризации (например для Zabbix: https://docs.ansible.com/ansible/latest/collections/community/zabbix/zabbix_inventory_inventory.html). Но не смог найти адекватной информации о том, как это всё устанавливается и работает. Каким образом устанавливать и использовать эти плагины?
Ответы (1 шт):
Получилось. Надо создать кастомный образ Execution Environment со встроенным модулем zabbix-api и добавить его как среду исполнения в необходимый Inventory в AWX. Для этого нам понадобится Docker Registry (собственный или публичный).
Создание кастомного awx-ee образа на сервере AWX
Создаем python venv
mkdir ~/ansible-builder && cd ~/ansible-builder
python3.9 -m venv builder
source builder/bin/activate
Устанавливаем компоненты
pip install ansible
pip install ansible-builder==1.0.0.0a1
Создаем конфиг
nano execution-environment.yml
---
version: 1
dependencies:
galaxy: requirements.yml
python: requirements.txt
system: bindep.txt
additional_build_steps:
append:
- RUN alternatives --set python /usr/bin/python3
- RUN pip3 install zabbix-api ; pip3 install ansible
- COPY --from=quay.io/project-receptor/receptor:0.9.7 /usr/bin/receptor /usr/bin/receptor
- RUN mkdir -p /var/run/receptor
- ADD run.sh /run.sh
- CMD /run.sh
- USER 1000
- RUN git lfs install
nano requirements.yml
---
collections:
- community.general
nano requirements.txt
urllib3
git+https://github.com/ansible/ansible-builder.git@devel#egg=ansible-builder
nano bindep.txt
python38-devel [platform:rpm compile]
subversion [platform:rpm]
subversion [platform:dpkg]
git-lfs [platform:rpm]
nano context/run.sh
#! /bin/bash
ansible-runner worker --private-data-dir=/runner
chmod +x context/run.sh
Создаем EE Image
ansible-builder build --tag registry.domain.ru:5000/awx-custom-ee:latest --context ./context --container-runtime docker
Логинимся в Docker Registry (должен быть ранее создан)
docker login registry.domain.ru:5000
Login: xxx
Password: xxx
Пушим образ в Docker Registry
docker push registry.domain.ru:5000/awx-custom-ee:latest
На сервере AWX (веб-интерфейс)
Создаем Credentials Registry
Credentials - Add
Name: registry.domain.ru:5000
Credential Type: Container Registry
Authentication URL: registry.domain.ru:5000
Имя пользователя: xxx
Password: xxx
Создаем Execution Environments
Execution Environments - Add
Name: awx-custom-ee
Image: registry.domain.ru:5000/awx-custom-ee:latest
Pull: Always
Registry credential: registry.domain.ru:5000
Далее используем новый образ AWX-EE в Inventory для запуска динамической инвентаризации