Technical Design: Adapters (Package Managers & Container Engines)
1. Обзор
Концепция адаптеров позволяет HSM быть независимым от конкретных инструментов. HSM управляет "намерениями" (какие группы и пакеты выбраны в hsm.yaml), а адаптеры отвечают за "материализацию" этих намерений в конкретной среде.
Адаптеры разделены на две категории:
- Package Managers: Управление Python-зависимостями.
- Container Engines: Управление инфраструктурными сервисами.
2. Архитектура и Регистрация
2.1. Динамическая загрузка (Entry Points)
Адаптеры не импортируются жестко в ядро. Вместо этого используется механизм Python Entry Points, что позволяет добавлять новые адаптеры без изменения кода HSMCore.
Регистрация в pyproject.toml:
[project.entry-points."hsm.package_managers"]
uv = "hyper_stack_manager.adapters.python_uv:UvAdapter"
[project.entry-points."hsm.container_engines"]
docker = "hyper_stack_manager.adapters.container_docker:DockerComposeAdapter"
2.2. Базовые классы
Все адаптеры наследуются от абстрактных классов в hsm/src/hyper_stack_manager/adapters/base.py.
BasePackageManagerAdapter
class BasePackageManagerAdapter(ABC):
@abstractmethod
def sync(self, packages: List[str], frozen: bool = False):
"""Materialize dependencies into the environment."""
pass
@abstractmethod
def lock(self):
"""Generate lock file."""
pass
@abstractmethod
def init_lib(self, path: Path):
"""Initialize a new library/package at the given path."""
pass
BaseContainerAdapter
class BaseContainerAdapter(ABC):
@abstractmethod
def generate_config(self, services: List[Dict[str, Any]]):
"""Generate orchestration configuration (e.g., docker-compose.yml)."""
pass
@abstractmethod
def up(self, services: Optional[List[str]] = None):
"""Start services."""
pass
@abstractmethod
def down(self):
"""Stop and remove services."""
pass
3. Реализованные адаптеры
3.1. UvAdapter (Package Manager)
Использует uv для управления зависимостями.
- Механизм: Обновляет секцию
[project.dependencies]вpyproject.tomlс использованиемtomlkit. - Команды:
uv sync,uv lock,uv init --lib.
3.2. DockerComposeAdapter (Container Engine)
Управляет контейнерами через Docker Compose.
- Механизм: Генерирует
docker-compose.hsm.ymlна основе манифестов из реестра. - Команды:
docker compose up -d,docker compose down.
4. Планируемые адаптеры
- PixiAdapter: Для управления системными зависимостями.
- PodmanAdapter: Альтернатива Docker для безрутовых сред.
5. Выбор адаптера
Адаптер выбирается динамически:
- Package Manager: На основе
project.managerвhsm.yaml. - Container Engine: На основе
project.container_engineвhsm.yaml(по умолчаниюdocker).