Группы репозиториев

Группа объединяет несколько репозиториев npm, Maven или PyPI под одним URL. OSA Proxy объединяет версии участников и проверяет их по политикам CodeScoring.

Настройка

npm:
  enabled: true
  repository:
    - name: npm-internal
      registry: https://npm.example.com
    - name: npm-public
      registry: https://registry.npmjs.org
  group:
    - name: npm-all
      members: [npm-internal, npm-public]
      scan-manifest: true
      scan-package: true
      remove-blocked-versions: true
      continue-on-member-error: false
npm config set registry https://osa-proxy.example.com/npm-all/

Аналогичный блок group доступен в секциях maven и pypi. Maven-группу подключают как обычный repository или mirror, PyPI-группу — как Simple API index:

pip install --index-url https://osa-proxy.example.com/pypi-all/simple/ requests
ПараметрНазначение
nameУникальное имя группы и её публичный путь /{name}/. Не должно совпадать с именем репозитория или другой группы.
membersНепустой список без повторов с именами обычных репозиториев той же секции в порядке приоритета. Вложенные группы не поддерживаются.
scan-manifest, scan-package, work-mode, url-encoded-config, file-type-filterНастройки проверки запросов через группу. Соответствующие настройки отдельных участников для этих запросов не используются.
remove-blocked-versionsДля npm и PyPI: удалять заблокированные версии (true по умолчанию) или оставлять с отметкой блокировки (false). Для Maven параметр не задаётся: версии всегда удаляются.
continue-on-member-errorПродолжать работу с остальными участниками при сбое одного из них. По умолчанию false.

Участники используют собственные таймауты. В 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 недоступны.

Страница была полезна?