Перейти к основному содержимому
Версия: Новая

Архитектура SALT.BOX

Архитектура программного комплекса SALT.BOX
Рисунок 1. Архитектура программного комплекса SALT.BOX

Таблица 1. Взаимодействия компонентов, контейнеров и подсистем программного комплекса SALT.BOX
Описание
1Взаимодействие пользователя с веб-приложением (https)
2Веб-приложение работает с API-шлюзом через прокси
3Для выполнения процедуры аутентификации логин и пароль пользователя передаются системе KeyCloak
4KeyCloak использует СУБД PostgreSQL для хранения регистрационных данных пользователя и хеша его пароля
5Интеграция KeyCloak с корпоративным каталогом LDAP позволяет использовать существующие учетные записи пользователей. Использование OpenID Connect обеспечивает единый вход для всех подключённых приложений
6KeyCloak выдаёт JSON Web Token (JWT) для доступа веб-приложения к компонентам SALT.BOX
7JWT передаётся в составе любого запроса веб-приложением
8API-шлюз выполняет валидацию JWT, полученного в составе запроса, в системе KeyCloak
9Если JWT валиден, API-шлюз запрашивает у OPA (Open Policy Agent) политику доступа пользователя-владельца токена к SALT.BOX
10Проверка обновлений, получение, упаковка и сохранение изменений в бандлах (bundles)
11Если политика доступа разрешает пользователю выполнение запроса, API-шлюз транслирует запрос Ядру SALT.BOX — интерфейсу ядра программного комплекса SALT.BOX
12Ядро SALT.BOX сохраняет временные данные (данные pillars, команды, результаты выполнения команд), в Redis store — хранилище ключ-значение на базе Redis
13«Движок» (engine) контроллера SALT.BOX (например, модуль подключения сервера SALT.BOX Bridge) имеет доступ к хранилищу Redis store, получают из него данные и сохранят результаты выполнения — Job Return — и прочие структуры данных. Результаты выполнения задач сохраняются с заданным временем жизни (TTL)
14, 15Ядро SALT.BOX осуществляет синхронные вызовы (RPC) и обработку событий (Events) через брокер сообщений на базе Redis Pub/Sub channels, управляемый фреймворком FastStream
16Статические данные (коллекции, параметры клиентов и контроллеров SALT.BOX, схемы команд, шаблоны задач, настройки SALT.BOX) хранятся в БД под управлением MongoDB*
17Ответ Ядра SALT.BOX на запрос API-шлюзу о статусе выполнения команд и задач на стороне агентов
18API-шлюз транслирует ответ веб-приложению для отображения результата пользователю
19Ядро SALT.BOX осуществляет запуск продолжительных асинхронных задач посредством Taskiq, используя RabbitMQ в качестве брокера сообщений
20Трансляция вызова метода Salt рабочему процессу контроллера SALT.BOX для публикации задачи (Job) агентам
21Передача ответа агента (Job Returns) Рабочему процессу контроллера SALT.BOX
22Взаимодействие контроллера SALT.BOX с «Движком» (engine) (передача команд, получение событий из шины)
23Рабочий процесс контроллера SALT.BOX передаёт задание для публикации агентам
24Получение задачи (Job) агентом
25Передача SLS-файлов (Pillars и стейтов) и файлов ресурсов
26Ответ агента (Job Returns) контроллеру SALT.BOX
27Передача задачи (Job) в рабочий поток (Jobber) агента
28Если политика доступа разрешает пользователю выполнение запроса, API-шлюз транслирует запрос Модулю расширения
29Сохранение статических данных модуля расширения
30Получение Рабочими процессами Модуля расширения данных для запуска фоновых задач
31Ответ Модуля расширения на запрос API-шлюза со статусом и данными о выполнения заданий планировщика
32Модуль расширения осуществляет запуск продолжительных асинхронных задач посредством Taskiq, используя RabbitMQ в качестве брокера сообщений
33Компонент Модуля расширения взаимодействует с экземпляром Redis Ядра SALT.BOX, получают из него и сохранят Runtime-данные, относящиеся к процессу выполнения заданий планировщика
34Данные WebSocket для отображения в реальном времени