From ac520cdfa21a702a7fb8215c4df6f6bb306236af Mon Sep 17 00:00:00 2001 From: Jonathan Innis Date: Tue, 13 Feb 2024 14:10:49 -0800 Subject: [PATCH] chore: Improve error message for deleting EC2NodeClass (#5656) --- pkg/cloudprovider/cloudprovider.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index d1c5de336d87..006e0ea71741 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -215,7 +215,9 @@ func (c *CloudProvider) resolveNodeClassFromNodeClaim(ctx context.Context, nodeC } // For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound if !nodeClass.DeletionTimestamp.IsZero() { - return nil, errors.NewNotFound(v1beta1.SchemeGroupVersion.WithResource("ec2nodeclasses").GroupResource(), nodeClass.Name) + // For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound, + // but we return a different error message to be clearer to users + return nil, newTerminatingNodeClassError(nodeClass.Name) } return nodeClass, nil } @@ -225,9 +227,10 @@ func (c *CloudProvider) resolveNodeClassFromNodePool(ctx context.Context, nodePo if err := c.kubeClient.Get(ctx, types.NamespacedName{Name: nodePool.Spec.Template.Spec.NodeClassRef.Name}, nodeClass); err != nil { return nil, err } - // For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound if !nodeClass.DeletionTimestamp.IsZero() { - return nil, errors.NewNotFound(v1beta1.SchemeGroupVersion.WithResource("ec2nodeclasses").GroupResource(), nodeClass.Name) + // For the purposes of NodeClass CloudProvider resolution, we treat deleting NodeClasses as NotFound, + // but we return a different error message to be clearer to users + return nil, newTerminatingNodeClassError(nodeClass.Name) } return nodeClass, nil } @@ -270,7 +273,7 @@ func (c *CloudProvider) resolveNodePoolFromInstance(ctx context.Context, instanc } return nodePool, nil } - return nil, errors.NewNotFound(schema.GroupResource{Group: corev1beta1.Group, Resource: "NodePool"}, "") + return nil, errors.NewNotFound(schema.GroupResource{Group: corev1beta1.Group, Resource: "nodepools"}, "") } func (c *CloudProvider) instanceToNodeClaim(i *instance.Instance, instanceType *cloudprovider.InstanceType) *corev1beta1.NodeClaim { @@ -317,3 +320,11 @@ func (c *CloudProvider) instanceToNodeClaim(i *instance.Instance, instanceType * nodeClaim.Status.ImageID = i.ImageID return nodeClaim } + +// newTerminatingNodeClassError returns a NotFound error for handling by +func newTerminatingNodeClassError(name string) *errors.StatusError { + qualifiedResource := schema.GroupResource{Group: corev1beta1.Group, Resource: "ec2nodeclasses"} + err := errors.NewNotFound(qualifiedResource, name) + err.ErrStatus.Message = fmt.Sprintf("%s %q is terminating, treating as not found", qualifiedResource.String(), name) + return err +}