Commit Graph
88 Commits
Author SHA1 Message Date
arcodange 2202e7bbfe Merge pull request 'feat(minio) — stockage objet S3 du homelab (brique partagée de tools)' (#18) from claude/minio into main
MinIO / Auth with gitea for vault (push) Successful in 43s
MinIO / Tofu - minio IAC (push) Failing after 13s
Helm Charts / Detect changed charts (push) Successful in 1m3s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Reviewed-on: #18
2026-07-25 18:17:07 +02:00
arcodangeandClaude Opus 5 84edfc8640 feat(minio) — stockage objet S3 du homelab (brique partagée de tools)
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Detect changed charts (pull_request) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
MinIO / Tofu - minio IAC (pull_request) Has been skipped
MinIO / Auth with gitea for vault (pull_request) Failing after 8m32s
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Le fondateur : « on déploie MinIO dans le repo tools du homelab non ? » — oui,
c'est bien le pattern : le dossier tools/ porte les briques PARTAGÉES
(pgbouncer, clickhouse, grafana…) et le namespace tools les fait tourner ; les
charts applicatifs vivent dans le repo de leur app.

Décidé de longue date côté produit, jamais déployé : ADR-012 « MinIO local
d'abord » (bascule R2 à 100+ utilisateurs / 10 To par mois), ADR-013 (le gratuit
reste local-first, MinIO sert les paliers payants). Vérifié avant d'écrire :
aucun pod ni service MinIO dans le cluster.

Le chart suit la recette du repo (dépendance à la library "tool" + chart amont
en SubChart, deux gardes dans templates/) :

- mode STANDALONE, 1 réplique : ce qui transite est DÉRIVÉ (le master d'une
  vidéo reste sur l'appareil de son propriétaire, ADR-018) et Longhorn réplique
  déjà le volume — l'erasure coding distribué coûterait de la RAM que des Pi 5
  n'ont pas à dépenser pour ça ;
- 50 Gi sur longhorn ≈ 250 h de cours au palier « travail » (360p, 3,4 Mo/min) ;
  ⚠ Longhorn réplique : compter ×3 sur la capacité avant d'augmenter ;
- ressources bornées (512 Mi / 2 Gi) : la limite protège les voisins de tools ;
- API s3.arcodange.lab + console minio.arcodange.lab (Traefik) ;
- bucket kadans-videos PRIVÉ — l'accès passera par des URL signées (ADR-0002) ;
- identifiants JAMAIS au dépôt : iac/ les génère dans Vault (kvv2/minio/config),
  le Vault Secrets Operator les matérialise, le chart les lit via existingSecret.
  Le SA du pod est nommé "minio" (pas le "minio-sa" amont) car le module
  app_roles borne l'authentification au SA portant le nom de l'app.

⚠ Le workflow minio.yaml écrit ses triggers EN TOUTES LETTRES : une ancre YAML
dans un trigger Gitea Actions fait taire push ET pull_request en silence (vécu
sur arcodange/kadans, issues 113→117). Les workflows plausible/crowdsec/vault de
ce repo en utilisent encore — à vérifier séparément, c'est probablement
pourquoi ils ne partent qu'à la main.

Vérifié : helm dependency update + helm template (11 ressources rendues, SA et
VaultAuth cohérents) + helm lint ✓.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
2026-07-25 16:49:34 +02:00
arcodange 342c4ab346 Merge pull request 'feat(grafana): exposer grafana.arcodange.fr via le tunnel Cloudflare (pattern kadans)' (#16) from arcodange/grafana-fr into main
Helm Charts / Detect changed charts (push) Successful in 58s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Reviewed-on: #16
2026-07-24 21:59:13 +02:00
arcodangeandClaude Fable 5 5fbc7f6ff8 feat(grafana): exposition publique grafana.arcodange.fr via le tunnel (pattern kadans)
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 23s
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Second Ingress (grafana-public) en PLUS du .lab, comme kadans :
- entrypoint `web` — TLS terminé en amont par le tunnel Cloudflare
  (wildcard *.arcodange.fr → traefik:80, rien à changer côté cms/cloudflare) ;
- middleware crowdsec (convention .fr) ;
- pas de basic-auth : Grafana a sa propre authentification (aucun accès
  anonyme dans grafana.ini), contrairement à kadans qui est ouvert.

Le .lab garde son localIp@file ; rendu par le wrapper SubChart et appliqué
par ArgoCD (précédent : prometheus/templates/vault-telegram.yaml).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-24 21:28:16 +02:00
arcodange bbf6653464 Merge pull request 'feat(observabilité) — jobs d'analyse Kadans : scrape du worker laptop + dashboard Grafana' (#15) from arcodange/observabilite-kadans into main
Helm Charts / Detect changed charts (push) Successful in 20s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-24 21:24:35 +02:00
arcodangeandClaude Fable 5 347ebee1b0 feat(observabilité) — jobs d'analyse Kadans : scrape du worker LAPTOP + dashboard Grafana
Helm Charts / Detect changed charts (push) Successful in 1m10s
Helm Charts / Detect changed charts (pull_request) Successful in 1m1s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
- prometheus : cible statique kadans-worker-mac (192.168.1.103:9105, tier
  laptop). Un scrape raté n'est PAS un incident : le Mac dort, up==0 raconte
  la latence — ne pas alerter dessus. ⚠ réserver l'IP au routeur (DHCP).
- grafana : provider + dashboard « Kadans — jobs d'analyse » (uid
  kadans-jobs-analyse) : worker en écoute / dernier poll / file pending + âge
  du plus ancien (seuils 1 h / 24 h = le SLO), file par statut et publications
  par issue (couleurs de STATUT sémantiques), lanes exécutées et durée moyenne
  par lane. La façade, elle, arrive par les annotations de son pod
  (kadans-jobs#3) — zéro config ici.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-24 21:17:06 +02:00
arcodange 53710d9fde Merge pull request 'feat(alerting): 5e règle homelab — CertificatNonRenouvele, le mode de panne du 24/07 au matin' (#14) from arcodange/homelab-alerts-cert into main
Helm Charts / Detect changed charts (push) Successful in 1m3s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Reviewed-on: #14
2026-07-24 12:51:52 +02:00
arcodangeandClaude Fable 5 6f398f4ddc feat(alerting): 5e règle homelab — CertificatNonRenouvele (<4 h restantes)
Helm Charts / Detect changed charts (pull_request) Successful in 22s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 1m8s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Les 4 premières règles n'auraient rien vu le matin du 2026-07-24 : nœuds up,
traefik up… mais wildcard 24 h expiré (renouvellement en échec silencieux
depuis des heures). certmanager_certificate_expiration_timestamp_seconds est
déjà scrapée (vérifié live : 2 séries). Cert-manager renouvelle à ~16 h d'âge ;
<4 h restantes = plusieurs cycles ratés → critical, 15 min de grâce.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-24 10:17:18 +02:00
arcodange ffce6990a3 Merge pull request 'feat(alerting): groupe homelab — être prévenu sur Telegram quand (ou juste avant que) le lab tombe' (#13) from arcodange/homelab-alerts into main
Helm Charts / Detect changed charts (push) Successful in 1m9s
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
Reviewed-on: #13
2026-07-24 00:29:29 +02:00
arcodangeandClaude Fable 5 b9626d878b feat(alerting): groupe homelab — alerté quand (ou juste avant que) le lab tombe
Helm Charts / Detect changed charts (pull_request) Successful in 2m2s
Helm Charts / Detect changed charts (push) Successful in 10m9s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Incident 2026-07-23 : un build CI sans limites a épuisé la RAM de pi1 (0 swap),
load15 >100, traefik + apiserver affamés → tout *.arcodange.lab injoignable,
Gitea compris (pourtant sain sur pi2). Personne n'est prévenu : on subit.

Quatre règles, livrées par la chaîne Telegram déjà en place (testée live) :
- NoeudInjoignable (critical) : node-exporter muet 3 min — nœud down ou noyé.
- IngressLabIndisponible (critical) : 0 replica traefik dispo, ou métrique
  absente (kube-state-metrics vit sur pi1) — *.arcodange.lab est HS.
- NoeudPressionMemoire (warning) : <500 Mo dispo 5 min — le précurseur exact
  de l'incident, déclenche avant le thrash.
- NoeudEnSurcharge (warning) : load15 >8 pendant 10 min.

Exprs validées contre le Prometheus live (parse + match) : pendant la rédaction,
IngressLabIndisponible et NoeudEnSurcharge matchaient l'incident en cours.
Prometheus (pi3) et Alertmanager (pi2) survivent à la perte de pi1.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-24 00:12:37 +02:00
arcodange bc62304bc3 Merge pull request 'fix(alerting): alerte fiable sur l'échec de la vidéo quotidienne du brief' (#12) from arcodange/alert-brief-video into main
Helm Charts / Detect changed charts (push) Successful in 21s
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
2026-07-23 22:06:15 +02:00
arcodangeandClaude Opus 4.8 8e236230d3 fix(alerting): alerte fiable sur l'échec de la vidéo quotidienne du brief
Helm Charts / Detect changed charts (push) Successful in 2m50s
Helm Charts / Detect changed charts (pull_request) Successful in 18s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
ProspectionBriefNotSent (pushed==0, severity info) ne couvrait que la
livraison et déclenchait à tort quand l'étape brief était volontairement
sautée (metrics.py émet brief_rendered=0 aussi sur skip — seul
step_status{step="brief"} distingue skip(2) d'erreur(0)).

Remplacé par deux règles warning, gardées contre le skip :
- ProspectionBriefFailed : rendered==0 AND step_status{brief}!=2 → la
  PRODUCTION de la vidéo a échoué (TTS/ffmpeg/PIL ou erreur amont) ;
- ProspectionBriefNotSent : pushed==0 AND rendered==1 → vidéo produite
  mais PAS livrée sur Telegram (token/chat_id/API).

Expressions validées en live sur Prometheus (match on(job) prouvé par
requête témoin, les deux exprs vides sur l'état sain du jour). En-tête du
groupe mis à jour : la livraison AM→Telegram est câblée et testée.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-23 22:05:45 +02:00
arcodange 65ff6fcc34 feat: ajouter kadans à vault
Helm Charts / Detect changed charts (push) Successful in 1m2s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-13 18:55:26 +02:00
arcodange ef9e6c62c2 Merge pull request 'feat(grafana): complète le dashboard de monitoring du pipeline prospection' (#11) from arcodange/prospection-grafana-dashboard into main
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-10 08:48:42 +02:00
arcodangeandClaude Opus 4.8 4133396720 feat(grafana): complète le dashboard de monitoring du pipeline prospection
Helm Charts / Detect changed charts (push) Successful in 1m0s
Helm Charts / Detect changed charts (pull_request) Successful in 44s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Aligne le dashboard « Prospection — pipeline BI missions » sur le cahier
des charges de supervision :
- jauge 0–100 pour le meilleur score d'opportunité (au lieu d'une stat)
- nouvelle stat « Offres du brief » (prospection_brief_offres)
- bar charts « Durée par étape » et « Items par étape » sur le dernier run
  (prospection_step_duration_seconds / prospection_step_items)
- cadence quotidienne : refresh 30m et plage par défaut now-7d

Provisionné via le provider Grafana « prospection » (JSON inline dans
grafana/values.yaml), datasource Prometheus (${DS_PROMETHEUS}).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-10 08:47:58 +02:00
arcodange 5fae1f31db Merge pull request 'fix(alerting): VaultAuth Telegram exige vaultConnectionRef dans le ns tools' (#10) from arcodange/am-telegram-fix into main
Helm Charts / Detect changed charts (push) Successful in 18s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-08 23:23:33 +02:00
arcodangeandClaude Opus 4.8 4005d89c0c fix(alerting): VaultAuth Telegram exige vaultConnectionRef dans le ns tools
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Detect changed charts (pull_request) Successful in 15s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
VSO refuse un VaultAuth sans vaultConnectionRef dans le ns tools
(« vaultConnectionRef must be set on resources in the "tools" namespace »),
contrairement au ns prospection qui hérite d'une connexion par défaut. On
référence la VaultConnection `default` déjà présente dans tools. Sans ça, le
Secret alertmanager-telegram n'est jamais synchronisé et le pod Alertmanager
reste bloqué sur le montage manquant.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-08 23:23:07 +02:00
arcodange 7a8c8537a5 Merge pull request 'feat(alerting): livraison Telegram des alertes via Alertmanager' (#9) from arcodange/am-telegram into main
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-08 23:20:31 +02:00
arcodangeandClaude Opus 4.8 714e2bc2ab feat(alerting): livraison Telegram des alertes via Alertmanager
Helm Charts / Detect changed charts (push) Successful in 14s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 14s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Les règles d'alerte `prospection` s'évaluaient déjà dans Prometheus mais ne
notifiaient nulle part. On câble Alertmanager pour livrer les alertes sur le bot
Telegram de prospection, via `telegram_configs` natif d'Alertmanager.

- iac Vault : policy read-only `alertmanager-telegram` sur
  kvv2/data/prospection/telegram + rôle k8s `alertmanager` (SA
  prometheus-alertmanager, ns tools).
- VSO : VaultAuth + VaultStaticSecret resynchronisent kvv2/prospection/telegram
  vers un Secret `alertmanager-telegram` dans le ns tools (le Secret prospection
  est namespace-scoped, non réutilisable). rolloutRestartTargets sur le
  StatefulSet Alertmanager.
- prometheus values : lien server -> Alertmanager (prometheus-alertmanager:9093),
  route + receiver `telegram` (bot_token_file monté, chat_id inline, parse_mode
  HTML, send_resolved), et montage du Secret via extraSecretMounts.

Additif : ni grafana ni les règles d'alerte existantes ne sont touchés.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-08 23:20:00 +02:00
arcodange 1eabae6936 Merge pull request 'fix(grafana): startupProbe pour les migrations SQLite (CrashLoop au rollout)' (#8) from arcodange/grafana-startupprobe into main
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-08 20:15:53 +02:00
arcodangeandClaude Opus 4.8 e419cb6307 fix(grafana): startupProbe + liveness grace pour les migrations SQLite
Helm Charts / Detect changed charts (push) Successful in 24s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 17s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Grafana tourne en SQLite sur emptyDir → migration complète du schéma à chaque
démarrage de pod, > 160 s sur Raspberry Pi. La liveson (initialDelay 60 + 10×10s)
tuait Grafana en pleine migration → CrashLoop du nouveau pod à chaque rollout
(révélé par le rollout du dashboard prospection). Ajoute une startupProbe (~10 min)
et relève failureThreshold de la liveness (filet si le chart n'expose pas startupProbe).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-08 20:14:56 +02:00
arcodange e9998e3b48 Merge pull request 'feat(monitoring): dashboard Grafana + alertes prospection' (#7) from arcodange/prospection-monitoring into main
Helm Charts / Detect changed charts (push) Successful in 21s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-08 20:02:46 +02:00
arcodangeandClaude Opus 4.8 e6fca752a2 feat(monitoring): dashboard Grafana + règles d'alerte prospection
Helm Charts / Detect changed charts (push) Successful in 22s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 21s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Consomme les métriques poussées par le pipeline prospection au Pushgateway
(job=prospection, déjà scrapé). Additif — n'affecte aucun dashboard existant.

- grafana : provider + dashboard « Prospection — pipeline BI missions » inliné
  (grafana.dashboards.prospection, json) — vue d'ensemble (fraîcheur/statut/durée/
  erreurs/missions/score), collecte par étape (table + historique), modèle de
  données (opportunités A/B, offres/entités), livraison (brief/Telegram) + panneau
  Alertes actives. Inline plutôt que ConfigMap externe : grafana est déployé via un
  HelmChart CRD (tool lib), l'inline évite toute hypothèse de namespace.
- prometheus : groupe d'alertes `prospection` (serverFiles.alerting_rules.yml) —
  RunStale (>25h), RunFailed, StepError, NoOffers, BriefNotSent.

NB : la livraison des alertes (Alertmanager → Telegram) n'est pas câblée dans le
cluster (server.alertmanagers vide, aucun receiver) ; les règles restent visibles
dans Prometheus /alerts + le dashboard. Câblage delivery = décision séparée.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-08 19:52:29 +02:00
arcodange b4f945c310 Merge pull request 'feat(vault): onboard prospection (gitea_cicd role + ops policy)' (#6) from arcodange/onboard-prospection into main
Helm Charts / Detect changed charts (push) Successful in 46s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-07-08 15:39:57 +02:00
arcodangeandClaude Opus 4.8 31a66884d6 feat(vault): onboard prospection (gitea_cicd role + ops policy)
Helm Charts / Detect changed charts (push) Successful in 5m32s
Helm Charts / Detect changed charts (pull_request) Successful in 1m2s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Ajoute prospection à la liste app_policies → crée le rôle JWT gitea_cicd_prospection
et la policy prospection-ops, requis par le workflow vault.yaml du repo prospection
(qui provisionne le rôle k8s-auth + la policy de lecture kvv2/prospection/*).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-08 15:37:44 +02:00
arcodange 5b24738dcf Merge pull request 'feat(vault): erp prod runtime may read the shared GCS backup creds (kv_read_paths)' (#5) from claude/erp-backup-vault-read into main
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-06-30 17:40:31 +02:00
arcodangeandClaude Opus 4.7 2953ec3202 feat(vault): erp prod runtime may read the shared GCS backup creds (kv_read_paths)
Helm Charts / Detect changed charts (push) Successful in 21s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 14s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Adds an optional kv_read_paths list to the app_policy module (default []) so an
app's env=prod runtime policy can read extra kvv2 data paths — e.g. a shared
backup-creds path owned by another app. Plumbed through the root applications
schema + module call (dynamic rule, read+list).

Set for erp: kv_read_paths = ["kvv2/data/longhorn/gcs-backup"], so the dedicated
Dolibarr backup CronJob (erp chart, gated) can read the existing GCS HMAC creds
via its own VaultStaticSecret instead of borrowing the Longhorn secret
cross-namespace or duplicating credentials.

No-op for every other app (default []). Only the `erp` runtime policy gains one
read+list rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-06-30 16:29:15 +02:00
arcodange 06c5eb4391 Merge pull request 'fix(vault): rename applications.policies → ops_policies (cms CI was silently missing its R2 policy)' (#4) from claude/fix-cms-ops-policies-key into main
Helm Charts / Detect changed charts (push) Failing after 10m13s
Helm Charts / Library charts tool (push) Has been cancelled
Helm Charts / Application charts pgcat (push) Has been cancelled
2026-06-28 19:21:54 +02:00
arcodangeandClaude Opus 4.7 3170a341d1 fix(vault): rename applications.policies field to ops_policies (cms CI was silently missing its R2 policy)
Helm Charts / Detect changed charts (pull_request) Successful in 19s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Detect changed charts (push) Failing after 13m59s
Helm Charts / Library charts tool (push) Has been cancelled
Helm Charts / Application charts pgcat (push) Has been cancelled
The `applications` object field was declared `policies` in variables.tf, but
the cms tfvars entry, the runbook (doc/runbooks/new-web-app/03-vault-platform.md),
the guidebook (vibe/guidebooks/tools/secrets-and-vso.md) and the module input
(modules/app_policy variable `ops_policies`) all use the name `ops_policies`.

Because Terraform silently drops unknown attributes when converting a value to
an object() type, cms's `ops_policies = ["factory__cf_r2_arcodange_tf"]` was
discarded and `each.value.policies` fell back to [] — so gitea_cicd_cms never
received the `factory__cf_r2_arcodange_tf` token policy (read on
kvv1/cloudflare/r2/arcodange-tf + kvv1/zoho/self_client, defined in
factory iac/cloudflare.tf). cms CI was missing its Cloudflare R2 Terraform-state
permissions.

Fix at the root: rename the schema field `policies` -> `ops_policies` (and its
single reference main.tf:82 `each.value.policies` -> `each.value.ops_policies`),
aligning the whole chain. This is lower-churn than renaming the tfvars key (the
chosen alternative would also have required fixing the runbook + guidebook, which
both already document `ops_policies`) and prevents the next app created from the
runbook from re-introducing the same silently-dropped key.

Behavioural change: gitea_cicd_cms gains `factory__cf_r2_arcodange_tf` in its
token_policies. No other app sets this field (all default []), so no other role
changes. Reviewer: confirm the R2 policy is the intended grant for cms CI.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-06-28 19:18:06 +02:00
arcodange fd93359f2e Merge pull request 'feat(multi-env): Phase D2 — Vault policies for erp-sandbox' (#3) from claude/phaseD-erp-sandbox-vault into main
Helm Charts / Detect changed charts (push) Successful in 1m8s
Helm Charts / Library charts tool (push) Failing after 11m12s
Helm Charts / Application charts pgcat (push) Has been cancelled
2026-06-28 17:19:20 +02:00
arcodangeandClaude Opus 4.7 25569eb29d feat(multi-env): Phase D2 — Vault policies for erp-sandbox
Helm Charts / Detect changed charts (pull_request) Failing after 11m29s
Helm Charts / Detect changed charts (push) Failing after 12m7s
Helm Charts / Library charts tool (push) Has been cancelled
Helm Charts / Application charts pgcat (push) Has been cancelled
Helm Charts / Library charts tool (pull_request) Has been cancelled
Helm Charts / Application charts pgcat (pull_request) Has been cancelled
ADR-0002 Phase D, Vault layer. `erp` gains `envs = ["prod", "sandbox"]`,
which flows into the app_policy module (main.tf:81 `envs = each.value.envs`).
For erp the module now resolves instances = ["erp", "erp-sandbox"], so the
apply:
  - ADDS  vault_policy.app_non_prod["erp-sandbox"] — the runtime policy
          named `erp-sandbox` (read kvv2/data/erp-sandbox/* +
          postgres/creds/erp-sandbox*), consumed by the sandbox pod's VSO.
  - UPDATES vault_policy.ops["erp"] in place — the `erp-ops` CI policy
          gains the erp-sandbox kvv2 data/delete/undelete/destroy/metadata
          rules + the erp-sandbox values in the k8s-role allowed_parameter
          lists, so CI can manage the sandbox instance. The glob rules
          (postgres/roles/erp*, kvv1/cloudflare/erp*, auth/kubernetes/role/erp*)
          already covered erp-sandbox, so they don't change.

No destroy/replace. prod `erp` runtime policy + every other app render
byte-identical (their envs still default to ["prod"]).

Diff kept to the single erp line — the pre-existing cms/crowdsec/plausible
alignment is left as-is on main (not reformatting unrelated entries).

D2 of Phase D. D1 (postgres DB+role) = factory#17 (merged). D3 (erp iac
creds + KV) and D4 (ArgoCD) follow.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-06-28 17:14:53 +02:00
arcodange 01de97853d Merge pull request 'modules: Phase A of multi-env — add env/envs parameter to app_roles and app_policy' (#2) from claude/multi-env-modules into main
Helm Charts / Detect changed charts (push) Successful in 51s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Reviewed-on: #2
2026-06-19 19:22:29 +02:00
arcodangeandClaude Opus 4.7 a3e121b468 modules: add env/envs parameter to app_roles + app_policy (multi-env)
Helm Charts / Detect changed charts (push) Successful in 23s
Helm Charts / Detect changed charts (pull_request) Successful in 22s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Phase A of the multi-environment evolution agreed in the erp repo design
thread. Both modules gain an optional env coordinate that defaults to
"prod"; by the elision rule, env=prod produces the existing single-env
derived names character-for-character, so every existing app's tofu plan
is a no-op.

app_roles (per-instance module — caller iterates over envs):
- variables.tf: add optional env = "prod"
- main.tf: compute local.instance via elision rule + local.owner_role
  (snake-case <name>_<env>_role for the Postgres owner). The name/env/
  database locals are grouped so fmt keeps the existing `name` alignment
  (no whitespace churn on unchanged keys).
- main.tf: substitute local.name -> local.instance / local.owner_role in
  the dynamic role name, k8s role name, SA bindings, token_policies
- outputs.tf: add env + instance outputs; kvv2_path_prefix derives from
  local.instance (== local.name when env=prod → backwards-compat)

app_policy (per-repo module — accepts list of envs):
- variables.tf: add optional envs = ["prod"]
- main.tf: compute local.instances + local.non_prod_instances; remove the
  now-dead bound_service_account_* alias locals (the allowed_parameter
  blocks build their values from per_instance_sa_* maps instead)
- main.tf: kvv2 ops rules become dynamic blocks iterating local.instances
  in the original order (data, delete, undelete, destroy, metadata), so a
  prod-only app renders a byte-identical policy document
- main.tf: allowed_parameter for bound_service_account_* + token_policies
  use comprehensions over local.instances (1-element → identical to old
  static values for prod-only apps)
- main.tf: keep vault_policy.app (env=prod runtime policy) at its original
  address; add vault_policy.app_non_prod via for_each over non_prod_instances
  (empty set for prod-only apps → no new resources)

Top-level wiring:
- iac/variables.tf: add envs = optional(list(string), ["prod"]) to the
  applications set(object) type
- iac/main.tf: pass envs = each.value.envs to app_policies

Verified: `tofu fmt -check` clean on all touched files, `tofu validate`
passes. Backwards-compat reasoning for the no-op plan is in the PR body.

Phase B (factory postgres iac + argocd + runbook docs) and Phase D
(erp iac/main.tf for_each + activate sandbox) follow in their own PRs.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-06-15 14:29:11 +02:00
arcodange 023cee3447 🤖 ci(vault): declare dance-lessons-coach JWT role + ops policy (#1)
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 11s
Co-authored-by: Gabriel Radureau <[email protected]>
Co-committed-by: Gabriel Radureau <[email protected]>
2026-05-06 12:55:26 +02:00
arcodange 2367bd6cd7 fix(crowdsec): use Recreate strategy for lapi to avoid RWO volume multi-attach
Helm Charts / Detect changed charts (push) Successful in 49s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
RollingUpdate with maxSurge>0 creates a new pod before terminating the old one,
causing a Multi-Attach error on the RWO PVCs (crowdsec-db-pvc, crowdsec-config-pvc).
Recreate terminates the old pod first, then starts the new one.
2026-04-16 10:25:10 +02:00
arcodange 82a6eb0d85 configure grafana with prometheus
Helm Charts / Detect changed charts (push) Successful in 5m2s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-03-18 17:07:35 +01:00
arcodange a762c8f90f deploy prometheus
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 25s
Helm Charts / Library charts tool (push) Has been skipped
2026-03-18 16:21:31 +01:00
arcodange 1b2c325023 no clickhouse pod on pi2
Helm Charts / Detect changed charts (push) Successful in 25s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-01-03 19:17:04 +01:00
arcodange 9f0adfe14d use self signed cert
Helm Charts / Detect changed charts (push) Successful in 1m2s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2026-01-02 19:07:46 +01:00
arcodange 02322e9a24 use internal .lab instead of failing duckdns.org
Helm Charts / Detect changed charts (push) Successful in 22s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Failing after 34s
2025-12-31 17:54:36 +01:00
arcodange 2c8de3468a set IP_GEOLOCATION_DB to geoip lite city db
Helm Charts / Detect changed charts (push) Successful in 3m29s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-12 15:32:58 +01:00
arcodange 87aac41959 plausible:geoip include free city database
Helm Charts / Detect changed charts (push) Successful in 3m38s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-11 13:09:56 +01:00
arcodange 2f0bc7ab4a expose plausible event api
Helm Charts / Detect changed charts (push) Successful in 3m28s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-11 08:29:17 +01:00
arcodange 3225c17b4a fix ingressroute service
Helm Charts / Detect changed charts (push) Successful in 3m44s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-11 07:51:06 +01:00
arcodange d91f8e2900 fix yaml indentation
Helm Charts / Detect changed charts (push) Successful in 3m38s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-11 07:39:55 +01:00
arcodange ec0f42676a fix: specify namespace in kustomization.yaml
Helm Charts / Detect changed charts (push) Successful in 3m31s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-11 07:28:58 +01:00
arcodange 6822b53775 clickhouse: donne droit de lecture sur bd system
Helm Charts / Detect changed charts (push) Successful in 12s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 16:58:07 +01:00
arcodange 5b13d0f679 plausible: fix clickhouse url
Helm Charts / Detect changed charts (push) Successful in 3m58s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 15:54:41 +01:00
arcodange dee0fed059 plausible: add reconnect config for orm
Helm Charts / Detect changed charts (push) Successful in 14s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 15:46:58 +01:00
arcodange 09d7aa9b9e pgboucner: set server_idle_tiemout to 2h
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 15:35:28 +01:00
arcodange 0b74c97a85 plausible: don't run db create
Helm Charts / Detect changed charts (push) Successful in 3m35s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 15:15:53 +01:00
arcodange 0942171673 set crowdsec lapi deployment strategy
Helm Charts / Detect changed charts (push) Successful in 3m50s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 15:00:57 +01:00
arcodange a8c497a5da try plausible CE for web analytics 2025-12-10 15:00:47 +01:00
arcodange d7130b1635 create plausible clickhouse database
Helm Charts / Detect changed charts (push) Successful in 3m9s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-10 13:19:56 +01:00
arcodange a5338ac6f7 TODO: 1 vault_database_secret_backend_connection per database 2025-12-09 12:58:59 +01:00
arcodange 2903f70e9f fixes
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-09 12:14:57 +01:00
arcodange 4f578b1164 set securityContext for redis pod to run as redis user
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-09 11:06:41 +01:00
arcodange bcb868944d fix grafana clickhouse datasource
Helm Charts / Detect changed charts (push) Successful in 2m55s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
change promql based dashboard for sql
2025-12-08 16:30:25 +01:00
arcodange 269f09b7a8 try kustomize overlays
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-08 15:15:47 +01:00
arcodange 3be78a836a try kustomize patch with argocd
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-06 14:57:42 +01:00
arcodange 2b6fc7937b configure clickhouse user
Helm Charts / Detect changed charts (push) Successful in 19s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-06 14:29:21 +01:00
arcodange 7df5d01de8 try grafana and clickhouse dashboard
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-06 01:24:37 +01:00
arcodange e0641c4c42 document redis insights usage - redis gui
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-05 21:39:57 +01:00
arcodange 4cbc28bbdb try clickhouse - pascaliske chart
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-04 17:26:48 +01:00
arcodange 7676196b8a use pascaliske chart for redis
Helm Charts / Detect changed charts (push) Successful in 12s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-04 13:01:08 +01:00
arcodange c46c479dc5 try chatgpt provided chart for redis/keyDB
Helm Charts / Detect changed charts (push) Successful in 18s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-04 12:31:32 +01:00
arcodange 5e6c2acb21 try out keyDB - redis alternative
Helm Charts / Detect changed charts (push) Successful in 12s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-04 11:29:54 +01:00
arcodange 07e2c6d171 fix attempt for crowdsec sql error
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-03 18:29:05 +01:00
arcodange 859057be66 configure postgresql for crowdsec
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-12-03 18:08:53 +01:00
arcodange 2d5ec8a859 allow a SA from factory project (ansible orchestrator) to read cms cloudflare turnstile values for crowdsec captcha
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (push) Successful in 23s
2025-12-03 15:18:20 +01:00
arcodange c490d37fd7 add ops_ prefix to policies applied to cicd role 2025-12-03 15:16:46 +01:00
arcodange 50f8ea95be allow several k8s SA to take an app policy
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-11-27 23:24:47 +01:00
arcodange 56a5bf9e18 try crowdsec
Helm Charts / Detect changed charts (push) Successful in 18s
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
2025-11-26 12:22:18 +01:00
arcodange 98395dbe5d vault kvv1/ovh/<app> permission
Helm Charts / Detect changed charts (push) Successful in 20s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-11-04 10:11:05 +01:00
arcodange 24c3d92522 enable per app role list of policies
Helm Charts / Detect changed charts (push) Successful in 18s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-10-30 10:05:25 +01:00
arcodange ea9e41ff1a tofu fmt -recursive and kvv1/cloudflare permission for cms project
Helm Charts / Detect changed charts (push) Successful in 55s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-10-24 18:00:16 +02:00
arcodange be6e6135d7 documentation and fmt
Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-08-31 11:33:27 +02:00
arcodange 3f6604def2 add tool/NOTES.txt
Helm Charts / Detect changed charts (push) Successful in 15s
Helm Charts / Library charts tool (push) Successful in 14s
Helm Charts / Application charts pgcat (push) Has been skipped
2025-08-27 18:54:16 +02:00
arcodange a1261d6c80 workflow dispatch trigger
Helm Charts / Detect changed charts (push) Successful in 50s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
2025-08-08 12:32:44 +02:00
arcodange 784c014224 add app_roles terraform module for vault and declare erp app 2024-11-08 19:01:22 +01:00
arcodange bbb0bc7d5f configure vault secrets operator 2024-10-30 11:21:48 +01:00
arcodange 3a506543ce apply vault config from CI 2024-10-05 23:58:24 +02:00
arcodange 24a559fb1a fix: pq: unsupported startup parameter: extra_float_digits 2024-09-29 18:06:13 +02:00
arcodange 7a640d104c experiment with vault configuration 2024-09-27 12:22:36 +02:00
arcodange c0eb204ac7 fix pgbouncer nodeSelector 2024-09-05 20:47:10 +02:00
arcodange 042e5b8767 add hashicorp vault 2024-09-05 19:45:42 +02:00
arcodange ddb0112696 declare tools (#1)
Reviewed-on: https://gitea.arcodange.duckdns.org/arcodange-org/tools/pulls/1
Co-authored-by: Gabriel Radureau <[email protected]>
Co-committed-by: Gabriel Radureau <[email protected]>
2024-09-04 11:00:44 +02:00
arcodange 9af9e41b0d first commit 2024-08-28 17:20:18 +02:00