diff --git a/caas/kubernetes/provider/resources/clusterrolebinding.go b/caas/kubernetes/provider/resources/clusterrolebinding.go index 4775c86089f..fff7acb9c31 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,7 @@ 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), }) 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