CI: проверять, что объекты из Kustomization без targetNamespace несут свой namespace (и что sourceRef в HR существует в рендере) #81

Open
opened 2026-09-20 20:04:26 +00:00 by hermes · 0 comments
hermes commented 2026-09-20 20:04:26 +00:00 (Migrated from git.grachevko.ru)

Найдено на выкате Open WebUI (MR #79 → фикс #80).

Симптом: Kustomization repositories в flux-system ушла в Ready=False — «OCIRepository/open-webui namespace not specified», из-за объекта без metadata.namespace в каталоге, у Kustomization которого нет spec.targetNamespace. Каталог источников перестал реконсилиться целиком, а HelmRelease open-webui вместо установки получил «could not get Source object: OCIRepository "open-webui" not found». В браузере это 500 на хосте: маршрут жив, бэкенда нет.

Почему не поймал CI: flate test all проверяет рендер, ссылки и статус реконсиляции, но не то, что объект из Kustomization без spec.targetNamespace несёт свой namespace в манифесте. Схемы CRD тут тоже не помогут — это ошибка применения, а не валидации поля.

Что предлагается добавить в пайплайн (любой из вариантов, выбрать при реализации):

  1. Проверка структуры: для каждого отрендеренного объекта в Kustomization без spec.targetNamespace требовать metadata.namespace (статика, дешевле всего; ловит ровно этот класс).
  2. Более общо: kubectl apply --dry-run=server по отрендеренному дереву (нужен живой кластер/права — в CI не подходит).
  3. Более общо без кластера: сверять, что все chartRef/sourceRef в HelmRelease указывают на объект, который существует в рендере этого ревизии (ловит и опечатку в имени источника).

Вариант 3 ценнее: он закрывает и «источник не создался», и «источник переименовали».

Найдено на выкате Open WebUI (MR #79 → фикс #80). **Симптом**: `Kustomization repositories` в `flux-system` ушла в `Ready=False` — «OCIRepository/open-webui namespace not specified», из-за объекта без `metadata.namespace` в каталоге, у Kustomization которого нет `spec.targetNamespace`. Каталог источников перестал реконсилиться целиком, а `HelmRelease open-webui` вместо установки получил «could not get Source object: OCIRepository "open-webui" not found». В браузере это 500 на хосте: маршрут жив, бэкенда нет. **Почему не поймал CI**: `flate test all` проверяет рендер, ссылки и статус реконсиляции, но не то, что объект из Kustomization без `spec.targetNamespace` несёт свой namespace в манифесте. Схемы CRD тут тоже не помогут — это ошибка применения, а не валидации поля. **Что предлагается добавить в пайплайн** (любой из вариантов, выбрать при реализации): 1. Проверка структуры: для каждого отрендеренного объекта в Kustomization без `spec.targetNamespace` требовать `metadata.namespace` (статика, дешевле всего; ловит ровно этот класс). 2. Более общо: `kubectl apply --dry-run=server` по отрендеренному дереву (нужен живой кластер/права — в CI не подходит). 3. Более общо без кластера: сверять, что все `chartRef`/`sourceRef` в HelmRelease указывают на объект, который существует в рендере этого ревизии (ловит и опечатку в имени источника). Вариант 3 ценнее: он закрывает и «источник не создался», и «источник переименовали».
Sign in to join this conversation.
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
grachevko/home-ops#81
No description provided.