diff --git a/pkg/registry/apis/folders/hooks.go b/pkg/registry/apis/folders/hooks.go index e686304cba5..f0c954ecfeb 100644 --- a/pkg/registry/apis/folders/hooks.go +++ b/pkg/registry/apis/folders/hooks.go @@ -12,43 +12,56 @@ import ( ) // "Almost nobody should use this hook" but we do because we need ctx and AfterCreate doesn't have it. -func (b *FolderAPIBuilder) beginCreate(_ context.Context, obj runtime.Object, _ *metav1.CreateOptions) (registry.FinishFunc, error) { +func (b *FolderAPIBuilder) beginCreate(ctx context.Context, obj runtime.Object, _ *metav1.CreateOptions) (registry.FinishFunc, error) { + log := logging.FromContext(ctx) meta, err := utils.MetaAccessor(obj) if err != nil { + log.Error("Failed to access new folder object metadata", "error", err) return nil, err } if meta.GetFolder() == "" { // Zanzana only cares about parent-child folder relationships; nothing to do if folder is at root. + log.Info("Skipping Zanzana folder propagation for new root-level folder", "folder", meta.GetName()) return func(ctx context.Context, success bool) {}, nil } return func(ctx context.Context, success bool) { if success { + log.Info("Propagating new folder to Zanzana", "folder", meta.GetName(), "parent", meta.GetFolder()) b.writeFolderToZanzana(ctx, meta) + } else { + log.Info("Got success=false in folder create hook", "folder", meta.GetName()) } }, nil } // "Almost nobody should use this hook" but we do because we need ctx and AfterUpdate doesn't have it. -func (b *FolderAPIBuilder) beginUpdate(_ context.Context, obj runtime.Object, old runtime.Object, _ *metav1.UpdateOptions) (registry.FinishFunc, error) { +func (b *FolderAPIBuilder) beginUpdate(ctx context.Context, obj runtime.Object, old runtime.Object, _ *metav1.UpdateOptions) (registry.FinishFunc, error) { + log := logging.FromContext(ctx) updatedMeta, err := utils.MetaAccessor(obj) if err != nil { + log.Error("Failed to access updated folder object metadata", "error", err) return nil, err } oldMeta, err := utils.MetaAccessor(old) if err != nil { + log.Error("Failed to access existing folder object metadata", "error", err) return nil, err } if updatedMeta.GetFolder() == oldMeta.GetFolder() { // No change to parent folder, nothing to do. + log.Info("Skipping Zanzana folder propagation; no change in parent", "folder", oldMeta.GetName()) return func(ctx context.Context, success bool) {}, nil } return func(ctx context.Context, success bool) { if success { + log.Info("Propagating updated folder to Zanzana", "folder", oldMeta.GetName(), "oldParent", oldMeta.GetFolder(), "newParent", updatedMeta.GetFolder()) b.writeFolderToZanzana(ctx, updatedMeta) + } else { + log.Info("Got success=false in folder update hook", "folder", oldMeta.GetName()) } }, nil } diff --git a/pkg/registry/apis/folders/register.go b/pkg/registry/apis/folders/register.go index b07ce13b90b..a82fdbf1182 100644 --- a/pkg/registry/apis/folders/register.go +++ b/pkg/registry/apis/folders/register.go @@ -19,6 +19,8 @@ import ( authlib "github.com/grafana/authlib/types" + "github.com/grafana/grafana-app-sdk/logging" + folders "github.com/grafana/grafana/apps/folder/pkg/apis/folder/v1beta1" "github.com/grafana/grafana/apps/iam/pkg/reconcilers" "github.com/grafana/grafana/pkg/apimachinery/identity" @@ -181,9 +183,13 @@ func (b *FolderAPIBuilder) UpdateAPIGroupInfo(apiGroupInfo *genericapiserver.API return err } + log := logging.FromContext(context.Background()) if b.features.IsEnabledGlobally(featuremgmt.FlagZanzana) { + log.Info("Enabling Zanzana folder propagation hooks") store.BeginCreate = b.beginCreate store.BeginUpdate = b.beginUpdate + } else { + log.Info("Zanzana is not enabled; skipping folder propagation hooks") } dw, err := dualWriteBuilder(resourceInfo.GroupResource(), legacyStore, store)