ActiveScaleинженерная практика

GUI samurai: что где находится и почему картинка не сходится с моделью

Эксплуатация guisamurairackmodelrbachowto

Коротко. 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):

  1. Dashboard — сводка состояния кластера, ёмкость, алерты.
  2. Global Health — сводка здоровья узлов и подсистем.
  3. Events — события: LIVE и архив, фильтры по severity/хосту/ресурсу.
  4. Resources — стойка и узлы, диски, полки, коммутаторы.
  5. S3 — аккаунты, бакеты, домены, сертификаты, квоты.
  6. Jobs — задачи: прогресс, история, повтор.
  7. Configuration — настройки системы: сеть, сертификаты, SSL, health check, почта/SNMP.
  8. Buckets Management — операции над бакетами.
  9. Users Management — IAM-пользователи, группы, роли, ключи.
  10. Object Storage — классы, политики, витрина durability.
  11. Files Management — файловые экспорты (NFS/UDA).
  12. 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 пусто» при зелёном здоровье

Три типовых расхождения и их причина:

  1. Пустая страница «Ресурсы» при зелёной плитке здоровья. Причина, подтверждённая на практике: у объекта location типа RACK не записан серийный номер, и фронтенд падает при чтении location.serial. Лечится записью <SERIAL> в модель и перезапуском samurai; проверяется тем же дампом модели, что ниже.
  2. Коммутатор не нарисован. В модели нет объекта networkswitch. Это данные, не дефект UI.
  3. Витрина 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.

Нужен инженер? Разберу вашу ситуацию и скажу, что делать — по шагам, с проверками.

Обсудить задачу