diff --git a/pkg/registry/apis/provisioning/jobs/export/resources.go b/pkg/registry/apis/provisioning/jobs/export/resources.go index 729d99bac3c..e46c3b7e4f4 100644 --- a/pkg/registry/apis/provisioning/jobs/export/resources.go +++ b/pkg/registry/apis/provisioning/jobs/export/resources.go @@ -25,55 +25,8 @@ import ( type conversionShim = func(ctx context.Context, item *unstructured.Unstructured) (*unstructured.Unstructured, error) // createDashboardConversionShim creates a conversion shim for dashboards that preserves the original API version. -// It caches version clients to avoid repeated lookups. -func createDashboardConversionShim(ctx context.Context, clients resources.ResourceClients, gvr schema.GroupVersionResource) (conversionShim, map[string]dynamic.ResourceInterface) { - versionClients := make(map[string]dynamic.ResourceInterface) - shim := func(ctx context.Context, item *unstructured.Unstructured) (*unstructured.Unstructured, error) { - // Check if there's a stored version in the conversion status. - // This indicates the original API version the dashboard was created with, - // which should be preserved during export regardless of whether conversion succeeded or failed. - storedVersion, _, _ := unstructured.NestedString(item.Object, "status", "conversion", "storedVersion") - if storedVersion != "" { - // For v0 we can simply fallback -- the full model is saved - if strings.HasPrefix(storedVersion, "v0") { - item.SetAPIVersion(fmt.Sprintf("%s/%s", gvr.Group, storedVersion)) - return item, nil - } - - // For any other version (v1, v2, v3, etc.), fetch the original version via client - // Check if we already have a client cached for this version - versionClient, ok := versionClients[storedVersion] - if !ok { - // Dynamically construct the GroupVersionResource for any version - versionGVR := schema.GroupVersionResource{ - Group: gvr.Group, - Version: storedVersion, - Resource: gvr.Resource, - } - var err error - versionClient, _, err = clients.ForResource(ctx, versionGVR) - if err != nil { - return nil, fmt.Errorf("get client for version %s: %w", storedVersion, err) - } - versionClients[storedVersion] = versionClient - } - return versionClient.Get(ctx, item.GetName(), metav1.GetOptions{}) - } - - // If conversion failed but there's no storedVersion, this is an error condition - failed, _, _ := unstructured.NestedBool(item.Object, "status", "conversion", "failed") - if failed { - return nil, fmt.Errorf("conversion failed but no storedVersion available") - } - - return item, nil - } - return shim, versionClients -} - -// createDashboardConversionShimWithCache creates a conversion shim using a provided versionClients cache. -// This allows the cache to be shared across multiple shim calls. -func createDashboardConversionShimWithCache(ctx context.Context, clients resources.ResourceClients, gvr schema.GroupVersionResource, versionClients map[string]dynamic.ResourceInterface) conversionShim { +// It uses a provided versionClients cache to allow sharing across multiple shim calls. +func createDashboardConversionShim(ctx context.Context, clients resources.ResourceClients, gvr schema.GroupVersionResource, versionClients map[string]dynamic.ResourceInterface) conversionShim { shim := func(ctx context.Context, item *unstructured.Unstructured) (*unstructured.Unstructured, error) { // Check if there's a stored version in the conversion status. // This indicates the original API version the dashboard was created with,