mirror of
https://github.com/storytold/irsa-manager.git
synced 2026-10-09 00:09:43 +00:00
delete logic (webhook)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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{}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user