Skip to content

fix(server-nestjs): reuse Vault AppRole secret-id instead of minting on every sync - #2626

Merged
shikanime merged 2 commits into
mainfrom
fix/argocd-secret-id-idempotent
Sep 29, 2026
Merged

shikanime merged 2 commits into
mainfrom
fix/argocd-secret-id-idempotent

Conversation

@shikanime

Copy link
Copy Markdown
Member

Issues liées

Quel est le comportement actuel ?

À chaque synchronisation (project.upsert, cron), generateVaultValues appelle createAuthApproleRoleSecretId, qui émet un nouveau secret-id AppRole via POST auth/approle/role/{role}/secret-id. Le secret-id n'est ni relu ni réutilisé : il s'accumule dans Vault à chaque exécution, et son renouvellement systématique rend la diff de contenu des values toujours sale, d'où un nouveau commit values.yaml à chaque passage même sans changement de configuration.

Comportement attendu

Le secret-id est idempotent : une seconde synchronisation sans changement de configuration ne produit ni nouveau secret-id ni nouveau commit values.yaml. Le role-id continue d'être relu via GET (chemin inchangé).

Changements

  • createAuthApproleRoleSecretId devient un get-or-create : il relit un secret-id persisté dans le KV Vault du projet ; s'il existe, il le réutilise, sinon il le crée puis le persiste.
  • Ajout du chemin KV APPROLE_SECRET_ID (aux côtés des autres identifiants du projet).
  • Ajout de tests unitaires : premier sync crée et persiste le secret-id, sync suivant le réutilise sans en créer un nouveau.

@github-actions github-actions Bot added the built label Aug 28, 2026
@shikanime
shikanime force-pushed the fix/argocd-secret-id-idempotent branch 2 times, most recently from 297676a to e61aa06 Compare August 28, 2026 14:20
@shikanime
shikanime changed the base branch from main to fix/uniformize-error-guards August 28, 2026 14:22
Base automatically changed from fix/uniformize-error-guards to main August 28, 2026 15:54

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict : Changements demandés — conflit de fusion + gardes déjà sur main (PR propriétaire : commentaire, non request-changes).

  • mergeable=CONFLICTING — [🔴 Bloquant] La PR cible main mais re-implémente isVaultNotFound/isVaultBadRequest/isNexusNotFound/isGitbeakerUnauthorized qui y sont déjà (commit ec9c18a914). Le conflit porte précisément sur vault.utils.ts, nexus.utils.ts, gitlab.utils.ts. Rebasez sur main : gardez uniquement generateAppRoleSecretIdPath + la logique get-or-create de ensureAuthApproleRoleSecretId.
  • vault-client.service.ts:401-456 — [✨ Éloge] Le get-or-create du secret-id AppRole (relit le KV APPROLE_SECRET_ID, réutilise si présent, sinon mint + persiste) résout exactement #2622 : plus de nouveau commit values.yaml à chaque sync. Tests first/second-sync bien couverts.
  • argocd.service.ts:405 + spec — [🟢 Conforme] Le renommage createAuthApproleRoleSecretId → ensureAuthApproleRoleSecretId est cohérent partout (service + 5 mocks de spec).

Corrigez le conflit par un rebase sur main avant fusion.

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict : Approuvé — la PR reste en draft dans l'attente de la revue humaine.

Correction de la cause racine bien ciblée : le secret-id AppRole est relu dans le KV du projet avant toute nouvelle frappe, ce qui supprime l'accumulation de secret-id et les commits values.yaml fantômes à chaque cron ou upsert. Les primitives read/write existantes sont réutilisées telles quelles et les deux tests verrouillent précisément la Définition du fini de #2622.

Comment thread apps/server-nestjs/src/modules/vault/vault-client.service.ts
Comment thread apps/server-nestjs/src/modules/vault/vault-client.service.ts
@shikanime shikanime self-assigned this Sep 15, 2026
@shikanime
shikanime marked this pull request as ready for review September 15, 2026 15:02
@shikanime
shikanime requested a review from a team as a code owner September 15, 2026 15:02
@shikanime shikanime added the preview Deploy preview app with Argo-cd label Sep 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Hey !

A preview of the application is available at : https://console-pr-2626.dso.cpin-hp.numerique-interieur.fr

Please be patient, deployment may take a few minutes.

@shikanime
shikanime force-pushed the fix/argocd-secret-id-idempotent branch from f8f16bd to b8adfd8 Compare September 16, 2026 09:52
…on every sync

Refs #2622

Co-authored-by: Automata <automata@shikanime.studio>
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
Change-Id: Ie3d3b7df1e0539c02d6a215ce7eff82a6a6a6964
@shikanime
shikanime force-pushed the fix/argocd-secret-id-idempotent branch 2 times, most recently from 94c4326 to 7e78399 Compare September 16, 2026 10:02
@shikanime shikanime added this to the 9.27.0 milestone Sep 24, 2026
Co-authored-by: Automata <automata@shikanime.studio>
Signed-off-by: William Phetsinorath <william.phetsinorath-open@interieur.gouv.fr>
@cloud-pi-native-sonarqube

Copy link
Copy Markdown

@shikanime shikanime removed the preview Deploy preview app with Argo-cd label Sep 28, 2026
@shikanime shikanime moved this to Backlog in Cloud Pi Native Sep 29, 2026
@shikanime
shikanime added this pull request to the merge queue Sep 29, 2026
Merged via the queue into main with commit cd19cd3 Sep 29, 2026
34 checks passed
@shikanime
shikanime deleted the fix/argocd-secret-id-idempotent branch September 29, 2026 09:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants