Helm Charts / Detect changed charts (push) Successful in 16s
Helm Charts / Detect changed charts (pull_request) Successful in 16s
MinIO / Auth with gitea for vault (pull_request) Failing after 8m32s
MinIO / Tofu - minio IAC (pull_request) Has been skipped
MinIO / Auth with gitea for vault (push) Failing after 8m31s
MinIO / Tofu - minio IAC (push) Has been skipped
Helm Charts / Library charts tool (push) Has been cancelled
Helm Charts / Application charts pgcat (push) Has been cancelled
Hashicorp Vault / Auth with gitea for vault (push) Has been cancelled
Hashicorp Vault / Tofu - Vault IAC (push) Has been cancelled
Helm Charts / Library charts tool (pull_request) Has been skipped
Hashicorp Vault / Auth with gitea for vault (pull_request) Failing after 8m32s
Hashicorp Vault / Tofu - Vault IAC (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
« Les buckets sont à déclarer dans le repo de kadans-api. On ne va pas modifier le repo tools à chaque changement d'application. Chacun son périmètre. Tools peut proposer un module pour standardiser la déclaration de buckets à la limite, mais c'est tout. » (fondateur, 26/07) C'est une erreur de fond de ma part : j'avais fait de `tools` le PROPRIÉTAIRE de déclarations qui appartiennent aux applications. À ce rythme, chaque nouveau bucket de n'importe quelle app devenait une PR sur l'infra partagée. CE QUI CHANGE. `consumers.tf` disparaît, et la liste de buckets du chart se vide. À la place, un module réutilisable `iac/modules/minio_app` : une app lui donne son nom et ses buckets, et reçoit des buckets privés, un compte de service qui ne peut rien toucher d'autre, et ses clés dans `kvv2/minio/<app>`. L'OBSTACLE, ET SA RÉPONSE. Déclarer ses buckets depuis son propre dépôt suppose des droits d'ADMINISTRATION sur MinIO. Confier le root serait absurde : il lit et écrit tous les objets de toutes les apps. `tools` fournit donc un compte PROVISIONNEUR aux droits minimaux — créer un bucket, une politique, un compte de service — et AUCUN droit sur les objets. Une app compromise pourrait créer des buckets (une nuisance), pas lire les vidéos d'une autre. Le root, lui, ne sort toujours pas de ce pipeline. Le rôle CI de chaque app gagne la lecture de `kvv2/data/minio/provisioner` dans `app_policy` — générique, et c'est exactement le genre de standardisation qui appartient au dépôt commun. ⚠ CE QUE JE N'AI PAS PU PROUVER : les noms d'actions d'administration MinIO de la politique du provisionneur viennent de la documentation, pas d'un essai — je n'ai pas d'identifiants admin en main. Le premier `apply` les confirmera ou les corrigera. C'est le seul point non vérifié de cette PR, et il est signalé dans le code à l'endroit exact. tofu fmt propre · tofu validate réussi sur minio/iac ET hashicorp-vault/iac. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
94 lines
3.7 KiB
YAML
94 lines
3.7 KiB
YAML
minio: &minio_config
|
||
# Image officielle MinIO — multi-arch, arm64 inclus (les nœuds sont des Pi 5).
|
||
image:
|
||
repository: quay.io/minio/minio
|
||
pullPolicy: IfNotPresent
|
||
|
||
# STANDALONE : un seul serveur, un seul volume. La donnée servie ici est
|
||
# DÉRIVÉE (le master reste chez l'utilisateur) et Longhorn réplique déjà le
|
||
# volume ; l'erasure coding distribué coûterait de la RAM que les Pi n'ont pas
|
||
# à dépenser pour ça. `replicas` est ignoré en standalone.
|
||
mode: standalone
|
||
replicas: 1
|
||
|
||
# Le rôle Vault du module `app_roles` borne l'authentification au SERVICE
|
||
# ACCOUNT nommé comme l'app (`bound_service_account_names = [minio]`) : on
|
||
# aligne donc le SA du pod sur ce nom, plutôt que le « minio-sa » par défaut
|
||
# du chart amont — un SA pour le pod, le même pour Vault, rien à réconcilier.
|
||
serviceAccount:
|
||
create: true
|
||
name: minio
|
||
|
||
# Identifiants JAMAIS dans le dépôt : le secret est matérialisé par le
|
||
# Vault Secrets Operator depuis kvv2/minio/config (voir resources/ et iac/).
|
||
# Le chart lit `.data.rootUser` et `.data.rootPassword` de ce secret.
|
||
existingSecret: minio-config
|
||
|
||
persistence:
|
||
enabled: true
|
||
storageClass: longhorn
|
||
accessMode: ReadWriteOnce
|
||
# 50 Gi ≈ 250 heures de cours au palier « travail » de Kadans (360p,
|
||
# 3,4 Mo/min — ADR-018 du front). Longhorn réplique ce volume sur les
|
||
# nœuds : compter ×3 sur la capacité du cluster avant d'augmenter.
|
||
size: 50Gi
|
||
|
||
# Des Pi 5 à 8 Go partagés avec le reste de `tools` : on borne franchement.
|
||
# MinIO standalone est frugal ; la limite protège les voisins, pas MinIO.
|
||
resources:
|
||
requests:
|
||
memory: 512Mi
|
||
cpu: 100m
|
||
limits:
|
||
memory: 2Gi
|
||
|
||
# API S3 (les applications parlent ici).
|
||
ingress:
|
||
enabled: true
|
||
ingressClassName: traefik
|
||
path: /
|
||
hosts:
|
||
- s3.arcodange.lab
|
||
|
||
# Console d'administration (humains).
|
||
consoleIngress:
|
||
enabled: true
|
||
ingressClassName: traefik
|
||
path: /
|
||
hosts:
|
||
- minio.arcodange.lab
|
||
|
||
# Buckets créés au déploiement. `versioning: false` assumé : ces objets sont
|
||
# DÉRIVÉS et re-générables depuis le master local — versionner doublerait le
|
||
# stockage pour un filet dont on n'a pas besoin.
|
||
# AUCUN bucket ici : chaque application déclare LES SIENS depuis son propre
|
||
# dépôt, via le module `iac/modules/minio_app` (fondateur 2026-07-26 : « on ne
|
||
# va pas modifier le repo tools à chaque changement d'application, chacun son
|
||
# périmètre »). `tools` fournit le serveur, le provisionneur et le module —
|
||
# pas la liste.
|
||
buckets: []
|
||
|
||
# Métriques : Prometheus (namespace `tools`) scrape déjà la façade et le
|
||
# laptop (ADR-0014 du dossier) — MinIO rejoint la même vue.
|
||
metrics:
|
||
serviceMonitor:
|
||
enabled: false # pas d'opérateur Prometheus ici : scrape par annotation
|
||
environment:
|
||
MINIO_PROMETHEUS_AUTH_TYPE: "public"
|
||
# CORS : le navigateur téléverse DIRECTEMENT vers MinIO depuis la PWA (URL
|
||
# présignées, kadans-api#23) — donc requête inter-origines, donc préflight
|
||
# OPTIONS. Sans cette liste, le PUT est refusé par le navigateur avant même
|
||
# de partir. Origines EXACTES, jamais « * » : une URL présignée qui fuite
|
||
# serait rejouable depuis n'importe quel site.
|
||
# .fr = la PWA publique (le cas réel, en déplacement comme à la maison)
|
||
# .lab = la même app servie en interne, pour la mise au point
|
||
MINIO_API_CORS_ALLOW_ORIGIN: "https://kadans.arcodange.fr,https://kadans.arcodange.lab"
|
||
|
||
tool:
|
||
# kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template
|
||
kind: 'SubChart'
|
||
repo: https://charts.min.io/
|
||
chart: minio
|
||
version: 5.4.0
|
||
values: *minio_config
|