diff --git a/pkg/controller/kubebuilderx/controller.go b/pkg/controller/kubebuilderx/controller.go index 383157fef31..7130a7582fa 100644 --- a/pkg/controller/kubebuilderx/controller.go +++ b/pkg/controller/kubebuilderx/controller.go @@ -164,7 +164,7 @@ func (c *controller) emitFailureEvent() { return } // TODO(free6om): make error message user-friendly - c.tree.EventRecorder.Eventf(c.tree.GetRoot(), corev1.EventTypeWarning, "FailedReconcile", "reconcile failed: %s", c.err.Error()) + c.tree.EventRecorder.Eventf(c.tree.GetRoot(), corev1.EventTypeWarning, "FailedReconcile", "%s", c.err.Error()) } func NewController(ctx context.Context, cli client.Client, req ctrl.Request, recorder record.EventRecorder, logger logr.Logger) Controller { diff --git a/pkg/controller/kubebuilderx/plan_builder.go b/pkg/controller/kubebuilderx/plan_builder.go index de6ba47799e..7c36b2aa7b2 100644 --- a/pkg/controller/kubebuilderx/plan_builder.go +++ b/pkg/controller/kubebuilderx/plan_builder.go @@ -30,9 +30,9 @@ import ( corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/equality" - apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" + "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -264,8 +264,8 @@ func (b *PlanBuilder) defaultWalkFunc(v graph.Vertex) error { func (b *PlanBuilder) createObject(ctx context.Context, vertex *model.ObjectVertex) error { err := b.cli.Create(ctx, vertex.Obj, clientOption(vertex)) - if err != nil && !apierrors.IsAlreadyExists(err) { - return err + if err != nil { + return fmt.Errorf("create %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } b.emitEvent(vertex.Obj, "SuccessfulCreate", model.CREATE) return nil @@ -281,8 +281,8 @@ func (b *PlanBuilder) updateObject(ctx context.Context, vertex *model.ObjectVert err = b.cli.Update(ctx, vertex.Obj, clientOption(vertex)) reason = "SuccessfulUpdate" } - if err != nil && !apierrors.IsNotFound(err) { - return err + if err != nil { + return fmt.Errorf("update %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } b.emitEvent(vertex.Obj, reason, model.UPDATE) return nil @@ -299,8 +299,8 @@ func (b *PlanBuilder) patchObject(ctx context.Context, vertex *model.ObjectVerte err = b.cli.Patch(ctx, vertex.Obj, patch, clientOption(vertex)) reason = "SuccessfulPatch" } - if err != nil && !apierrors.IsNotFound(err) { - return err + if err != nil { + return fmt.Errorf("patch %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } b.emitEvent(vertex.Obj, reason, model.PATCH) return nil @@ -313,15 +313,14 @@ func (b *PlanBuilder) deleteObject(ctx context.Context, vertex *model.ObjectVert } if len(finalizer) > 0 && controllerutil.RemoveFinalizer(vertex.Obj, finalizer) { err := b.cli.Update(ctx, vertex.Obj, clientOption(vertex)) - if err != nil && !apierrors.IsNotFound(err) { - b.transCtx.logger.Error(err, fmt.Sprintf("delete %T error: %s", vertex.Obj, vertex.Obj.GetName())) - return err + if err != nil { + return fmt.Errorf("delete %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } } if !model.IsObjectDeleting(vertex.Obj) { err := b.cli.Delete(ctx, vertex.Obj, clientOption(vertex)) - if err != nil && !apierrors.IsNotFound(err) { - return err + if err != nil { + return fmt.Errorf("delete %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } b.emitEvent(vertex.Obj, "SuccessfulDelete", model.DELETE) } @@ -330,7 +329,7 @@ func (b *PlanBuilder) deleteObject(ctx context.Context, vertex *model.ObjectVert func (b *PlanBuilder) statusObject(ctx context.Context, vertex *model.ObjectVertex) error { if err := b.cli.Status().Update(ctx, vertex.Obj, clientOption(vertex)); err != nil { - return err + return fmt.Errorf("status %T %s failed: %w", vertex.Obj, klog.KObj(vertex.Obj), err) } return nil }