fix(forgejo): экранировать ${1} в шаблоне uuid — Flux подставляет ${...} в манифестах #99
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/forgejo-runner-uuid-subst"
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?
Ошибка применения:
post build failed for 'ExternalSecret.v1.external-secrets.io/forgejo-runner': envsubst error: variable substitution failed: variable not set (strict mode): "1".Причина. Flux после kustomize build прогоняет манифесты через envsubst (postBuild) и в strict-режиме падает на любой
${...}, которой нет среди переменных. В шаблоне ESO я использовалregexReplaceAllсо ссылками на группы в Go-синтаксисе —${1}…${5}— и Flux принял их за переменные с именем «1».Правка. Ссылки экранированы двойным долларом:
$${1}. Это штатный способ kustomize-controller сохранить фигурные скобки — в доках установленной версии (v1.9.5,docs/spec/v1/kustomizations.md) сказано дословно: «you can use$${var}which will print out${var}». После подстановки в объекте останется${1}, и шаблон ESO отрендерит uuid как задумано. Изменена одна строка.Альтернатива, которую я не стал применять: аннотация
kustomize.toolkit.fluxcd.io/substitute: disabledна самом ExternalSecret (тоже штатный механизм, им Flux помечает свои CRD) — но она отключает подстановку для всего объекта, а здесь достаточно локального экранирования.Замечание по проверкам. flate этот класс ошибок не видит: он валидирует рендер, а падает подстановка уже в кластере (это тот же разрыв между «фиксом и проверкой в пайплайне», что описан в issue #81). Когда раннер заработает и в репе появится workflow, в него стоит добавить простую проверку: искать
${внутри{{ }}в шаблонах ESO и требовать$${для литералов. Я такую проверку прогнал вручную по всему репозиторию — нашлось ровно одно место (этот файл) плюс законная подстановка${SECRET_DOMAIN}в echo.