Перейти к основному содержимому

Режимы (Modes): Намерение пользователя

Обзор

В HSM нет глобального переключателя "режима проекта". Вместо этого, каждый компонент (библиотека или сервис) в вашем манифесте hsm.yaml имеет свой собственный режим: dev или prod.

hsm.yaml — это декларация вашего намерения. Он описывает, в каком состоянии должен находиться каждый элемент вашей системы в данный момент.

Режим компонента

Режим определяет, какой источник (source) из реестра будет использован при синхронизации:

  • dev: Использовать отладочную версию (локальные исходники, editable-установка, Dockerfile для разработки).
  • prod: Использовать стабильную версию (git-репозиторий с git tag, PyPI-пакет, готовый Docker-образ).

Команды управления (Bulk Updates)

Хотя режим всегда хранится на уровне конкретного компонента, HSM предоставляет удобные команды для быстрого изменения "намерения" сразу для нескольких частей проекта.

1. Уровень компонента (Точечно)

Самый простой способ — переключить одну библиотеку или сервис:

  • hsm library mode <lib_name> <dev|prod>
  • hsm service mode <svc_name> <dev|prod>

2. Уровень группы (Массово)

Если вы хотите переключить все компоненты, входящие в определенную группу:

  • hsm library mode <group_name> <dev|prod>
  • hsm service mode <group_name> <dev|prod>

Как это работает: HSM находит все выбранные опции в этой группе и прописывает им указанный режим в hsm.yaml.

3. Уровень проекта (Всё сразу)

Команда для быстрой подготовки всего окружения:

  • hsm mode <dev|prod>

Как это работает: HSM проходит по всем библиотекам и сервисам в проекте и устанавливает им выбранный режим. Это просто автоматизация ручного переключения каждого компонента.


Почему это удобно?

  1. Атомарность: Вы всегда видите в hsm.yaml, что именно сейчас находится в режиме разработки.
  2. Гибкость: Вы можете держать весь проект в prod, но одну конкретную библиотеку, в которой вы правите баг, переключить в dev.
  3. Отсутствие скрытой логики: Нет сложной иерархии наследования "проект -> группа -> компонент". Есть только конечное состояние компонента в манифесте.

Пример в hsm.yaml

libraries:
standalone:
- name: my-utils
mode: dev # Явное намерение использовать локальный код
services:
groups:
databases:
selection: postgres
# Режим прописывается для выбранной опции
mode: prod