fix(console): v1.3.92 — EnsureEnvironment обновляет образ если устарел
Вместо костыля (kubectl patch вручную) — системный фикс: EnsureEnvironment теперь проверяет spec.runtime.image у существующего env и обновляет его если отличается от LangEnvMap[lang].Image. Это автоматически мигрирует все namespace-ы при следующем создании функции.
This commit is contained in:
@@ -58,7 +58,7 @@ spec:
|
|||||||
serviceAccountName: fission-console
|
serviceAccountName: fission-console
|
||||||
containers:
|
containers:
|
||||||
- name: console
|
- name: console
|
||||||
image: naeel/fission-console:v1.3.91
|
image: naeel/fission-console:v1.3.92
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8090
|
- containerPort: 8090
|
||||||
|
|||||||
@@ -28,9 +28,20 @@ func EnsureEnvironment(ctx context.Context, dyn dynamic.Interface, ns, lang stri
|
|||||||
envName := "console-" + lang + "-env"
|
envName := "console-" + lang + "-env"
|
||||||
|
|
||||||
// Проверяем существование — Get быстрее чем Create+IsAlreadyExists
|
// Проверяем существование — 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 {
|
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) {
|
if !apierrors.IsNotFound(getErr) {
|
||||||
return "", fmt.Errorf("check environment %q: %w", envName, getErr)
|
return "", fmt.Errorf("check environment %q: %w", envName, getErr)
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
<div class="nubes">NUBES</div>
|
<div class="nubes">NUBES</div>
|
||||||
<div class="product">FISSION CONSOLE</div>
|
<div class="product">FISSION CONSOLE</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size:0.65rem; color:var(--text-secondary); margin-left:10px; align-self:center; opacity:0.7;">v1.3.91</div>
|
<div style="font-size:0.65rem; color:var(--text-secondary); margin-left:10px; align-self:center; opacity:0.7;">v1.3.92</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" style="margin:0;">
|
<div class="row" style="margin:0;">
|
||||||
<button class="btn ghost" onclick="reloadAll()">Refresh</button>
|
<button class="btn ghost" onclick="reloadAll()">Refresh</button>
|
||||||
@@ -626,7 +626,7 @@ psycopg2-binary" style="width:100%; box-sizing:border-box; font-family:monospace
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="actions" style="justify-content:space-between; align-items:center;">
|
<div class="actions" style="justify-content:space-between; align-items:center;">
|
||||||
<span style="font-size:0.75rem; color:var(--text-secondary);">v1.3.91</span>
|
<span style="font-size:0.75rem; color:var(--text-secondary);">v1.3.92</span>
|
||||||
<button class="btn ghost" onclick="closeHelp()">Закрыть</button>
|
<button class="btn ghost" onclick="closeHelp()">Закрыть</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user