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 := handler.NewKubernetesHandler(kubeClient)
|
||||||
kubeHandler.Append(secret)
|
kubeHandler.Append(secret)
|
||||||
|
webhookSetup, err := webhook.NewWebHookSetup()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, r := range webhookSetup.Resources() {
|
||||||
|
kubeHandler.Append(r)
|
||||||
|
}
|
||||||
err = kubeHandler.DeleteAll(ctx)
|
err = kubeHandler.DeleteAll(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -62,8 +62,36 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) {
|
f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) {
|
||||||
expected := []types.NamespacedName{
|
expected := []expectedResource{
|
||||||
{Name: "irsa-manager-key", Namespace: "kube-system"},
|
{
|
||||||
|
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")
|
By("Reconciling the created resource")
|
||||||
@@ -81,7 +109,7 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
for _, expect := range expected {
|
for _, expect := range expected {
|
||||||
checkExist(expect, newSecret)
|
checkExist(expect)
|
||||||
}
|
}
|
||||||
By("removing the custom resource for the Kind")
|
By("removing the custom resource for the Kind")
|
||||||
Eventually(func() error {
|
Eventually(func() error {
|
||||||
@@ -92,12 +120,12 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).To(Not(HaveOccurred()))
|
Expect(err).To(Not(HaveOccurred()))
|
||||||
for _, expect := range expected {
|
for _, expect := range expected {
|
||||||
checkNoExist(expect, newSecret)
|
checkNoExist(expect)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "case2",
|
name: "error case",
|
||||||
obj: &irsav1alpha1.IRSASetup{
|
obj: &irsav1alpha1.IRSASetup{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "test-resource2",
|
Name: "test-resource2",
|
||||||
@@ -114,8 +142,36 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) {
|
f: func(r *IRSASetupReconciler, obj *irsav1alpha1.IRSASetup) {
|
||||||
expected := []types.NamespacedName{
|
expected := []expectedResource{
|
||||||
{Name: "irsa-manager-key", Namespace: "kube-system"},
|
{
|
||||||
|
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{
|
typeNamespacedName := types.NamespacedName{
|
||||||
Name: obj.Name,
|
Name: obj.Name,
|
||||||
@@ -128,7 +184,7 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).To(HaveOccurred())
|
Expect(err).To(HaveOccurred())
|
||||||
for _, expect := range expected {
|
for _, expect := range expected {
|
||||||
checkNoExist(expect, newSecret)
|
checkNoExist(expect)
|
||||||
}
|
}
|
||||||
By("successfully Reconciling")
|
By("successfully Reconciling")
|
||||||
r.AwsClient = newMockAwsClient(&mockAwsIamAPI{}, &mockAwsS3API{}, &mockAwsStsAPI{})
|
r.AwsClient = newMockAwsClient(&mockAwsIamAPI{}, &mockAwsS3API{}, &mockAwsStsAPI{})
|
||||||
@@ -137,7 +193,7 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
for _, expect := range expected {
|
for _, expect := range expected {
|
||||||
checkExist(expect, newSecret)
|
checkExist(expect)
|
||||||
}
|
}
|
||||||
By("removing the custom resource for the Kind")
|
By("removing the custom resource for the Kind")
|
||||||
Eventually(func() error {
|
Eventually(func() error {
|
||||||
@@ -148,7 +204,7 @@ var _ = Describe("IRSASetup Controller", func() {
|
|||||||
})
|
})
|
||||||
Expect(err).To(Not(HaveOccurred()))
|
Expect(err).To(Not(HaveOccurred()))
|
||||||
for _, expect := range expected {
|
for _, expect := range expected {
|
||||||
checkNoExist(expect, newSecret)
|
checkNoExist(expect)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -26,7 +26,10 @@ import (
|
|||||||
. "github.com/onsi/ginkgo/v2"
|
. "github.com/onsi/ginkgo/v2"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
|
regv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
@@ -96,20 +99,49 @@ var _ = AfterSuite(func() {
|
|||||||
Expect(err).NotTo(HaveOccurred())
|
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 {
|
Eventually(func() error {
|
||||||
found := newFunc()
|
found := resource.f()
|
||||||
return k8sClient.Get(ctx, expected, found)
|
return k8sClient.Get(ctx, resource.NamespacedName, found)
|
||||||
}, timeout).Should(Succeed())
|
}, timeout).Should(Succeed())
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkNoExist(expected types.NamespacedName, newFunc func() client.Object) {
|
func checkNoExist(resource expectedResource) {
|
||||||
Eventually(func() error {
|
Eventually(func() error {
|
||||||
found := newFunc()
|
found := resource.f()
|
||||||
return k8sClient.Get(ctx, expected, found)
|
return k8sClient.Get(ctx, resource.NamespacedName, found)
|
||||||
}, timeout).Should(Not(Succeed()))
|
}, timeout).Should(Not(Succeed()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSecret() client.Object {
|
func newSecret() client.Object {
|
||||||
return &corev1.Secret{}
|
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