From e6fde256bf3789a84585b88a7dcd7968bb69445f Mon Sep 17 00:00:00 2001 From: Matteo Gastaldello Date: Thu, 18 Dec 2025 14:44:13 +0100 Subject: [PATCH 1/2] feat: enhance error reporting and status updates in RBAC and helm chart operations --- internal/composition/composition.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/internal/composition/composition.go b/internal/composition/composition.go index d2de723..572f92f 100644 --- a/internal/composition/composition.go +++ b/internal/composition/composition.go @@ -8,10 +8,13 @@ import ( "path/filepath" "time" + "github.com/krateoplatformops/unstructured-runtime/pkg/tools/unstructured/condition" + xcontext "github.com/krateoplatformops/unstructured-runtime/pkg/context" "github.com/krateoplatformops/composition-dynamic-controller/internal/chartinspector" compositionMeta "github.com/krateoplatformops/composition-dynamic-controller/internal/meta" + unstructuredtools "github.com/krateoplatformops/unstructured-runtime/pkg/tools/unstructured" "github.com/krateoplatformops/composition-dynamic-controller/internal/helmclient" "github.com/krateoplatformops/composition-dynamic-controller/internal/helmclient/tracer" @@ -200,11 +203,23 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c CompositionDefintionGVR: pkg.CompositionDefinitionInfo.GVR, }) if err != nil { + reason := fmt.Sprintf("Generating RBAC failed: %v", err) + unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + _, err = tools.UpdateStatus(ctx, mg, updateOpts) + if err != nil { + return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) + } return controller.ExternalObservation{}, fmt.Errorf("generating RBAC using chart-inspector: %w", err) } rbInstaller := rbac.NewRBACInstaller(dyn) err = rbInstaller.ApplyRBAC(generated) if err != nil { + reason := fmt.Sprintf("Applying RBAC failed: %v", err) + unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + _, err = tools.UpdateStatus(ctx, mg, updateOpts) + if err != nil { + return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) + } return controller.ExternalObservation{}, fmt.Errorf("installing rbac: %w", err) } @@ -238,7 +253,13 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c upgradedRel, err := helmchart.Update(ctx, opts) if err != nil { - return controller.ExternalObservation{}, err + reason := fmt.Sprintf("Updating helm chart failed: %v", err) + unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + _, err = tools.UpdateStatus(ctx, mg, updateOpts) + if err != nil { + return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) + } + return controller.ExternalObservation{}, fmt.Errorf("updating helm chart: %w", err) } _, digest, err := helmchart.GetResourcesRefFromRelease(upgradedRel, mg.GetNamespace(), clientset) From b35e87825229f759aa8bcee06522ecba1defb319 Mon Sep 17 00:00:00 2001 From: Matteo Gastaldello Date: Fri, 19 Dec 2025 09:03:37 +0100 Subject: [PATCH 2/2] feat: improve error reporting in RBAC and helm chart operations --- internal/composition/composition.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/internal/composition/composition.go b/internal/composition/composition.go index 572f92f..cb9123f 100644 --- a/internal/composition/composition.go +++ b/internal/composition/composition.go @@ -203,8 +203,10 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c CompositionDefintionGVR: pkg.CompositionDefinitionInfo.GVR, }) if err != nil { - reason := fmt.Sprintf("Generating RBAC failed: %v", err) - unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + retErr := fmt.Errorf("generating RBAC using chart-inspector: %w", err) + condition := condition.Unavailable() + condition.Message = retErr.Error() + unstructuredtools.SetConditions(mg, condition) _, err = tools.UpdateStatus(ctx, mg, updateOpts) if err != nil { return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) @@ -214,13 +216,15 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c rbInstaller := rbac.NewRBACInstaller(dyn) err = rbInstaller.ApplyRBAC(generated) if err != nil { - reason := fmt.Sprintf("Applying RBAC failed: %v", err) - unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + retErr := fmt.Errorf("applying rbac: %w", err) + condition := condition.Unavailable() + condition.Message = retErr.Error() + unstructuredtools.SetConditions(mg, condition) _, err = tools.UpdateStatus(ctx, mg, updateOpts) if err != nil { return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) } - return controller.ExternalObservation{}, fmt.Errorf("installing rbac: %w", err) + return controller.ExternalObservation{}, retErr } tracer := tracer.NewTracer(ctx, meta.IsVerbose(mg)) @@ -253,13 +257,15 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c upgradedRel, err := helmchart.Update(ctx, opts) if err != nil { - reason := fmt.Sprintf("Updating helm chart failed: %v", err) - unstructuredtools.SetConditions(mg, condition.FailWithReason(reason)) + retErr := fmt.Errorf("updating helm chart: %w", err) + condition := condition.Unavailable() + condition.Message = retErr.Error() + unstructuredtools.SetConditions(mg, condition) _, err = tools.UpdateStatus(ctx, mg, updateOpts) if err != nil { return controller.ExternalObservation{}, fmt.Errorf("updating status after failure: %w", err) } - return controller.ExternalObservation{}, fmt.Errorf("updating helm chart: %w", err) + return controller.ExternalObservation{}, retErr } _, digest, err := helmchart.GetResourcesRefFromRelease(upgradedRel, mg.GetNamespace(), clientset)