gen_system: noms de ressources dupliqués quand le nom upstream contient déjà le nom du package #6

Closed
opened 2026-06-10 18:47:03 +02:00 by xmortelette · 1 comment

Contexte

Pendant le scaffolding de core/reloader (kustomize de stakater/reloader), les noms générés contenaient le nom du package en double, par exemple :

  • ServiceAccount : {{instance.appslug}}-{{instance.appslug}} → rendu reloader-reloader
  • ClusterRole/ClusterRoleBinding : {{instance.namespace}}-{{instance.appslug}}-{{instance.namespace}}-{{instance.appslug}}-role[-binding]
    → rendu arvida-core-reloader-arvida-core-reloader-role[-binding]

Cause

Dans gen_package.rhai::gen_system, le renommage utilise un remplacement de chaîne littéral :

doc.metadata.name.replace(name, "{{instance.appslug}}");
// ou, pour ClusterRole/ClusterRoleBinding/Webhooks/APIService :
doc.metadata.name.replace(name, "{{instance.namespace}}-{{instance.appslug}}");

Le manifeste upstream de reloader nomme déjà ses ressources avec un préfixe (namePrefix: reloader- côté kustomize), donnant des noms tels que reloader-reloader ou reloader-reloader-role. String::replace remplace toutes les occurrences de name ("reloader") dans la chaîne, donc :

  • reloader-reloader{{instance.appslug}}-{{instance.appslug}}
  • reloader-reloader-role{{instance.namespace}}-{{instance.appslug}}-{{instance.namespace}}-{{instance.appslug}}-role

Le résultat reste fonctionnellement correct (toutes les références internes utilisent la même substitution, donc cohérentes entre elles), mais produit des noms anormalement longs et redondants — peu lisibles et qui peuvent dépasser les limites de longueur de nom Kubernetes (63 caractères pour les labels, 253 pour les noms d'objets) sur des packages dont le nom est plus long que "reloader".

Piste de correction

Remplacer uniquement la première occurrence du nom du package (replace avec un compteur, ou une regex ancrée en début de chaîne ^${name}(-|$)), au lieu d'un remplacement global — ce qui correspondrait au pattern habituel {{package-name}}-{{resource-suffix}} utilisé par la plupart des charts/kustomizations.

Annexe

L'annotation contenant helm.sh devrait également être supprimée par défaut lors du scaffolding.

## Contexte Pendant le scaffolding de `core/reloader` (kustomize de stakater/reloader), les noms générés contenaient le nom du package en double, par exemple : - ServiceAccount : `{{instance.appslug}}-{{instance.appslug}}` → rendu `reloader-reloader` - ClusterRole/ClusterRoleBinding : `{{instance.namespace}}-{{instance.appslug}}-{{instance.namespace}}-{{instance.appslug}}-role[-binding]` → rendu `arvida-core-reloader-arvida-core-reloader-role[-binding]` ## Cause Dans `gen_package.rhai::gen_system`, le renommage utilise un remplacement de chaîne littéral : ```rhai doc.metadata.name.replace(name, "{{instance.appslug}}"); // ou, pour ClusterRole/ClusterRoleBinding/Webhooks/APIService : doc.metadata.name.replace(name, "{{instance.namespace}}-{{instance.appslug}}"); ``` Le manifeste upstream de reloader nomme déjà ses ressources avec un préfixe (`namePrefix: reloader-` côté kustomize), donnant des noms tels que `reloader-reloader` ou `reloader-reloader-role`. `String::replace` remplace *toutes* les occurrences de `name` ("reloader") dans la chaîne, donc : - `reloader-reloader` → `{{instance.appslug}}-{{instance.appslug}}` - `reloader-reloader-role` → `{{instance.namespace}}-{{instance.appslug}}-{{instance.namespace}}-{{instance.appslug}}-role` Le résultat reste fonctionnellement correct (toutes les références internes utilisent la même substitution, donc cohérentes entre elles), mais produit des noms anormalement longs et redondants — peu lisibles et qui peuvent dépasser les limites de longueur de nom Kubernetes (63 caractères pour les labels, 253 pour les noms d'objets) sur des packages dont le nom est plus long que "reloader". ## Piste de correction Remplacer uniquement la *première* occurrence du nom du package (`replace` avec un compteur, ou une regex ancrée en début de chaîne `^${name}(-|$)`), au lieu d'un remplacement global — ce qui correspondrait au pattern habituel `{{package-name}}-{{resource-suffix}}` utilisé par la plupart des charts/kustomizations. ## Annexe L'annotation contenant `helm.sh` devrait également être supprimée par défaut lors du scaffolding.
Author

Corrigé dans https://github.com/sebt3/vynil/pull/226

  • Ajout de replace_first() dans gen_package.rhai : remplace uniquement la première occurrence du nom du package dans metadata.name, ce qui évite le doublement de {{instance.appslug}} quand l'upstream porte déjà le nom en préfixe.
  • clean_metadata / clean_annotations : suppression de toutes les annotations dont la clé contient helm.sh (filtre dynamique), y compris helm.sh/resource-policy.
Corrigé dans https://github.com/sebt3/vynil/pull/226 - Ajout de `replace_first()` dans `gen_package.rhai` : remplace uniquement la première occurrence du nom du package dans `metadata.name`, ce qui évite le doublement de `{{instance.appslug}}` quand l'upstream porte déjà le nom en préfixe. - `clean_metadata` / `clean_annotations` : suppression de toutes les annotations dont la clé contient `helm.sh` (filtre dynamique), y compris `helm.sh/resource-policy`.
xmortelette added the Kind/BugKind/Enhancement
Priority
Medium
3
labels 2026-06-11 09:44:14 +02:00
Sign in to join this conversation.