chore: build
ci-api / test (push) Successful in 25m49s

This commit is contained in:
Xor290
2026-08-18 20:07:52 +02:00
parent aa1aa60f00
commit dfc62c305d
25 changed files with 741 additions and 58 deletions
@@ -1337,23 +1337,55 @@ func (h *HelmProvisioner) waitForRollout(namespace string) error {
case <-ctx.Done():
return ctx.Err()
case <-time.After(5 * time.Second):
// Utiliser kubectl pour vérifier le rollout
cmd := exec.Command("kubectl", "rollout", "status", "deployment", "-n", namespace, "--timeout=30s")
var stderr bytes.Buffer
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
// Si c'est juste un timeout, on continue d'attendre
if strings.Contains(stderr.String(), "timed out") {
continue
}
return fmt.Errorf("rollout check: %v: %s", err, stderr.String())
ready, err := h.rolloutReady(ctx, namespace)
if err != nil {
return fmt.Errorf("rollout check: %w", err)
}
if ready {
return nil
}
// Si la commande réussit, tous les déploiements sont prêts
return nil
}
}
}
// rolloutReady : true si tous les Deployment et StatefulSet du namespace ont
// toutes leurs répliques prêtes. Remplace un ancien appel à
// "kubectl rollout status deployment -n <namespace>" — en plus de l'absence
// du binaire kubectl dans l'image (seul helm y est installé, voir
// control-plane/api/Dockerfile), cette commande était de toute façon
// invalide sans nom de déploiement précis (jamais réellement exercée avant
// la première migration premium en conditions réelles).
func (h *HelmProvisioner) rolloutReady(ctx context.Context, namespace string) (bool, error) {
deploys, err := h.k8sClient.AppsV1().Deployments(namespace).List(ctx, metav1.ListOptions{})
if err != nil {
return false, err
}
for _, d := range deploys.Items {
desired := int32(1)
if d.Spec.Replicas != nil {
desired = *d.Spec.Replicas
}
if d.Status.ReadyReplicas < desired {
return false, nil
}
}
statefulSets, err := h.k8sClient.AppsV1().StatefulSets(namespace).List(ctx, metav1.ListOptions{})
if err != nil {
return false, err
}
for _, s := range statefulSets.Items {
desired := int32(1)
if s.Spec.Replicas != nil {
desired = *s.Spec.Replicas
}
if s.Status.ReadyReplicas < desired {
return false, nil
}
}
return true, nil
}
// componentResourceLimits : limites CPU/mémoire configurées dans chaque chart
// (deploy/chart-gestion/*/values.yaml), utilisées pour calculer un % d'usage.
var componentResourceLimits = map[string]struct {