fix(console): v1.3.92 — EnsureEnvironment обновляет образ если устарел
Вместо костыля (kubectl patch вручную) — системный фикс: EnsureEnvironment теперь проверяет spec.runtime.image у существующего env и обновляет его если отличается от LangEnvMap[lang].Image. Это автоматически мигрирует все namespace-ы при следующем создании функции.
This commit is contained in:
@@ -28,9 +28,20 @@ func EnsureEnvironment(ctx context.Context, dyn dynamic.Interface, ns, lang stri
|
||||
envName := "console-" + lang + "-env"
|
||||
|
||||
// Проверяем существование — Get быстрее чем Create+IsAlreadyExists
|
||||
_, getErr := dyn.Resource(EnvironmentGVR).Namespace(ns).Get(ctx, envName, metav1.GetOptions{})
|
||||
existing, getErr := dyn.Resource(EnvironmentGVR).Namespace(ns).Get(ctx, envName, metav1.GetOptions{})
|
||||
if getErr == nil {
|
||||
return envName, nil // уже существует — быстрый путь
|
||||
// Уже существует — проверяем образ. Если устарел — обновляем.
|
||||
currentImage, _, _ := unstructured.NestedString(existing.Object, "spec", "runtime", "image")
|
||||
if currentImage != langDef.Image {
|
||||
if patchErr := unstructured.SetNestedField(existing.Object, langDef.Image, "spec", "runtime", "image"); patchErr == nil {
|
||||
if _, updateErr := dyn.Resource(EnvironmentGVR).Namespace(ns).Update(ctx, existing, metav1.UpdateOptions{}); updateErr != nil {
|
||||
log.Printf("ensureEnvironment: update image %s/%s: %v", ns, envName, updateErr)
|
||||
} else {
|
||||
log.Printf("ensureEnvironment: updated image %s/%s: %s → %s", ns, envName, currentImage, langDef.Image)
|
||||
}
|
||||
}
|
||||
}
|
||||
return envName, nil
|
||||
}
|
||||
if !apierrors.IsNotFound(getErr) {
|
||||
return "", fmt.Errorf("check environment %q: %w", envName, getErr)
|
||||
|
||||
Reference in New Issue
Block a user