fix: operator v0.1.49 — Resources update + self-healing requeue

БАГ 1: ensureServiceDeployment UPDATE блок теперь обновляет Containers[0].Resources
  → memory_mb через PUT применяется к k8s Deployment

БАГ 2: ensureServiceDeployment возвращает RequeueAfter: 60s вместо Result{}
  → ручное удаление Deployment пересоздаётся контроллером в течение 60s

lifecycle-тест: 47/47 PASS (ранее 44/44 с 2 known bugs)
This commit is contained in:
Naeel
2026-03-21 18:51:02 +03:00
parent 9b74358979
commit f65677a4d0
4 changed files with 45 additions and 14 deletions
+6 -4
View File
@@ -210,6 +210,8 @@ func (r *ServiceReconciler) ensureServiceDeployment(ctx context.Context, svc *sl
} else {
existing.Spec.Template.Spec.Containers[0].Image = svc.Status.ImageRef
existing.Spec.Template.Spec.Containers[0].Env = desired.Spec.Template.Spec.Containers[0].Env
// Обновляем ресурсы — иначе memory_mb из PUT не применяется к Deployment
existing.Spec.Template.Spec.Containers[0].Resources = desired.Spec.Template.Spec.Containers[0].Resources
existing.Spec.Template.Spec.ImagePullSecrets = desired.Spec.Template.Spec.ImagePullSecrets
if err := r.Update(ctx, existing); err != nil {
return ctrl.Result{}, fmt.Errorf("update service deployment: %w", err)
@@ -297,15 +299,15 @@ func (r *ServiceReconciler) ensureServiceDeployment(ctx context.Context, svc *sl
}
}
return ctrl.Result{}, nil
// Периодический requeue — self-healing: если Deployment/Service/Ingress удалены вручную, контроллер их пересоздаст
return ctrl.Result{RequeueAfter: 60 * time.Second}, nil
}
// buildServiceDeployment формирует Deployment манифест.
func (r *ServiceReconciler) buildServiceDeployment(svc *slessv1alpha1.Service, namespace string) *appsv1.Deployment {
replicas := int32(1)
envVars := []corev1.EnvVar{
{Name: "SLESS_ENTRYPOINT", Value: svc.Spec.Entrypoint},
}
var envVars []corev1.EnvVar
// Сортируем ключи для стабильного порядка — нестабильный порядок env vars вызывает лишние rollout'ы
keys := make([]string, 0, len(svc.Spec.Env))
for k := range svc.Spec.Env {