ci: валидировать CR по схемам CRD — ловить невалидные значения полей (пример: driftDetection.mode) #56
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что произошло
В PR #55 уехало
driftDetection.mode: Disabled— значение с заглавной буквы. У helm-controller enum строчный (проверено по исходнику, не по памяти):api/v2/helmrelease_types.go:// +kubebuilder:validation:Enum=enabled;warn;disabledна полеModeиDriftDetectionDisabled DriftDetectionMode = "disabled".flux-system/helm-controller).CRD отбрасывает такое значение на приёме: HelmRelease не создаётся, Kustomization падает — но CI этого не увидел:
flate test all(73 passed) валидирует рендер и реконсиляцию, а значения полей CR по схемам CRD не проверяет. Ошибку поймал владелец вручную (коммит164587e).Что нужно
Добавить в CI валидацию манифестов по JSON-схемам CRD, чтобы невалидные enum/типы/обязательные поля ловились до мёржа.
Варианты:
datreeio/CRDs-catalog(рекомендую) — шаг рядом с текущим job'ом Flate: Ловит enum/типы у Flux, Gateway API, CNPG, ESO и всего, что есть в каталоге. Каталог пинить по commit SHA, а неmain— по нашему правилу сверяться с установленной версией, аmainкаталога плавает.Грабли: в манифестах есть плейсхолдеры Flux (
${SECRET_DOMAIN}), а у hostnames/URL в схемах естьpattern— перед валидацией подставлять фиктивные значения (sed 's/${SECRET_DOMAIN}/example.com/g'), иначе будут ложные падения.flate testвалидировать Flux-CR по CRD-схемам версии дистрибутива — тогда существующий прогон начнёт ловить и это; путь дольше, но без внешних зависимостей и плейсхолдеров..lefthook.toml(pre-push), чтобы не гонять CI ради опечатки.Критерий готовности
driftDetection.mode: Disabled,pathType: PathPrefixX, опечатка в имени поля) падает.Связанное
164587e.replicaCount/resources/pdb— ключи верхнего уровня, вложенные вzitadel:молча игнорируются. Схемой не ловится, только рендером.