From 3dc83e969469660a655ad881051959526f2837a7 Mon Sep 17 00:00:00 2001 From: kkb0318 Date: Sun, 12 May 2024 13:30:32 +0900 Subject: [PATCH] delete logic (webhook) --- internal/controller/irsasetup_controller.go | 7 ++ .../controller/irsasetup_controller_test.go | 76 ++++++++++++++++--- internal/controller/suite_test.go | 44 +++++++++-- 3 files changed, 111 insertions(+), 16 deletions(-) diff --git a/internal/controller/irsasetup_controller.go b/internal/controller/irsasetup_controller.go index 7cd8b6a..efe2fd2 100644 --- a/internal/controller/irsasetup_controller.go +++ b/internal/controller/irsasetup_controller.go @@ -132,6 +132,13 @@ func (r *IRSASetupReconciler) reconcileDelete(ctx context.Context, obj *irsav1al } kubeHandler := handler.NewKubernetesHandler(kubeClient) kubeHandler.Append(secret) + webhookSetup, err := webhook.NewWebHookSetup() + if err != nil { + return err + } + for _, r := range webhookSetup.Resources() { + kubeHandler.Append(r) + } err = kubeHandler.DeleteAll(ctx) if err != nil { return err diff --git a/internal/controller/irsasetup_controller_test.go b/internal/controller/irsasetup_controller_test.go index 379e628..ff809e3 100644 --- a/internal/controller/irsasetup_controller_test.go +++ b/internal/controller/irsasetup_controller_test.go @@ -62,8 +62,36 @@ var _ = Describe("IRSASetup Controller", func() { }, }, f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) { - expected := []types.NamespacedName{ - {Name: "irsa-manager-key", Namespace: "kube-system"}, + expected := []expectedResource{ + { + NamespacedName: types.NamespacedName{Name: "irsa-manager-key", Namespace: "kube-system"}, + f: newSecret, + }, + // webhook + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newDeployment, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newService, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newMutatingWebhookConfiguration, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newServiceAccount, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newClusterRole, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newClusterRoleBinding, + }, } By("Reconciling the created resource") @@ -81,7 +109,7 @@ var _ = Describe("IRSASetup Controller", func() { }) Expect(err).NotTo(HaveOccurred()) for _, expect := range expected { - checkExist(expect, newSecret) + checkExist(expect) } By("removing the custom resource for the Kind") Eventually(func() error { @@ -92,12 +120,12 @@ var _ = Describe("IRSASetup Controller", func() { }) Expect(err).To(Not(HaveOccurred())) for _, expect := range expected { - checkNoExist(expect, newSecret) + checkNoExist(expect) } }, }, { - name: "case2", + name: "error case", obj: &irsav1alpha1.IRSASetup{ ObjectMeta: metav1.ObjectMeta{ Name: "test-resource2", @@ -114,8 +142,36 @@ var _ = Describe("IRSASetup Controller", func() { }, }, f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) { - expected := []types.NamespacedName{ - {Name: "irsa-manager-key", Namespace: "kube-system"}, + expected := []expectedResource{ + { + NamespacedName: types.NamespacedName{Name: "irsa-manager-key", Namespace: "kube-system"}, + f: newSecret, + }, + // webhook + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newDeployment, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newService, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newMutatingWebhookConfiguration, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newServiceAccount, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newClusterRole, + }, + { + NamespacedName: types.NamespacedName{Name: "pod-identity-webhook", Namespace: "kube-system"}, + f: newClusterRoleBinding, + }, } typeNamespacedName := types.NamespacedName{ Name: obj.Name, @@ -128,7 +184,7 @@ var _ = Describe("IRSASetup Controller", func() { }) Expect(err).To(HaveOccurred()) for _, expect := range expected { - checkNoExist(expect, newSecret) + checkNoExist(expect) } By("successfully Reconciling") r.AwsClient = newMockAwsClient(&mockAwsIamAPI{}, &mockAwsS3API{}, &mockAwsStsAPI{}) @@ -137,7 +193,7 @@ var _ = Describe("IRSASetup Controller", func() { }) Expect(err).NotTo(HaveOccurred()) for _, expect := range expected { - checkExist(expect, newSecret) + checkExist(expect) } By("removing the custom resource for the Kind") Eventually(func() error { @@ -148,7 +204,7 @@ var _ = Describe("IRSASetup Controller", func() { }) Expect(err).To(Not(HaveOccurred())) for _, expect := range expected { - checkNoExist(expect, newSecret) + checkNoExist(expect) } }, }, diff --git a/internal/controller/suite_test.go b/internal/controller/suite_test.go index 966c15b..5e8f27b 100644 --- a/internal/controller/suite_test.go +++ b/internal/controller/suite_test.go @@ -26,7 +26,10 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + regv1 "k8s.io/api/admissionregistration/v1" + appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" @@ -96,20 +99,49 @@ var _ = AfterSuite(func() { Expect(err).NotTo(HaveOccurred()) }) -func checkExist(expected types.NamespacedName, newFunc func() client.Object) { +type expectedResource struct { + types.NamespacedName + f func() client.Object +} + +func checkExist(resource expectedResource) { Eventually(func() error { - found := newFunc() - return k8sClient.Get(ctx, expected, found) + found := resource.f() + return k8sClient.Get(ctx, resource.NamespacedName, found) }, timeout).Should(Succeed()) } -func checkNoExist(expected types.NamespacedName, newFunc func() client.Object) { +func checkNoExist(resource expectedResource) { Eventually(func() error { - found := newFunc() - return k8sClient.Get(ctx, expected, found) + found := resource.f() + return k8sClient.Get(ctx, resource.NamespacedName, found) }, timeout).Should(Not(Succeed())) } func newSecret() client.Object { return &corev1.Secret{} } + +func newMutatingWebhookConfiguration() client.Object { + return ®v1.MutatingWebhookConfiguration{} +} + +func newService() client.Object { + return &corev1.Service{} +} + +func newDeployment() client.Object { + return &appsv1.Deployment{} +} + +func newServiceAccount() client.Object { + return &corev1.ServiceAccount{} +} + +func newClusterRole() client.Object { + return &rbacv1.ClusterRole{} +} + +func newClusterRoleBinding() client.Object { + return &rbacv1.ClusterRoleBinding{} +}