From 3536da5d3df51184d03e5fa7ddacb6dc1cab8a28 Mon Sep 17 00:00:00 2001 From: zhangsiwei Date: Sat, 23 Sep 2023 10:31:21 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20Keep=20the=20backend=20secret=20when=20c?= =?UTF-8?q?lean=20up=20SubResources=20if=20the=20deleteResou=E2=80=A6=20(#?= =?UTF-8?q?381)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: zhangsiwei --- controllers/configuration_controller.go | 2 +- controllers/configuration_controller_test.go | 24 +++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/controllers/configuration_controller.go b/controllers/configuration_controller.go index 410db13d..f38f4175 100644 --- a/controllers/configuration_controller.go +++ b/controllers/configuration_controller.go @@ -295,7 +295,7 @@ func (r *ConfigurationReconciler) cleanUpSubResources(ctx context.Context, confi } // 6. delete Kubernetes backend secret - if meta.Backend != nil { + if meta.Backend != nil && meta.DeleteResource { if err := meta.Backend.CleanUp(ctx); err != nil { return err } diff --git a/controllers/configuration_controller_test.go b/controllers/configuration_controller_test.go index a908942d..4e4fcf28 100644 --- a/controllers/configuration_controller_test.go +++ b/controllers/configuration_controller_test.go @@ -1177,6 +1177,14 @@ func TestTerraformDestroy(t *testing.T) { }, Type: corev1.SecretTypeOpaque, } + backendSecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("tfstate-default-%s", secretSuffix), + Namespace: "default", + }, + Type: corev1.SecretTypeOpaque, + } + ConfigurationCMInLegacyNS := baseConfigurationCM.DeepCopy() ConfigurationCMInLegacyNS.Namespace = legacyNamespace variableSecretInLegacyNS := baseVariableSecret.DeepCopy() @@ -1203,6 +1211,9 @@ func TestTerraformDestroy(t *testing.T) { VariableSecretName: fmt.Sprintf(process.TFVariableSecret, secretSuffix), } + metaWithDeleteResourceIsFalse := baseMeta + metaWithDeleteResourceIsFalse.DeleteResource = false + baseConfiguration := &v1beta2.Configuration{ ObjectMeta: metav1.ObjectMeta{ Name: "base-conf", @@ -1271,7 +1282,7 @@ func TestTerraformDestroy(t *testing.T) { deletedResources: []client.Object{baseConfigurationCM, baseVariableSecret}, }, { - name: "destroy job has completes, cleanup resources", + name: "destroy job has been completed, and cleanup resources", args: args{ configuration: configurationWithConnSecret, meta: &baseMeta, @@ -1280,6 +1291,17 @@ func TestTerraformDestroy(t *testing.T) { objects: []client.Object{readyProvider, configurationWithConnSecret, baseConfigurationCM, completeDestroyJob, baseVariableSecret, connectionSecret}, deletedResources: []client.Object{baseConfigurationCM, completeDestroyJob, baseVariableSecret, connectionSecret}, }, + { + name: "destroy job has been completed, and cleanup resources except for the backend secret", + args: args{ + configuration: configurationWithConnSecret, + meta: &metaWithDeleteResourceIsFalse, + }, + want: want{}, + objects: []client.Object{readyProvider, configurationWithConnSecret, baseConfigurationCM, completeDestroyJob, baseVariableSecret, connectionSecret, backendSecret}, + deletedResources: []client.Object{baseConfigurationCM, completeDestroyJob, baseVariableSecret, connectionSecret}, + keptResources: []client.Object{backendSecret}, + }, { name: "force delete configuration", args: args{