chore: update
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
||||
k8sCoreV1 "k8s.io/api/core/v1"
|
||||
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/kubernetes/scheme"
|
||||
"k8s.io/client-go/rest"
|
||||
@@ -314,6 +315,80 @@ func (h *HelmProvisioner) MigrateToPremiumNamespace(d Demo, newNamespace, newURL
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateDomain change le domaine public d'une démo sans changer de
|
||||
// namespace ni migrer de données : réinstalle l'IngressRoute avec le
|
||||
// nouveau host (Traefik route sur le nom d'hôte), et si un bot Telegram
|
||||
// et/ou le load-balancer lbtelegram sont configurés, met à jour leurs
|
||||
// valeurs dépendantes du domaine (URL de webhook, GATEWAY_URL) puis force
|
||||
// un redémarrage des pods concernés — un Secret modifié seul ne déclenche
|
||||
// pas de rollout automatique côté Kubernetes.
|
||||
//
|
||||
// newURL : URL complète ("https://hôte[:port]") telle que calculée par
|
||||
// Service.SetDomain. Best-effort sur backend/lbtelegram : une démo encore
|
||||
// en cours de provisioning (releases pas encore installées) n'a que son
|
||||
// IngressRoute mis à jour, sans erreur bloquante.
|
||||
func (h *HelmProvisioner) UpdateDomain(d Demo, newURL string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
||||
defer cancel()
|
||||
|
||||
host := strings.TrimPrefix(strings.TrimPrefix(newURL, "https://"), "http://")
|
||||
if i := strings.IndexByte(host, '/'); i >= 0 {
|
||||
host = host[:i]
|
||||
}
|
||||
if i := strings.IndexByte(host, ':'); i >= 0 {
|
||||
host = host[:i] // Host() de Traefik ne matche pas le port
|
||||
}
|
||||
|
||||
ingressValues := map[string]interface{}{
|
||||
"host": host,
|
||||
"traefikNamespace": sharedTraefikNamespace,
|
||||
}
|
||||
if err := h.upgradeInstallChart(d.Namespace, d.Namespace+"-ingressroute", "ingressroute", ingressValues); err != nil {
|
||||
return fmt.Errorf("mise à jour ingressroute: %w", err)
|
||||
}
|
||||
|
||||
if backendValues, err := h.getReleaseValues(d.Namespace, d.Namespace+"-backend"); err == nil {
|
||||
secrets := asStringMap(backendValues["secrets"])
|
||||
if secrets["TELEGRAM_BOT_TOKEN"] != "" {
|
||||
secrets["TELEGRAM_WEBHOOK_URL"] = newURL + "/webhook/telegram"
|
||||
backendValues["secrets"] = secrets
|
||||
if err := h.upgradeInstallChart(d.Namespace, d.Namespace+"-backend", "backend", backendValues); err != nil {
|
||||
log.Printf("Warning: mise à jour webhook Telegram (backend) échouée pour %s: %v", d.Namespace, err)
|
||||
} else if err := h.restartDeployment(ctx, d.Namespace, d.Namespace+"-backend-gestion-backend"); err != nil {
|
||||
log.Printf("Warning: redémarrage backend échoué pour %s: %v", d.Namespace, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if lbValues, ok := h.getReleaseValuesOptional(d.Namespace, d.Namespace+"-lbtelegram"); ok {
|
||||
env := asStringMap(lbValues["env"])
|
||||
env["GATEWAY_URL"] = "https://" + host
|
||||
lbValues["env"] = env
|
||||
lbValues["host"] = host
|
||||
if err := h.upgradeInstallChart(d.Namespace, d.Namespace+"-lbtelegram", "lbtelegram", lbValues); err != nil {
|
||||
log.Printf("Warning: mise à jour host lbtelegram échouée pour %s: %v", d.Namespace, err)
|
||||
} else if err := h.restartDeployment(ctx, d.Namespace, d.Namespace+"-lbtelegram-lbtelegram"); err != nil {
|
||||
log.Printf("Warning: redémarrage lbtelegram échoué pour %s: %v", d.Namespace, err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("Domaine de %s mis à jour: %s", d.Namespace, host)
|
||||
return nil
|
||||
}
|
||||
|
||||
// restartDeployment force un nouveau rollout (annotation datée sur le pod
|
||||
// template) pour qu'un Deployment reprenne en compte un Secret modifié sans
|
||||
// changer d'image ni de spec structurel — Kubernetes ne redémarre pas les
|
||||
// pods automatiquement dans ce cas.
|
||||
func (h *HelmProvisioner) restartDeployment(ctx context.Context, namespace, name string) error {
|
||||
patch := []byte(fmt.Sprintf(
|
||||
`{"spec":{"template":{"metadata":{"annotations":{"omnex.app/restartedAt":%q}}}}}`,
|
||||
time.Now().UTC().Format(time.RFC3339),
|
||||
))
|
||||
_, err := h.k8sClient.AppsV1().Deployments(namespace).Patch(ctx, name, types.StrategicMergePatchType, patch, metav1.PatchOptions{})
|
||||
return err
|
||||
}
|
||||
|
||||
// migratePostgresData copie les données postgres d'un namespace à l'autre
|
||||
// (pg_dump / psql restore), utilisé par MigrateToPremiumNamespace.
|
||||
func (h *HelmProvisioner) migratePostgresData(ctx context.Context, oldNamespace, newNamespace string) error {
|
||||
|
||||
Reference in New Issue
Block a user