Коротко. Web-интерфейс ActiveScale System Management («samurai») — тонкая оболочка над моделью системы: он не хранит свою конфигурацию, а читает её из /model/... через сервисы продукта. Поэтому «в GUI не то, что в железе» почти всегда означает «в модели не то» — правка делается в модели, а не в UI. Стойка рисуется по трём полям модели: role, hardwaretype и rackunit.
1. Что такое samurai и как он устроен
Samurai — подсистема управления продукта: web-GUI администратора, REST-слой и набор сервисов, которые ходят в модель. В поставке 7.3.x это два фронтенда, живущих рядом:
| Слой | Что содержит | Что рисует |
|---|---|---|
| AngularJS-бандлы (основной UI) | всё навигационное меню, разделы, стойку, таблицы | стойку, узлы, статусы |
| React-приложение (Module Federation) | карточки дашборда, палитра, экраны scale-out | карточки и виджеты |
Оба лежат в одном каталоге приложения и открываются с одного адреса, поэтому в Network-панели браузера легко принять один за другой. Практический вывод: если элемент «не настраивается», смотреть надо не на фронтенд, а на то, есть ли для него поле в модели.
Поток данных: браузер → nginx (единственная точка входа UI, TLS, HTTP/2) → node-backend samurai →
сервисы (tachi-service-*) → Model API по mTLS на 8443 и сервис marvin для задач.
2. Где что лежит: разделы меню
Верхнеуровневое меню — это точки входа, а не полный список функций. Навигация включает (в порядке, характерном для 7.3.x):
- Dashboard — сводка состояния кластера, ёмкость, алерты.
- Global Health — сводка здоровья узлов и подсистем.
- Events — события: LIVE и архив, фильтры по severity/хосту/ресурсу.
- Resources — стойка и узлы, диски, полки, коммутаторы.
- S3 — аккаунты, бакеты, домены, сертификаты, квоты.
- Jobs — задачи: прогресс, история, повтор.
- Configuration — настройки системы: сеть, сертификаты, SSL, health check, почта/SNMP.
- Buckets Management — операции над бакетами.
- Users Management — IAM-пользователи, группы, роли, ключи.
- Object Storage — классы, политики, витрина durability.
- Files Management — файловые экспорты (NFS/UDA).
- Profile — собственный аккаунт, MFA, смена пароля.
Часть панелей объявлена в поставке, но не выведена в меню: они подключаются внутри разделов или прячутся за правами (см. §6). Это не «недоделка»: продукт управляет доступом через RBAC, а не через скрытие пунктов.
3. Раздел «Ресурсы»: как рисуется стойка
Картинка стойки — не отдельный «редактор», а прямое отображение модели. Для каждого узла используются три источника:
| Что на экране | Откуда в модели | Смысл |
|---|---|---|
| Тип узла (цвет, форма) | role машины: scaler / storage / combined |
вычисляется в UI из роли |
| Картинка узла | hardwaretype |
CSS-класс = строка профиля железа |
| Место в стойке | rackunit (число) или null |
ручная раскладка либо автосортировка |
| Полки/слоты дисков | объекты enclosure и diskgroup |
логический статус дисков |
| Коммутатор в стойке | объект networkswitch |
если объект отсутствует — свитч не рисуется |
Правила раскладки:
- Если у всех узлов задан
rackunit— раскладка жёсткая, по номерам юнитов. - Если хотя бы у одного
rackunitпуст (null) — включается автосортировка по рангу типа (коммутаторы выше, дальше серверы, storage, полки) и по имени. - Перетаскивание узла мышью — это
PUTв модель с новымrackunit; после первого перетаскивания раскладка становится жёсткой для всей стойки.
Логический статус узла и дисков показывается строкой: ONLINE, Not Configured
(NOTCONFIGURED), Not Found (NOTFOUND), Empty (EMPTY), Not Managed (NOTMANAGED).
Это статусы модели, а не результат опроса железа «здесь и сейчас».
4. Картинка узла: профиль железа ≠ иконка
hardwaretype в модели — это имя профиля оборудования из каталога типов продукта (набор JSON-
описаний: регэксп идентификации платы/CPU, роли дисков, партиции, способ чтения серийников).
Он выбирает картинку лишь побочно — через CSS-класс.
Ключевое следствие: профилей железа в поставке несколько десятков, а готовых картинок — единицы. Для узла, чей профиль не попал в набор картинок, рисуется нейтральная «коробка» по умолчанию. Это не ошибка и не признак неисправности — так задумано.
Отдельное предупреждение в UI появляется для платформ с высокой плотностью дисков в 4U-корпусе:
если раскладка авто (rackunit не задан), продукт честно пишет, что физическое расположение
слотов может отличаться от картинки. При жёсткой раскладке (rackunit задан у всех) плашки нет.
5. Почему «в GUI пусто» при зелёном здоровье
Три типовых расхождения и их причина:
- Пустая страница «Ресурсы» при зелёной плитке здоровья. Причина, подтверждённая на
практике: у объекта
locationтипа RACK не записан серийный номер, и фронтенд падает при чтенииlocation.serial. Лечится записью<SERIAL>в модель и перезапуском samurai; проверяется тем же дампом модели, что ниже. - Коммутатор не нарисован. В модели нет объекта
networkswitch. Это данные, не дефект UI. - Витрина durability пустая, хотя узлы зелёные. Не выбрана политика хранения
(
selectedstoragepolicyв документе environment равенnull) — метрикам не с чем сравниваться. Подробнее — Формула политики DSS.
Проверить модель read-only можно так (на узле, root, сертификаты продукта root-only):
cd "$(ls -dt /opt/ampli/cfg/marvin/ssl* | head -1)"
sudo curl -sk --cert machine.cert --key machine.key \
https://127.0.0.1:8443/model/machine/ | jq '.machine[] |
{name, role, hardwaretype, rackunit}'
Ожидаемый результат: у каждого узла непустые role и hardwaretype; rackunit либо число, либо
null — но одинаково интерпретируемый для всей стойки.
6. RBAC: роли admin / readonly / support
Доступ к samurai определяется ролями. В UI фигурируют три роли:
| Роль | Что может |
|---|---|
admin |
полный доступ: конфигурация, операции с железом, пользователи |
readonly |
просмотр всех разделов без изменения состояния |
support |
сервисная роль: операции, требующие сервисного кода/пароля (scale-out, сброс, ремонт) |
Важные механизмы:
- Права проверяются на уровне отдельных действий, а не только на уровне пунктов меню. Пользователь может видеть раздел и при этом не видеть конкретную кнопку — это ожидаемо.
- Сервисные операции гейтятся отдельно: health check второго поколения, архивация логов, сброс системы в неинициализированное состояние, тест канала в облачный портал, SNMP и телеметрия, отправка тестовых писем/трапов — всё это закрыто правами и не показывается обычному оператору.
- Support passcode запрашивается модалками расширения (scale-out) и в отдельных стадиях обслуживания. Это отдельный «ключ» операции, а не учётная запись.
Отображение UI-роли на платформенную роль в модели — гипотеза: соответствие задаётся на уровне
сервиса ролей и подтверждается на живом RBAC, а не в фронтенде. Проверять следует через
authorization.getPermissibleActions (список «что мне вообще можно») для конкретной учётной записи.
С версии 7.2 для администраторов поддерживается MFA (TOTP) для UI, CLI и REST, с recovery-кодами и блокировкой после неудачных попыток.
7. Что ещё есть в GUI, но не на виду
- Встроенный HTTP-проверяльщик: позволяет вызвать любую пару
service+actionвнутреннего WebSocket-моста и увидеть ответ JSON-ом. Пункта меню у него нет, прямой URL не подтверждён — инструмент интересен разработчику, оператору не нужен. - Опасные операции существуют как отдельные экшены: вывод диска из эксплуатации, разметка дисков стойки, reboot/shutdown всей стойки (двойное подтверждение паролем), питание узлов при расширении, обновление мастер-пароля шифрования, управление LED-идентификацией. Через обычное меню они не выведены — доступны там, где начинается соответствующая операция.
- Мёртвые ключи конфигурации: некоторые переключатели в файлах брендирования и настроек читаются фронтендом, но нигде не влияют на поведение. Не пытайтесь «включить фичу» таким ключом — эффекта не будет.
Перезапуск samurai — только штатной командой служб продукта:
/etc/init.d/marvinservices restart samurai. Переприменение конфигурации приложения samurai
через API процесс не перезапускает.
8. Источники
- Quantum: управление системой (ActiveScale SM) (2026-11-07)
- ActiveScale Z200 datasheet — перечень интерфейсов управления: ActiveScale SM, CLI, REST API, ActiveScale View
- Release Notes 7.3 — MFA (7.2), загрузка цепочки SSL в GUI (7.3)
- Наша практика (обезличенно): разбор бандлов samurai и модели отрисовки стойки на кластере из
трёх нод, ActiveScale 7.3.1.2, только чтение; выводы про CSS-классы,
rackunitи RBAC. - Обновлено: 2026-11-07.