From 5415da9c4cc0aea7b7a7f1b85c8332b5dae64352 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 27 Apr 2022 09:32:40 +0300 Subject: [PATCH] fix: Allow to sync deployments when selector changed (#1361) Signed-off-by: Anatolii Bazko --- pkg/deploy/deployment.go | 11 +++++++++-- pkg/deploy/gateway/gateway.go | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pkg/deploy/deployment.go b/pkg/deploy/deployment.go index 7b5066d84..8340d9ae8 100644 --- a/pkg/deploy/deployment.go +++ b/pkg/deploy/deployment.go @@ -59,9 +59,16 @@ func SyncDeploymentSpecToCluster( done, err := Sync(deployContext, deploymentSpec, deploymentDiffOpts) if err != nil || !done { + // Failed to sync (update), let's delete and create instead + if err != nil && strings.Contains(err.Error(), "field is immutable") { + if _, err := DeleteNamespacedObject(deployContext, deploymentSpec.Name, &appsv1.Deployment{}); err != nil { + return false, err + } + + // Deleted successfully, return original error + return false, err + } return false, err - } else if !done { - return util.IsTestMode(), nil } // always return true for tests diff --git a/pkg/deploy/gateway/gateway.go b/pkg/deploy/gateway/gateway.go index e9d8999d0..cd5de7c3b 100644 --- a/pkg/deploy/gateway/gateway.go +++ b/pkg/deploy/gateway/gateway.go @@ -16,6 +16,7 @@ import ( "encoding/base64" "fmt" "io/ioutil" + "strings" "k8s.io/apimachinery/pkg/api/resource" @@ -138,6 +139,15 @@ func syncAll(deployContext *deploy.DeployContext) error { depl := getGatewayDeploymentSpec(deployContext) if _, err := deploy.Sync(deployContext, &depl, deploy.DefaultDeploymentDiffOpts); err != nil { + // Failed to sync (update), let's delete and create instead + if strings.Contains(err.Error(), "field is immutable") { + if _, err := deploy.DeleteNamespacedObject(deployContext, depl.Name, &appsv1.Deployment{}); err != nil { + return err + } + + // Deleted successfully, return original error + return err + } return err }