delete logic (webhook)

This commit is contained in:
kkb0318
2024-05-12 13:30:32 +09:00
parent 9cac8fcd0b
commit 3dc83e9694
3 changed files with 111 additions and 16 deletions
@@ -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
@@ -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)
}
},
},
+38 -6
View File
@@ -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 &regv1.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{}
}