Description
generateVaultValues (argocd.service.ts:399-416) génÚre un nouveau secret-id Vault AppRole à chaque synchronisation via vault.createAuthApproleRoleSecretId(projectSlug) (argocd.service.ts:405, méthode vault-client.service.ts:404-413).
Cette mĂ©thode fait un POST brut (auth/approle/role/{roleName}/secret-id) qui gĂ©nĂšre un secret-id frais Ă chaque appel â aucune vĂ©rification d'existence, aucune rĂ©utilisation, pas de listing prĂ©alable. AppelĂ©e sur chaque project.upsert et chaque cron, elle a deux consĂ©quences :
- Les secret-id s'accumulent dans Vault au fil des ré-synchronisations.
- Le secret-id frais est embarqué dans
values â le diff de contenu de generateCreateOrUpdateAction est toujours « sale » â un nouveau commit est Ă©crit Ă chaque cron/upsert mĂȘme quand rien n'a changĂ©.
Le .catch(() => undefined) (argocd.service.ts:405-408) masque les échecs au lieu de régler l'idempotence. Le role-id, lui, est bien relu via GET (:401).
Etapes de reproduction
- DĂ©clencher deux synchronisations successives du mĂȘme projet (upsert puis cron, ou deux upserts).
- Observer qu'un nouveau secret-id Vault est généré à chaque run et qu'un commit
values.yaml est écrit à chaque run.
- Constater l'accumulation des secret-id dans Vault.
Version de la console impactée
server-nestjs (module ArgoCD)
Définition du fini
Issues liees
Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.
Description
generateVaultValues(argocd.service.ts:399-416) génÚre un nouveau secret-id Vault AppRole à chaque synchronisation viavault.createAuthApproleRoleSecretId(projectSlug)(argocd.service.ts:405, méthodevault-client.service.ts:404-413).Cette méthode fait un POST brut (
auth/approle/role/{roleName}/secret-id) qui gĂ©nĂšre un secret-id frais Ă chaque appel â aucune vĂ©rification d'existence, aucune rĂ©utilisation, pas de listing prĂ©alable. AppelĂ©e sur chaqueproject.upsertet chaque cron, elle a deux consĂ©quences :valuesâ le diff de contenu degenerateCreateOrUpdateActionest toujours « sale » â un nouveau commit est Ă©crit Ă chaque cron/upsert mĂȘme quand rien n'a changĂ©.Le
.catch(() => undefined)(argocd.service.ts:405-408) masque les échecs au lieu de régler l'idempotence. Le role-id, lui, est bien relu via GET (:401).Etapes de reproduction
values.yamlest écrit à chaque run.Version de la console impactée
server-nestjs (module ArgoCD)
Définition du fini
Issues liees
Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.