Группы репозиториев
Группа объединяет несколько репозиториев npm, Maven или PyPI под одним URL. OSA Proxy объединяет версии участников и проверяет их по политикам CodeScoring.
Настройка
Аналогичный блок group доступен в секциях maven и pypi. Maven-группу подключают как обычный repository или mirror, PyPI-группу — как Simple API index:
Участники используют собственные таймауты. В Configuration Store группы задаются в поле groups, см. Admin API. Состояние участников доступно в метриках.
Приоритет источников и политики
Список версий объединяется из ответов участников. Если одна версия npm или один файл PyPI есть у нескольких участников, используется запись первого по members.
Для скачивания OSA Proxy ищет файл по порядку участников, переходя к следующему только после ответа 404.
Проверка использует контекст репозитория Artifactory или Nexus, откуда пришла версия или файл. Для публичного registry без такого контекста применяется политика по умолчанию. Контекст из url-encoded-config, если он передан, заменяет контекст участников. Заблокированная версия не заменяется такой же версией другого участника.
Группа не передаёт участникам Authorization и cookies клиента. В YAML логин и пароль участника можно указать в URL registry. Configuration Store не принимает учётные данные в URL, поэтому участники группы в нём должны разрешать анонимное чтение.
Работа при недоступности участника
По умолчанию сбой участника не позволяет перейти к следующему источнику:
- При сборке списка версий клиент получает
502. При любом сбое, кроме401и403, вместо этого используется последний полный документ из кэша, если он не старшеgroup-metadata-stale-if-error. - При поиске файла клиент получает
502. Если файла нет ни у одного участника, клиент получает404.
При continue-on-member-error: true группа пропускает сбойного участника: собирает список из ответивших и ищет файл у следующих. Если файл не найден, но один из участников дал сбой, клиент получает 502.
При continue-on-member-error: true пакет из недоступного приватного репозитория может быть заменён одноимённым пакетом из публичного источника (dependency confusion). Включайте параметр только там, где такой переход допустим. Скачиваемый пакет по-прежнему проверяется политиками CodeScoring.
Кэш и ограничения
Объединённые metadata кэшируются, а политики применяются при каждом ответе. Настройки кэша и параллельности групп (group-*) задаются в http.client и требуют перезапуска.
Для npm поддерживаются документ пакета, документ версии или тега, dist-tags и tarball; search, audit, whoami и ping через группу недоступны. Для PyPI поддерживаются страницы проектов /simple/<name>/ в HTML и JSON и скачивание файлов; корневой список всех проектов и legacy JSON API недоступны.
