From 774cc9a04874d752d29f271228f3d78abd79e908 Mon Sep 17 00:00:00 2001 From: Kelvin Liu Date: Thu, 15 Jul 2021 09:13:24 +1000 Subject: [PATCH 1/2] Fix Preconditions for cluster role binding deletion; --- caas/kubernetes/provider/resources/clusterrolebinding.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/caas/kubernetes/provider/resources/clusterrolebinding.go b/caas/kubernetes/provider/resources/clusterrolebinding.go index 4775c86089f..614a74517a2 100644 --- a/caas/kubernetes/provider/resources/clusterrolebinding.go +++ b/caas/kubernetes/provider/resources/clusterrolebinding.go @@ -19,6 +19,7 @@ import ( "k8s.io/utils/pointer" k8sconstants "github.com/juju/juju/caas/kubernetes/provider/constants" + "github.com/juju/juju/caas/kubernetes/provider/utils" "github.com/juju/juju/core/status" ) @@ -88,7 +89,8 @@ func (rb *ClusterRoleBinding) Delete(ctx context.Context, client kubernetes.Inte err := api.Delete(ctx, rb.Name, metav1.DeleteOptions{ PropagationPolicy: k8sconstants.DeletePropagationBackground(), GracePeriodSeconds: pointer.Int64Ptr(0), - Preconditions: &metav1.Preconditions{UID: &rb.UID}, + Preconditions: utils.NewUIDPreconditions(rb.UID), + // Preconditions: &metav1.Preconditions{UID: &rb.UID}, }) if k8serrors.IsNotFound(err) { return nil From 40dca1afb2256d6fd5dfbb2c113f9b927e404028 Mon Sep 17 00:00:00 2001 From: Kelvin Liu Date: Thu, 15 Jul 2021 09:17:57 +1000 Subject: [PATCH 2/2] Add test for Preconditions fix; --- .../provider/resources/clusterrolebinding.go | 1 - .../resources/clusterrolebinding_test.go | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/caas/kubernetes/provider/resources/clusterrolebinding.go b/caas/kubernetes/provider/resources/clusterrolebinding.go index 614a74517a2..fff7acb9c31 100644 --- a/caas/kubernetes/provider/resources/clusterrolebinding.go +++ b/caas/kubernetes/provider/resources/clusterrolebinding.go @@ -90,7 +90,6 @@ func (rb *ClusterRoleBinding) Delete(ctx context.Context, client kubernetes.Inte PropagationPolicy: k8sconstants.DeletePropagationBackground(), GracePeriodSeconds: pointer.Int64Ptr(0), Preconditions: utils.NewUIDPreconditions(rb.UID), - // Preconditions: &metav1.Preconditions{UID: &rb.UID}, }) if k8serrors.IsNotFound(err) { return nil diff --git a/caas/kubernetes/provider/resources/clusterrolebinding_test.go b/caas/kubernetes/provider/resources/clusterrolebinding_test.go index 5c0149bc4ff..b3ed1d76e86 100644 --- a/caas/kubernetes/provider/resources/clusterrolebinding_test.go +++ b/caas/kubernetes/provider/resources/clusterrolebinding_test.go @@ -90,6 +90,30 @@ func (s *clusterRoleBindingSuite) TestDelete(c *gc.C) { c.Assert(err, jc.Satisfies, k8serrors.IsNotFound) } +func (s *clusterRoleBindingSuite) TestDeleteWithoutPreconditions(c *gc.C) { + roleBinding := rbacv1.ClusterRoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: "roleBinding1", + }, + } + _, err := s.client.RbacV1().ClusterRoleBindings().Create(context.TODO(), &roleBinding, metav1.CreateOptions{}) + c.Assert(err, jc.ErrorIsNil) + + result, err := s.client.RbacV1().ClusterRoleBindings().Get(context.TODO(), "roleBinding1", metav1.GetOptions{}) + c.Assert(err, jc.ErrorIsNil) + c.Assert(result.GetName(), gc.Equals, `roleBinding1`) + + rbResource := resources.NewClusterRoleBinding("roleBinding1", nil) + err = rbResource.Delete(context.TODO(), s.client) + c.Assert(err, jc.ErrorIsNil) + + err = rbResource.Get(context.TODO(), s.client) + c.Assert(err, jc.Satisfies, errors.IsNotFound) + + _, err = s.client.RbacV1().ClusterRoleBindings().Get(context.TODO(), "roleBinding1", metav1.GetOptions{}) + c.Assert(err, jc.Satisfies, k8serrors.IsNotFound) +} + // This test ensures that there has not been a regression with ensure cluster // role where it can not update roles that have a labels change. // https://bugs.launchpad.net/juju/+bug/1929909