YETI³ / SDK

Проверка ресурсов перед установкой

В SDK 0.4.4 общий ModuleInstaller проверяет ресурсы целевой машины перед установкой, обновлением и подготовкой пакета к импорту. Агент доставки также проверяет узел перед загрузкой. Для удалённой установки измерения выполняются на сервере; ресурсы компьютера разработчика их не заменяют.

Обновление существующего окружения: python -m pip install --index-url https://engine.yeti3.ru/sdk/simple/ yeti3-engine==0.4.4. Новая политика не возникает автоматически в уже запущенных старых процессах. После обновления зависимостей перезапустите агент установки штатным способом.

Требования решения

[requirements.resources]
memory_mb = 256
disk_mb = 512
cpu_count = 1
# gpu_memory_mb = 4096

Размеры указаны в МиБ. Проверяется доступная, а не установленная RAM; диск проверяется по пути установки. CPU учитывает доступные ядра и полные единицы квоты. Linux учитывает cgroup-v2, включая родительские лимиты, и стандартные точки монтирования cgroup-v1. Для нестандартных изолированных окружений требуется дополнительная проверка хоста. На macOS RAM оценивается через vm_stat. Доступная GPU-память автоматически не угадывается по системной RAM: отсутствие замера означает «неизвестно» и требует решения владельца.

Без требований в манифесте проверка всё равно выполняется с исходными рекомендациями 256 МиБ RAM, 512 МиБ диска и 1 CPU. Это проверка возможности установки, а не нагрузочный тест или резервирование ресурсов.

Рекомендации и продолжение с риском

from pathlib import Path
from yeti3_core import ResourceRiskAcceptance
from yeti3.sdk.installer import ModuleInstaller, InstalledModuleRegistry
from yeti3.sdk.installer.state import InstalledStateStore

def owner_decision(report):
    # Хост показывает report['recommendations'] авторизованному владельцу.
    # Возвращайте принятие только после его явного решения для этой установки.
    return None  # по умолчанию остановить установку

installer = ModuleInstaller(
    InstalledModuleRegistry(),
    resource_decision=owner_decision,
    state_store=InstalledStateStore(Path(".yeti3/installed.json")),
)
installer.install_package('my-package/yeti3-module.toml')

Для явного продолжения функция возвращает ResourceRiskAcceptance(actor='account:42', reason='Принимаю риск на тестовом стенде'). Не возвращайте это значение без запроса владельца и не назначайте глобальный автоматический обход. Неавторизованный запрос из браузера не должен формировать actor: его определяет хост по своей сессии.

Отчёт содержит измерения, требования, рекомендации, время, путь назначения и идентификатор манифеста. При постоянном state_store принятое решение пишется в приватный файл .resources.jsonl рядом с состоянием установщика. В памяти отчёты доступны в installer.resource_reports. Повторная установка измеряет ресурсы заново.

Принятие риска относится только к нехватке/неизвестности ресурсов. Проверки совместимости версий, целостности пакета, прав, лицензии и критически необходимого свободного места для распаковки по-прежнему нельзя пропустить этим решением. Форма подтверждения — обязанность интерфейса хоста; ядро останавливает установку, если хост не предоставил явного решения владельца.