From b8eeea0fe0028f4960d966622f5df82719617f4d Mon Sep 17 00:00:00 2001 From: Tania <10127682+undef1nd@users.noreply.github.com> Date: Wed, 23 Apr 2025 18:21:13 +0200 Subject: [PATCH] Remove flag `disableSecretsCompatibility` (#103135) Remove flag disableSecretsCompatibility --- .../src/types/featureToggles.gen.ts | 4 - .../datasources/service/datasource.go | 16 +- pkg/services/featuremgmt/registry.go | 7 - pkg/services/featuremgmt/toggles_gen.csv | 1 - pkg/services/featuremgmt/toggles_gen.go | 4 - pkg/services/featuremgmt/toggles_gen.json | 796 ++++++------------ .../kvstore/migrations/datasource_mig.go | 28 +- .../kvstore/migrations/datasource_mig_test.go | 254 +----- 8 files changed, 259 insertions(+), 851 deletions(-) diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index 54946660dd3..39b36fcfd76 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -59,10 +59,6 @@ export interface FeatureToggles { */ canvasPanelNesting?: boolean; /** - * Disable duplicated secret storage in legacy tables - */ - disableSecretsCompatibility?: boolean; - /** * Logs the path for requests that are instrumented as unknown */ logRequestsInstrumentedAsUnknown?: boolean; diff --git a/pkg/services/datasources/service/datasource.go b/pkg/services/datasources/service/datasource.go index 2f00a788c44..bbaa4ab0822 100644 --- a/pkg/services/datasources/service/datasource.go +++ b/pkg/services/datasources/service/datasource.go @@ -259,11 +259,9 @@ func (s *Service) AddDataSource(ctx context.Context, cmd *datasources.AddDataSou var err error cmd.EncryptedSecureJsonData = make(map[string][]byte) - if !s.features.IsEnabled(ctx, featuremgmt.FlagDisableSecretsCompatibility) { - cmd.EncryptedSecureJsonData, err = s.SecretsService.EncryptJsonData(ctx, cmd.SecureJsonData, secrets.WithoutScope()) - if err != nil { - return err - } + cmd.EncryptedSecureJsonData, err = s.SecretsService.EncryptJsonData(ctx, cmd.SecureJsonData, secrets.WithoutScope()) + if err != nil { + return err } cmd.UpdateSecretFn = func() error { @@ -948,11 +946,9 @@ func (s *Service) fillWithSecureJSONData(ctx context.Context, cmd *datasources.U } cmd.EncryptedSecureJsonData = make(map[string][]byte) - if !s.features.IsEnabled(ctx, featuremgmt.FlagDisableSecretsCompatibility) { - cmd.EncryptedSecureJsonData, err = s.SecretsService.EncryptJsonData(ctx, cmd.SecureJsonData, secrets.WithoutScope()) - if err != nil { - return err - } + cmd.EncryptedSecureJsonData, err = s.SecretsService.EncryptJsonData(ctx, cmd.SecureJsonData, secrets.WithoutScope()) + if err != nil { + return err } return nil diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 941781e000f..cba0275dcaa 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -86,13 +86,6 @@ var ( Owner: grafanaDatavizSquad, HideFromAdminPage: true, }, - { - Name: "disableSecretsCompatibility", - Description: "Disable duplicated secret storage in legacy tables", - Stage: FeatureStageExperimental, - RequiresRestart: true, - Owner: hostedGrafanaTeam, - }, { Name: "logRequestsInstrumentedAsUnknown", Description: "Logs the path for requests that are instrumented as unknown", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index bafd477aea4..9760fa856ff 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -8,7 +8,6 @@ featureHighlights,GA,@grafana/grafana-as-code,false,false,false storage,experimental,@grafana/search-and-storage,false,false,false correlations,GA,@grafana/dataviz-squad,false,false,false canvasPanelNesting,experimental,@grafana/dataviz-squad,false,false,true -disableSecretsCompatibility,experimental,@grafana/hosted-grafana-team,false,true,false logRequestsInstrumentedAsUnknown,experimental,@grafana/hosted-grafana-team,false,false,false grpcServer,preview,@grafana/search-and-storage,false,false,false cloudWatchCrossAccountQuerying,GA,@grafana/aws-datasources,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index d190c505986..3d2d2f8cfcb 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -43,10 +43,6 @@ const ( // Allow elements nesting FlagCanvasPanelNesting = "canvasPanelNesting" - // FlagDisableSecretsCompatibility - // Disable duplicated secret storage in legacy tables - FlagDisableSecretsCompatibility = "disableSecretsCompatibility" - // FlagLogRequestsInstrumentedAsUnknown // Logs the path for requests that are instrumented as unknown FlagLogRequestsInstrumentedAsUnknown = "logRequestsInstrumentedAsUnknown" diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index 29d5afd6581..ee03a1c27f8 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -6,7 +6,7 @@ { "metadata": { "name": "ABTestFeatureToggleA", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-13T21:13:13Z" }, "spec": { @@ -20,7 +20,7 @@ { "metadata": { "name": "ABTestFeatureToggleB", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-13T21:13:13Z" }, "spec": { @@ -34,7 +34,7 @@ { "metadata": { "name": "addFieldFromCalculationStatFunctions", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-03T14:39:58Z" }, "spec": { @@ -48,7 +48,7 @@ { "metadata": { "name": "aiGeneratedDashboardChanges", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-03-05T12:01:31Z" }, "spec": { @@ -61,7 +61,7 @@ { "metadata": { "name": "alertRuleRestore", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-05T14:15:26Z" }, "spec": { @@ -74,8 +74,8 @@ { "metadata": { "name": "alertRuleUseFiredAtForStartsAt", - "resourceVersion": "1744728881642", - "creationTimestamp": "2025-04-15T14:54:41Z" + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-22T16:32:24Z" }, "spec": { "description": "Use FiredAt for StartsAt when sending alerts to Alertmaanger", @@ -84,64 +84,10 @@ "expression": "false" } }, - { - "metadata": { - "name": "alertStateHistoryLokiOnly", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-03-30T18:53:21Z", - "deletionTimestamp": "2025-04-08T13:50:27Z" - }, - "spec": { - "description": "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" - } - }, - { - "metadata": { - "name": "alertStateHistoryLokiPrimary", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-03-30T18:53:21Z", - "deletionTimestamp": "2025-04-08T13:50:27Z" - }, - "spec": { - "description": "Enable a remote Loki instance as the primary source for state history reads.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" - } - }, - { - "metadata": { - "name": "alertStateHistoryLokiSecondary", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-03-30T18:53:21Z", - "deletionTimestamp": "2025-04-08T13:50:27Z" - }, - "spec": { - "description": "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" - } - }, - { - "metadata": { - "name": "alertingApiServer", - "resourceVersion": "1743693517832", - "creationTimestamp": "2024-06-20T20:52:03Z", - "deletionTimestamp": "2025-04-16T17:44:22Z" - }, - "spec": { - "description": "Register Alerting APIs with the K8s API server", - "stage": "GA", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true, - "expression": "true" - } - }, { "metadata": { "name": "alertingBacktesting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-12-14T14:44:14Z" }, "spec": { @@ -153,7 +99,7 @@ { "metadata": { "name": "alertingCentralAlertHistory", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-29T15:01:38Z" }, "spec": { @@ -163,25 +109,10 @@ "frontend": true } }, - { - "metadata": { - "name": "alertingConversionAPI", - "resourceVersion": "1743693517832", - "creationTimestamp": "2025-02-12T07:13:21Z", - "deletionTimestamp": "2025-04-05T08:27:02Z" - }, - "spec": { - "description": "Enable the alerting conversion API", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad", - "hideFromAdminPage": true, - "hideFromDocs": true - } - }, { "metadata": { "name": "alertingDisableSendAlertsExternal", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-23T12:29:19Z" }, "spec": { @@ -195,7 +126,7 @@ { "metadata": { "name": "alertingFilterV2", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-11T11:29:26Z" }, "spec": { @@ -208,7 +139,7 @@ { "metadata": { "name": "alertingInsights", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-14T12:58:04Z" }, "spec": { @@ -223,7 +154,7 @@ { "metadata": { "name": "alertingJiraIntegration", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-14T12:22:04Z" }, "spec": { @@ -237,11 +168,8 @@ { "metadata": { "name": "alertingListViewV2", - "resourceVersion": "1744700823766", - "creationTimestamp": "2024-05-24T14:40:49Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-15 07:07:03.766981 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2024-05-24T14:40:49Z" }, "spec": { "description": "Enables the new alert list view design", @@ -253,11 +181,8 @@ { "metadata": { "name": "alertingListViewV2PreviewToggle", - "resourceVersion": "1744700823766", - "creationTimestamp": "2025-04-14T13:28:02Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-15 07:07:03.766981 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-22T16:32:24Z" }, "spec": { "description": "Enables the alerting list view v2 preview toggle", @@ -269,7 +194,7 @@ { "metadata": { "name": "alertingMigrationUI", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-14T16:40:05Z" }, "spec": { @@ -284,7 +209,7 @@ { "metadata": { "name": "alertingNotificationsStepMode", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-22T11:07:45Z" }, "spec": { @@ -298,7 +223,7 @@ { "metadata": { "name": "alertingPrometheusRulesPrimary", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-27T12:27:16Z" }, "spec": { @@ -311,7 +236,7 @@ { "metadata": { "name": "alertingQueryAndExpressionsStepMode", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-26T06:33:14Z" }, "spec": { @@ -325,7 +250,7 @@ { "metadata": { "name": "alertingQueryOptimization", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-10T20:52:58Z" }, "spec": { @@ -338,7 +263,7 @@ { "metadata": { "name": "alertingRulePermanentlyDelete", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-03T11:18:25Z" }, "spec": { @@ -354,7 +279,7 @@ { "metadata": { "name": "alertingRuleRecoverDeleted", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-27T14:39:26Z" }, "spec": { @@ -370,7 +295,7 @@ { "metadata": { "name": "alertingRuleVersionHistoryRestore", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-17T12:25:32Z" }, "spec": { @@ -386,7 +311,7 @@ { "metadata": { "name": "alertingSaveStateCompressed", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-27T17:47:33Z" }, "spec": { @@ -399,7 +324,7 @@ { "metadata": { "name": "alertingSaveStatePeriodic", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-23T16:03:30Z" }, "spec": { @@ -411,7 +336,7 @@ { "metadata": { "name": "alertingSimplifiedRouting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-10T13:14:39Z" }, "spec": { @@ -424,7 +349,7 @@ { "metadata": { "name": "alertingUIOptimizeReducer", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-18T10:59:00Z" }, "spec": { @@ -438,7 +363,7 @@ { "metadata": { "name": "alertmanagerRemoteOnly", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-30T16:27:08Z" }, "spec": { @@ -450,7 +375,7 @@ { "metadata": { "name": "alertmanagerRemotePrimary", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-30T16:27:08Z" }, "spec": { @@ -462,7 +387,7 @@ { "metadata": { "name": "alertmanagerRemoteSecondary", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-30T16:27:08Z" }, "spec": { @@ -474,7 +399,7 @@ { "metadata": { "name": "angularDeprecationUI", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-08-29T14:05:47Z" }, "spec": { @@ -488,7 +413,7 @@ { "metadata": { "name": "annotationPermissionUpdate", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-31T13:30:13Z" }, "spec": { @@ -501,7 +426,7 @@ { "metadata": { "name": "appPlatformGrpcClientAuth", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-14T10:47:18Z" }, "spec": { @@ -515,7 +440,7 @@ { "metadata": { "name": "assetSriChecks", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-04T10:56:35Z" }, "spec": { @@ -528,7 +453,7 @@ { "metadata": { "name": "authZGRPCServer", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-13T09:41:35Z" }, "spec": { @@ -542,7 +467,7 @@ { "metadata": { "name": "awsAsyncQueryCaching", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-21T15:34:07Z" }, "spec": { @@ -555,7 +480,7 @@ { "metadata": { "name": "awsDatasourcesTempCredentials", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-06T15:06:11Z" }, "spec": { @@ -567,7 +492,7 @@ { "metadata": { "name": "azureMonitorDisableLogLimit", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-24T13:32:09Z" }, "spec": { @@ -580,7 +505,7 @@ { "metadata": { "name": "azureMonitorEnableUserAuth", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-27T14:01:54Z" }, "spec": { @@ -593,7 +518,7 @@ { "metadata": { "name": "azureMonitorLogsBuilderEditor", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-02T14:15:25Z" }, "spec": { @@ -606,7 +531,7 @@ { "metadata": { "name": "azureMonitorPrometheusExemplars", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-06T16:53:17Z" }, "spec": { @@ -619,7 +544,7 @@ { "metadata": { "name": "cachingOptimizeSerializationMemoryUsage", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-12T16:56:49Z" }, "spec": { @@ -631,7 +556,7 @@ { "metadata": { "name": "canvasPanelNesting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-05-31T19:03:34Z" }, "spec": { @@ -645,7 +570,7 @@ { "metadata": { "name": "canvasPanelPanZoom", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-02T19:52:21Z" }, "spec": { @@ -658,7 +583,7 @@ { "metadata": { "name": "cloudRBACRoles", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-10T13:19:01Z" }, "spec": { @@ -674,7 +599,7 @@ { "metadata": { "name": "cloudWatchBatchQueries", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-20T19:09:41Z" }, "spec": { @@ -686,7 +611,7 @@ { "metadata": { "name": "cloudWatchCrossAccountQuerying", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-11-28T11:39:12Z" }, "spec": { @@ -700,7 +625,7 @@ { "metadata": { "name": "cloudWatchNewLabelParsing", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-05T15:57:56Z" }, "spec": { @@ -713,7 +638,7 @@ { "metadata": { "name": "cloudWatchRoundUpEndTime", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-27T15:10:28Z" }, "spec": { @@ -726,7 +651,7 @@ { "metadata": { "name": "configurableSchedulerTick", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-26T16:44:12Z" }, "spec": { @@ -740,7 +665,7 @@ { "metadata": { "name": "correlations", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-09-16T13:14:27Z" }, "spec": { @@ -754,7 +679,7 @@ { "metadata": { "name": "crashDetection", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-12T15:07:27Z" }, "spec": { @@ -767,7 +692,7 @@ { "metadata": { "name": "dashboardDisableSchemaValidationV1", - "resourceVersion": "1744303023863", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-11T16:52:46Z" }, "spec": { @@ -779,7 +704,7 @@ { "metadata": { "name": "dashboardDisableSchemaValidationV2", - "resourceVersion": "1744303023863", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-11T16:52:46Z" }, "spec": { @@ -791,7 +716,7 @@ { "metadata": { "name": "dashboardNewLayouts", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-23T08:55:45Z" }, "spec": { @@ -804,7 +729,7 @@ { "metadata": { "name": "dashboardScene", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-13T08:51:21Z" }, "spec": { @@ -818,7 +743,7 @@ { "metadata": { "name": "dashboardSceneForViewers", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-02T19:02:25Z" }, "spec": { @@ -832,7 +757,7 @@ { "metadata": { "name": "dashboardSceneSolo", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-11T08:08:47Z" }, "spec": { @@ -846,7 +771,7 @@ { "metadata": { "name": "dashboardSchemaValidationLogging", - "resourceVersion": "1744303223631", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-11T16:52:46Z" }, "spec": { @@ -858,7 +783,7 @@ { "metadata": { "name": "dashgpt", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-08-30T20:22:05Z" }, "spec": { @@ -872,7 +797,7 @@ { "metadata": { "name": "dataplaneAggregator", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-09T08:41:07Z" }, "spec": { @@ -885,7 +810,7 @@ { "metadata": { "name": "dataplaneFrontendFallback", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-04-07T21:13:19Z" }, "spec": { @@ -900,7 +825,7 @@ { "metadata": { "name": "datasourceAPIServers", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-19T08:28:27Z" }, "spec": { @@ -913,7 +838,7 @@ { "metadata": { "name": "datasourceConnectionsTab", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-21T17:39:48Z" }, "spec": { @@ -926,7 +851,7 @@ { "metadata": { "name": "datasourceQueryTypes", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-23T16:46:28Z" }, "spec": { @@ -939,7 +864,7 @@ { "metadata": { "name": "disableClassicHTTPHistogram", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-18T19:37:44Z" }, "spec": { @@ -953,7 +878,7 @@ { "metadata": { "name": "disableEnvelopeEncryption", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-05-24T08:34:47Z" }, "spec": { @@ -967,7 +892,7 @@ { "metadata": { "name": "disableNumericMetricsSortingInExpressions", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-16T14:52:47Z" }, "spec": { @@ -980,7 +905,7 @@ { "metadata": { "name": "disableSSEDataplane", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-04-12T16:24:34Z" }, "spec": { @@ -989,23 +914,10 @@ "codeowner": "@grafana/observability-metrics" } }, - { - "metadata": { - "name": "disableSecretsCompatibility", - "resourceVersion": "1743693517832", - "creationTimestamp": "2022-07-12T20:27:37Z" - }, - "spec": { - "description": "Disable duplicated secret storage in legacy tables", - "stage": "experimental", - "codeowner": "@grafana/hosted-grafana-team", - "requiresRestart": true - } - }, { "metadata": { "name": "editPanelCSVDragAndDrop", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-01-24T09:43:44Z" }, "spec": { @@ -1018,7 +930,7 @@ { "metadata": { "name": "elasticsearchCrossClusterSearch", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-12T22:20:04Z" }, "spec": { @@ -1030,7 +942,7 @@ { "metadata": { "name": "elasticsearchImprovedParsing", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-15T17:05:54Z" }, "spec": { @@ -1042,7 +954,7 @@ { "metadata": { "name": "enableDatagridEditing", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-04-24T14:46:31Z" }, "spec": { @@ -1055,7 +967,7 @@ { "metadata": { "name": "enableExtensionsAdminPage", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-05T15:55:10Z" }, "spec": { @@ -1068,7 +980,7 @@ { "metadata": { "name": "enableNativeHTTPHistogram", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-03T18:23:55Z" }, "spec": { @@ -1082,7 +994,7 @@ { "metadata": { "name": "enableSCIM", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-07T14:38:46Z" }, "spec": { @@ -1094,7 +1006,7 @@ { "metadata": { "name": "enableScopesInMetricsExplore", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-06T13:11:33Z" }, "spec": { @@ -1108,7 +1020,7 @@ { "metadata": { "name": "exploreLogsAggregatedMetrics", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-29T13:55:59Z" }, "spec": { @@ -1121,7 +1033,7 @@ { "metadata": { "name": "exploreLogsLimitedTimeRange", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-29T13:55:59Z" }, "spec": { @@ -1134,7 +1046,7 @@ { "metadata": { "name": "exploreLogsShardSplitting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-29T13:55:59Z" }, "spec": { @@ -1144,25 +1056,10 @@ "frontend": true } }, - { - "metadata": { - "name": "exploreMetrics", - "resourceVersion": "1743693517832", - "creationTimestamp": "2024-04-09T18:15:18Z", - "deletionTimestamp": "2025-04-11T20:45:14Z" - }, - "spec": { - "description": "Enables the new Grafana Metrics Drilldown core app", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "frontend": true, - "expression": "true" - } - }, { "metadata": { "name": "exploreMetricsRelatedLogs", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-05T16:28:43Z" }, "spec": { @@ -1172,28 +1069,10 @@ "frontend": true } }, - { - "metadata": { - "name": "exploreMetricsUseExternalAppPlugin", - "resourceVersion": "1744146547481", - "creationTimestamp": "2025-02-03T20:46:54Z", - "deletionTimestamp": "2025-04-11T20:45:14Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-08 21:09:07.481769 +0000 UTC" - } - }, - "spec": { - "description": "Use the externalized Grafana Metrics Drilldown (formerly known as Explore Metrics) app plugin", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "requiresRestart": true, - "expression": "true" - } - }, { "metadata": { "name": "expressionParser", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-17T00:59:11Z" }, "spec": { @@ -1206,7 +1085,7 @@ { "metadata": { "name": "extensionSidebar", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-03T10:16:35Z" }, "spec": { @@ -1219,7 +1098,7 @@ { "metadata": { "name": "externalCorePlugins", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-22T08:50:13Z" }, "spec": { @@ -1232,7 +1111,7 @@ { "metadata": { "name": "externalServiceAccounts", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-28T07:26:37Z" }, "spec": { @@ -1245,7 +1124,7 @@ { "metadata": { "name": "extraThemes", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-05-10T13:37:04Z" }, "spec": { @@ -1258,7 +1137,7 @@ { "metadata": { "name": "extractFieldsNameDeduplication", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-02T15:47:42Z" }, "spec": { @@ -1271,7 +1150,7 @@ { "metadata": { "name": "failWrongDSUID", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-20T10:56:39Z" }, "spec": { @@ -1284,7 +1163,7 @@ { "metadata": { "name": "faroDatasourceSelector", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-05-05T00:35:10Z" }, "spec": { @@ -1297,7 +1176,7 @@ { "metadata": { "name": "featureHighlights", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-02-03T11:53:23Z" }, "spec": { @@ -1311,7 +1190,7 @@ { "metadata": { "name": "featureToggleAdminPage", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-18T20:43:32Z" }, "spec": { @@ -1325,7 +1204,7 @@ { "metadata": { "name": "feedbackButton", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-02T17:08:15Z" }, "spec": { @@ -1338,7 +1217,7 @@ { "metadata": { "name": "fetchRulesUsingPost", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-29T12:17:44Z" }, "spec": { @@ -1349,36 +1228,10 @@ "hideFromDocs": true } }, - { - "metadata": { - "name": "flagDashboardDisableSchemaValidationV1", - "resourceVersion": "1744302136118", - "creationTimestamp": "2025-04-10T16:22:16Z", - "deletionTimestamp": "2025-04-10T16:37:03Z" - }, - "spec": { - "description": "Disable schema validation for dashboards/v1", - "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad" - } - }, - { - "metadata": { - "name": "flagDashboardDisableSchemaValidationV2", - "resourceVersion": "1744302136118", - "creationTimestamp": "2025-04-10T16:22:16Z", - "deletionTimestamp": "2025-04-10T16:37:03Z" - }, - "spec": { - "description": "Disable schema validation for dashboards/v2", - "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad" - } - }, { "metadata": { "name": "formatString", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-13T18:17:12Z" }, "spec": { @@ -1389,24 +1242,10 @@ "expression": "true" } }, - { - "metadata": { - "name": "frontendSandboxMonitorOnly", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-07-05T11:48:25Z", - "deletionTimestamp": "2025-04-14T13:27:59Z" - }, - "spec": { - "description": "Enables monitor only in the plugin frontend sandbox (if enabled)", - "stage": "privatePreview", - "codeowner": "@grafana/plugins-platform-backend", - "frontend": true - } - }, { "metadata": { "name": "grafanaAPIServerEnsureKubectlAccess", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-12-06T20:21:21Z" }, "spec": { @@ -1420,7 +1259,7 @@ { "metadata": { "name": "grafanaAPIServerWithExperimentalAPIs", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-06T18:55:22Z" }, "spec": { @@ -1434,7 +1273,7 @@ { "metadata": { "name": "grafanaAdvisor", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-20T10:08:00Z" }, "spec": { @@ -1446,7 +1285,7 @@ { "metadata": { "name": "grafanaManagedRecordingRules", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-22T17:53:16Z" }, "spec": { @@ -1460,7 +1299,7 @@ { "metadata": { "name": "grafanaManagedRecordingRulesDatasources", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-07T13:30:40Z" }, "spec": { @@ -1474,11 +1313,8 @@ { "metadata": { "name": "grafanaconThemes", - "resourceVersion": "1744293476104", - "creationTimestamp": "2025-02-06T11:08:04Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-10 13:57:56.104154 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-02-06T11:08:04Z" }, "spec": { "description": "Enables the temporary themes for GrafanaCon", @@ -1493,7 +1329,7 @@ { "metadata": { "name": "groupAttributeSync", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-09T15:29:43Z" }, "spec": { @@ -1506,7 +1342,7 @@ { "metadata": { "name": "groupByVariable", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-14T17:18:04Z" }, "spec": { @@ -1520,7 +1356,7 @@ { "metadata": { "name": "groupToNestedTableTransformation", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-07T14:28:26Z" }, "spec": { @@ -1534,7 +1370,7 @@ { "metadata": { "name": "grpcServer", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-09-26T20:25:34Z" }, "spec": { @@ -1547,7 +1383,7 @@ { "metadata": { "name": "homeSetupGuide", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-25T17:20:04Z" }, "spec": { @@ -1560,7 +1396,7 @@ { "metadata": { "name": "improvedExternalSessionHandling", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-17T10:54:39Z" }, "spec": { @@ -1573,7 +1409,7 @@ { "metadata": { "name": "improvedExternalSessionHandlingSAML", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-09T17:02:49Z" }, "spec": { @@ -1586,7 +1422,7 @@ { "metadata": { "name": "individualCookiePreferences", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-02-21T10:19:07Z" }, "spec": { @@ -1598,7 +1434,7 @@ { "metadata": { "name": "infinityRunQueriesInParallel", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-14T12:54:04Z" }, "spec": { @@ -1610,7 +1446,7 @@ { "metadata": { "name": "influxdbBackendMigration", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-02-09T18:26:16Z", "deletionTimestamp": "2023-01-17T14:11:26Z" }, @@ -1625,7 +1461,7 @@ { "metadata": { "name": "influxdbRunQueriesInParallel", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-01T10:58:24Z" }, "spec": { @@ -1637,7 +1473,7 @@ { "metadata": { "name": "influxqlStreamingParser", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-29T17:29:35Z" }, "spec": { @@ -1649,7 +1485,7 @@ { "metadata": { "name": "investigationsBackend", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-18T08:31:03Z" }, "spec": { @@ -1662,7 +1498,7 @@ { "metadata": { "name": "inviteUserExperimental", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-07T19:09:59Z" }, "spec": { @@ -1677,7 +1513,7 @@ { "metadata": { "name": "jaegerBackendMigration", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-15T14:40:20Z" }, "spec": { @@ -1689,7 +1525,7 @@ { "metadata": { "name": "jitterAlertRulesWithinGroups", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-18T18:48:11Z" }, "spec": { @@ -1703,7 +1539,7 @@ { "metadata": { "name": "k8SFolderCounts", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-27T17:10:44Z" }, "spec": { @@ -1716,7 +1552,7 @@ { "metadata": { "name": "k8SFolderMove", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-27T17:10:44Z" }, "spec": { @@ -1729,7 +1565,7 @@ { "metadata": { "name": "kubernetesAggregator", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-12T20:59:35Z" }, "spec": { @@ -1742,11 +1578,8 @@ { "metadata": { "name": "kubernetesClientDashboardsFolders", - "resourceVersion": "1744337414536", - "creationTimestamp": "2025-02-18T23:11:26Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-11 02:10:14.536012 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-02-18T23:11:26Z" }, "spec": { "description": "Route the folder and dashboard service requests to k8s", @@ -1758,7 +1591,7 @@ { "metadata": { "name": "kubernetesDashboards", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-05T14:34:23Z" }, "spec": { @@ -1771,7 +1604,7 @@ { "metadata": { "name": "kubernetesFeatureToggles", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-18T05:32:44Z" }, "spec": { @@ -1782,25 +1615,10 @@ "hideFromAdminPage": true } }, - { - "metadata": { - "name": "kubernetesPlaylists", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-10-05T19:00:36Z", - "deletionTimestamp": "2024-08-13T08:03:28Z" - }, - "spec": { - "description": "Use the kubernetes API in the frontend for playlists, and route /api/playlist requests to k8s", - "stage": "GA", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresRestart": true, - "expression": "true" - } - }, { "metadata": { "name": "kubernetesSnapshots", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-12-05T22:31:49Z" }, "spec": { @@ -1813,7 +1631,7 @@ { "metadata": { "name": "libraryPanelRBAC", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-11T23:30:50Z" }, "spec": { @@ -1823,24 +1641,10 @@ "requiresRestart": true } }, - { - "metadata": { - "name": "live-service-web-worker", - "resourceVersion": "1743693517832", - "creationTimestamp": "2022-01-26T17:44:20Z", - "deletionTimestamp": "2025-04-07T14:47:35Z" - }, - "spec": { - "description": "This will use a webworker thread to processes events rather than the main thread", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true - } - }, { "metadata": { "name": "localeFormatPreference", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-31T13:59:07Z" }, "spec": { @@ -1852,7 +1656,7 @@ { "metadata": { "name": "localizationForPlugins", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-31T04:38:38Z" }, "spec": { @@ -1864,7 +1668,7 @@ { "metadata": { "name": "logQLScope", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-11T11:53:24Z" }, "spec": { @@ -1879,7 +1683,7 @@ { "metadata": { "name": "logRequestsInstrumentedAsUnknown", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-06-10T08:56:55Z" }, "spec": { @@ -1891,7 +1695,7 @@ { "metadata": { "name": "logRowsPopoverMenu", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-16T09:48:10Z" }, "spec": { @@ -1905,7 +1709,7 @@ { "metadata": { "name": "logsContextDatasourceUi", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-01-27T14:12:01Z" }, "spec": { @@ -1920,7 +1724,7 @@ { "metadata": { "name": "logsExploreTableDefaultVisualization", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-02T15:28:15Z" }, "spec": { @@ -1933,7 +1737,7 @@ { "metadata": { "name": "logsExploreTableVisualisation", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-12T13:52:42Z" }, "spec": { @@ -1947,7 +1751,7 @@ { "metadata": { "name": "logsInfiniteScrolling", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-09T10:54:03Z" }, "spec": { @@ -1961,11 +1765,8 @@ { "metadata": { "name": "logsPanelControls", - "resourceVersion": "1744209818391", - "creationTimestamp": "2025-04-07T14:38:55Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-09 14:43:38.391331 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-07T14:38:55Z" }, "spec": { "description": "Enables a control component for the logs panel in Explore", @@ -1978,7 +1779,7 @@ { "metadata": { "name": "lokiExperimentalStreaming", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-06-19T10:03:51Z" }, "spec": { @@ -1990,7 +1791,7 @@ { "metadata": { "name": "lokiLabelNamesQueryApi", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-13T14:31:41Z" }, "spec": { @@ -2003,7 +1804,7 @@ { "metadata": { "name": "lokiLogsDataplane", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-13T07:58:00Z" }, "spec": { @@ -2015,7 +1816,7 @@ { "metadata": { "name": "lokiPredefinedOperations", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-06-02T10:52:36Z" }, "spec": { @@ -2028,7 +1829,7 @@ { "metadata": { "name": "lokiQueryHints", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-12-18T20:43:16Z" }, "spec": { @@ -2042,7 +1843,7 @@ { "metadata": { "name": "lokiQuerySplitting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-02-09T17:27:02Z" }, "spec": { @@ -2057,7 +1858,7 @@ { "metadata": { "name": "lokiQuerySplittingConfig", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-03-20T15:51:36Z" }, "spec": { @@ -2070,7 +1871,7 @@ { "metadata": { "name": "lokiRunQueriesInParallel", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-19T09:34:01Z" }, "spec": { @@ -2082,7 +1883,7 @@ { "metadata": { "name": "lokiSendDashboardPanelNames", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-22T19:30:43Z" }, "spec": { @@ -2094,7 +1895,7 @@ { "metadata": { "name": "lokiShardSplitting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-23T11:21:03Z" }, "spec": { @@ -2107,7 +1908,7 @@ { "metadata": { "name": "lokiStructuredMetadata", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-16T16:06:14Z" }, "spec": { @@ -2120,7 +1921,7 @@ { "metadata": { "name": "managedDualWriter", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-19T14:50:39Z" }, "spec": { @@ -2134,11 +1935,8 @@ { "metadata": { "name": "metricsFromProfiles", - "resourceVersion": "1743767250962", - "creationTimestamp": "2025-04-09T10:55:28Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-04 11:47:30.962546 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-09T10:55:28Z" }, "spec": { "description": "Enables creating metrics from profiles and storing them as recording rules", @@ -2150,7 +1948,7 @@ { "metadata": { "name": "mlExpressions", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-13T17:37:50Z" }, "spec": { @@ -2162,7 +1960,7 @@ { "metadata": { "name": "multiTenantTempCredentials", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-02T20:25:50Z" }, "spec": { @@ -2175,7 +1973,7 @@ { "metadata": { "name": "mysqlAnsiQuotes", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-10-12T11:43:35Z" }, "spec": { @@ -2187,7 +1985,7 @@ { "metadata": { "name": "nestedFolders", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-10-26T14:15:14Z" }, "spec": { @@ -2200,7 +1998,7 @@ { "metadata": { "name": "newDashboardSharingComponent", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-03T15:02:18Z" }, "spec": { @@ -2214,7 +2012,7 @@ { "metadata": { "name": "newDashboardWithFiltersAndGroupBy", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-04T11:25:21Z" }, "spec": { @@ -2228,7 +2026,7 @@ { "metadata": { "name": "newFiltersUI", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-30T12:48:13Z" }, "spec": { @@ -2241,7 +2039,7 @@ { "metadata": { "name": "newFolderPicker", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-15T11:43:19Z" }, "spec": { @@ -2254,7 +2052,7 @@ { "metadata": { "name": "newLogsPanel", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-04T17:40:17Z" }, "spec": { @@ -2267,7 +2065,7 @@ { "metadata": { "name": "newPDFRendering", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-02-08T12:09:34Z" }, "spec": { @@ -2280,7 +2078,7 @@ { "metadata": { "name": "newShareReportDrawer", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-17T19:05:46Z" }, "spec": { @@ -2291,42 +2089,10 @@ "hideFromDocs": true } }, - { - "metadata": { - "name": "noBackdropBlur", - "resourceVersion": "1744057771109", - "creationTimestamp": "2025-03-14T15:21:35Z", - "deletionTimestamp": "2025-04-08T10:58:19Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-07 20:29:31.109804663 +0000 UTC" - } - }, - "spec": { - "description": "Disables backdrop blur behind modals and drawers", - "stage": "GA", - "codeowner": "@grafana/grafana-frontend-platform", - "frontend": true, - "expression": "true" - } - }, - { - "metadata": { - "name": "nodeGraphDotLayout", - "resourceVersion": "1743693517832", - "creationTimestamp": "2024-01-31T16:26:12Z", - "deletionTimestamp": "2025-04-08T14:37:17Z" - }, - "spec": { - "description": "Changed the layout algorithm for the node graph", - "stage": "experimental", - "codeowner": "@grafana/observability-traces-and-profiling", - "frontend": true - } - }, { "metadata": { "name": "oauthRequireSubClaim", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-03-25T13:22:24Z" }, "spec": { @@ -2340,7 +2106,7 @@ { "metadata": { "name": "onPremToCloudMigrations", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-22T16:09:08Z" }, "spec": { @@ -2353,7 +2119,7 @@ { "metadata": { "name": "panelFilterVariable", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-03T12:15:54Z" }, "spec": { @@ -2367,7 +2133,7 @@ { "metadata": { "name": "panelMonitoring", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-09T05:19:08Z" }, "spec": { @@ -2381,7 +2147,7 @@ { "metadata": { "name": "panelTitleSearch", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-02-15T18:26:03Z" }, "spec": { @@ -2394,7 +2160,7 @@ { "metadata": { "name": "passwordlessMagicLinkAuthentication", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-14T13:50:55Z" }, "spec": { @@ -2408,7 +2174,7 @@ { "metadata": { "name": "pdfTables", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-06T13:39:22Z" }, "spec": { @@ -2420,7 +2186,7 @@ { "metadata": { "name": "permissionsFilterRemoveSubquery", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-08-02T07:39:25Z" }, "spec": { @@ -2432,7 +2198,7 @@ { "metadata": { "name": "pinNavItems", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-10T11:40:03Z" }, "spec": { @@ -2445,7 +2211,7 @@ { "metadata": { "name": "playlistsReconciler", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-20T03:09:31Z" }, "spec": { @@ -2458,7 +2224,7 @@ { "metadata": { "name": "pluginProxyPreserveTrailingSlash", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-05T11:36:14Z" }, "spec": { @@ -2468,25 +2234,11 @@ "expression": "false" } }, - { - "metadata": { - "name": "pluginsAPIMetrics", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-09-21T11:36:32Z", - "deletionTimestamp": "2025-04-14T09:21:29Z" - }, - "spec": { - "description": "Sends metrics of public grafana packages usage by plugins", - "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend", - "frontend": true - } - }, { "metadata": { "name": "pluginsAutoUpdate", - "resourceVersion": "1744729584489", - "creationTimestamp": "2025-04-15T15:06:24Z" + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-22T16:32:24Z" }, "spec": { "description": "Enables auto-updating of users installed plugins", @@ -2497,7 +2249,7 @@ { "metadata": { "name": "pluginsCDNSyncLoader", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-07T10:07:08Z" }, "spec": { @@ -2509,7 +2261,7 @@ { "metadata": { "name": "pluginsDetailsRightPanel", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-08-13T09:55:30Z" }, "spec": { @@ -2523,7 +2275,7 @@ { "metadata": { "name": "pluginsFrontendSandbox", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-06-05T08:51:36Z" }, "spec": { @@ -2535,7 +2287,7 @@ { "metadata": { "name": "pluginsSkipHostEnvVars", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-15T17:09:14Z" }, "spec": { @@ -2547,7 +2299,7 @@ { "metadata": { "name": "pluginsSriChecks", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-04T12:55:09Z" }, "spec": { @@ -2560,7 +2312,7 @@ { "metadata": { "name": "preinstallAutoUpdate", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-07T12:14:25Z" }, "spec": { @@ -2573,7 +2325,7 @@ { "metadata": { "name": "preserveDashboardStateWhenNavigating", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-27T12:28:06Z" }, "spec": { @@ -2587,7 +2339,7 @@ { "metadata": { "name": "promQLScope", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-01-29T20:22:17Z" }, "spec": { @@ -2602,7 +2354,7 @@ { "metadata": { "name": "prometheusAzureOverrideAudience", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-05-30T15:43:32Z", "deletionTimestamp": "2023-07-16T21:30:14Z" }, @@ -2616,7 +2368,7 @@ { "metadata": { "name": "prometheusCodeModeMetricNamesSearch", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-04T20:38:23Z" }, "spec": { @@ -2626,24 +2378,10 @@ "frontend": true } }, - { - "metadata": { - "name": "prometheusRunQueriesInParallel", - "resourceVersion": "1743693517832", - "creationTimestamp": "2024-08-12T12:31:39Z", - "deletionTimestamp": "2025-04-11T22:11:19Z" - }, - "spec": { - "description": "Enables running Prometheus queries in parallel", - "stage": "GA", - "codeowner": "@grafana/oss-big-tent", - "expression": "true" - } - }, { "metadata": { "name": "prometheusSpecialCharsInLabelValues", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-18T21:31:08Z" }, "spec": { @@ -2670,7 +2408,7 @@ { "metadata": { "name": "provisioning", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-22T09:03:50Z" }, "spec": { @@ -2683,7 +2421,7 @@ { "metadata": { "name": "publicDashboardsEmailSharing", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-01-03T19:45:15Z" }, "spec": { @@ -2697,7 +2435,7 @@ { "metadata": { "name": "publicDashboardsScene", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-03-22T14:48:21Z" }, "spec": { @@ -2711,7 +2449,7 @@ { "metadata": { "name": "queryLibrary", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-10-07T18:31:45Z", "deletionTimestamp": "2023-03-20T16:00:14Z" }, @@ -2721,24 +2459,10 @@ "codeowner": "@grafana/grafana-frontend-platform" } }, - { - "metadata": { - "name": "queryOverLive", - "resourceVersion": "1743693517832", - "creationTimestamp": "2022-01-26T17:44:20Z", - "deletionTimestamp": "2025-04-07T14:47:35Z" - }, - "spec": { - "description": "Use Grafana Live WebSocket to execute backend queries", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true - } - }, { "metadata": { "name": "queryService", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-19T09:26:21Z" }, "spec": { @@ -2751,7 +2475,7 @@ { "metadata": { "name": "queryServiceFromExplore", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-02T10:00:33Z" }, "spec": { @@ -2764,7 +2488,7 @@ { "metadata": { "name": "queryServiceFromUI", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-19T09:26:21Z" }, "spec": { @@ -2777,7 +2501,7 @@ { "metadata": { "name": "queryServiceRewrite", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-04-19T09:26:21Z" }, "spec": { @@ -2790,7 +2514,7 @@ { "metadata": { "name": "recordedQueriesMulti", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-06-14T12:34:22Z" }, "spec": { @@ -2803,7 +2527,7 @@ { "metadata": { "name": "recoveryThreshold", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-10-10T14:51:50Z" }, "spec": { @@ -2817,7 +2541,7 @@ { "metadata": { "name": "refactorVariablesTimeRange", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-06-06T13:12:09Z" }, "spec": { @@ -2830,7 +2554,7 @@ { "metadata": { "name": "regressionTransformation", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-24T14:49:16Z" }, "spec": { @@ -2843,7 +2567,7 @@ { "metadata": { "name": "reloadDashboardsOnParamsChange", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-25T12:56:54Z" }, "spec": { @@ -2857,7 +2581,7 @@ { "metadata": { "name": "renderAuthJWT", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-04-03T16:53:38Z" }, "spec": { @@ -2870,7 +2594,7 @@ { "metadata": { "name": "rendererDisableAppPluginsPreload", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-02-24T14:43:06Z" }, "spec": { @@ -2885,7 +2609,7 @@ { "metadata": { "name": "reportingRetries", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-08-31T07:47:47Z" }, "spec": { @@ -2898,7 +2622,7 @@ { "metadata": { "name": "reportingUseRawTimeRange", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-14T20:08:03Z" }, "spec": { @@ -2911,7 +2635,7 @@ { "metadata": { "name": "rolePickerDrawer", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-26T12:51:38Z" }, "spec": { @@ -2923,7 +2647,7 @@ { "metadata": { "name": "scopeApi", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-11-27T07:58:25Z" }, "spec": { @@ -2937,7 +2661,7 @@ { "metadata": { "name": "scopeFilters", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-03-05T15:41:19Z" }, "spec": { @@ -2951,11 +2675,8 @@ { "metadata": { "name": "scopeSearchAllLevels", - "resourceVersion": "1744370973814", - "creationTimestamp": "2025-04-14T07:42:16Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-11 11:29:33.814419 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-14T07:42:16Z" }, "spec": { "description": "Enable scope search to include all levels of the scope node tree", @@ -2968,7 +2689,7 @@ { "metadata": { "name": "secretsManagementAppPlatform", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-19T09:25:14Z" }, "spec": { @@ -2980,7 +2701,7 @@ { "metadata": { "name": "showDashboardValidationWarnings", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-10-14T13:51:05Z" }, "spec": { @@ -2992,11 +2713,8 @@ { "metadata": { "name": "sqlDatasourceDatabaseSelection", - "resourceVersion": "1744189713698", - "creationTimestamp": "2023-06-06T16:28:52Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-09 09:08:33.698779 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2023-06-06T16:28:52Z" }, "spec": { "description": "Enables previous SQL data source dataset dropdown behavior", @@ -3009,11 +2727,8 @@ { "metadata": { "name": "sqlExpressions", - "resourceVersion": "1744213036999", - "creationTimestamp": "2024-02-27T21:16:00Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-09 15:37:16.999955611 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2024-02-27T21:16:00Z" }, "spec": { "description": "Enables SQL Expressions, which can execute SQL queries against data source results.", @@ -3024,7 +2739,7 @@ { "metadata": { "name": "sseGroupByDatasource", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-07T20:02:07Z" }, "spec": { @@ -3036,7 +2751,7 @@ { "metadata": { "name": "ssoSettingsApi", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-11-08T09:50:01Z" }, "spec": { @@ -3050,7 +2765,7 @@ { "metadata": { "name": "ssoSettingsLDAP", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-18T11:31:27Z" }, "spec": { @@ -3064,7 +2779,7 @@ { "metadata": { "name": "ssoSettingsSAML", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-03-14T11:04:45Z" }, "spec": { @@ -3078,7 +2793,7 @@ { "metadata": { "name": "storage", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2022-03-17T17:19:23Z" }, "spec": { @@ -3090,7 +2805,7 @@ { "metadata": { "name": "tableNextGen", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-26T03:57:57Z" }, "spec": { @@ -3102,7 +2817,7 @@ { "metadata": { "name": "tableSharedCrosshair", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-12-13T09:33:14Z" }, "spec": { @@ -3115,7 +2830,7 @@ { "metadata": { "name": "teamHttpHeadersMimir", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-13T10:42:47Z" }, "spec": { @@ -3128,7 +2843,7 @@ { "metadata": { "name": "templateVariablesUsesCombobox", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-31T09:53:13Z" }, "spec": { @@ -3141,7 +2856,7 @@ { "metadata": { "name": "timeRangeProvider", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-22T10:52:33Z" }, "spec": { @@ -3153,7 +2868,7 @@ { "metadata": { "name": "tlsMemcached", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-05-09T19:12:08Z" }, "spec": { @@ -3163,25 +2878,10 @@ "expression": "true" } }, - { - "metadata": { - "name": "traceQLStreaming", - "resourceVersion": "1743693517832", - "creationTimestamp": "2023-07-26T13:33:16Z", - "deletionTimestamp": "2025-04-09T12:57:07Z" - }, - "spec": { - "description": "Enables response streaming of TraceQL queries of the Tempo data source", - "stage": "GA", - "codeowner": "@grafana/observability-traces-and-profiling", - "frontend": true, - "expression": "false" - } - }, { "metadata": { "name": "transformationsRedesign", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-07-12T16:35:49Z" }, "spec": { @@ -3196,7 +2896,7 @@ { "metadata": { "name": "unifiedHistory", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-13T10:41:18Z" }, "spec": { @@ -3209,11 +2909,8 @@ { "metadata": { "name": "unifiedNavbars", - "resourceVersion": "1744174965165", - "creationTimestamp": "2025-04-09T12:51:22Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-09 05:02:45.165634 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-04-09T12:51:22Z" }, "spec": { "description": "Enables unified navbars", @@ -3226,7 +2923,7 @@ { "metadata": { "name": "unifiedRequestLog", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-03-31T13:38:09Z" }, "spec": { @@ -3240,7 +2937,7 @@ { "metadata": { "name": "unifiedStorageBigObjectsSupport", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-10-17T10:18:29Z" }, "spec": { @@ -3252,7 +2949,7 @@ { "metadata": { "name": "unifiedStorageGrpcConnectionPool", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-21T13:24:54Z" }, "spec": { @@ -3266,7 +2963,7 @@ { "metadata": { "name": "unifiedStorageHistoryPruner", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-03-17T10:36:38Z" }, "spec": { @@ -3280,7 +2977,7 @@ { "metadata": { "name": "unifiedStorageSearch", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-30T19:46:14Z" }, "spec": { @@ -3294,7 +2991,7 @@ { "metadata": { "name": "unifiedStorageSearchPermissionFiltering", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-01-22T11:38:37Z" }, "spec": { @@ -3309,7 +3006,7 @@ { "metadata": { "name": "unifiedStorageSearchSprinkles", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-18T17:00:54Z" }, "spec": { @@ -3323,7 +3020,7 @@ { "metadata": { "name": "unifiedStorageSearchUI", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-12-19T18:21:48Z" }, "spec": { @@ -3337,11 +3034,8 @@ { "metadata": { "name": "useScopesNavigationEndpoint", - "resourceVersion": "1744289349951", - "creationTimestamp": "2025-03-31T15:20:00Z", - "annotations": { - "grafana.app/updatedTimestamp": "2025-04-10 12:49:09.951013 +0000 UTC" - } + "resourceVersion": "1745339544057", + "creationTimestamp": "2025-03-31T15:20:00Z" }, "spec": { "description": "Use the scopes navigation endpoint instead of the dashboardbindings endpoint", @@ -3355,7 +3049,7 @@ { "metadata": { "name": "useSessionStorageForRedirection", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-09-23T09:31:23Z" }, "spec": { @@ -3368,7 +3062,7 @@ { "metadata": { "name": "wargamesTesting", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2023-09-13T18:32:01Z" }, "spec": { @@ -3380,7 +3074,7 @@ { "metadata": { "name": "xrayApplicationSignals", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2025-04-01T14:42:02Z" }, "spec": { @@ -3395,7 +3089,7 @@ { "metadata": { "name": "zanzana", - "resourceVersion": "1743693517832", + "resourceVersion": "1745339544057", "creationTimestamp": "2024-06-19T13:59:47Z" }, "spec": { diff --git a/pkg/services/secrets/kvstore/migrations/datasource_mig.go b/pkg/services/secrets/kvstore/migrations/datasource_mig.go index de09f26bc9a..c6b3a534e22 100644 --- a/pkg/services/secrets/kvstore/migrations/datasource_mig.go +++ b/pkg/services/secrets/kvstore/migrations/datasource_mig.go @@ -13,10 +13,8 @@ import ( const ( // Not set means migration has not happened secretMigrationStatusKey = "secretMigrationStatus" - // Migration happened with disableSecretCompatibility set to false + // Migration happened and secrets are stored in both locations compatibleSecretMigrationValue = "compatible" - // Migration happened with disableSecretCompatibility set to true - completeSecretMigrationValue = "complete" ) type DataSourceSecretMigrationService struct { @@ -43,17 +41,10 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error { return err } logger.Debug(fmt.Sprint("secret migration status is ", migrationStatus)) - // If this flag is true, delete secrets from the legacy secrets store as they are migrated - disableSecretsCompatibility := s.features.IsEnabled(ctx, featuremgmt.FlagDisableSecretsCompatibility) - // If migration hasn't happened, migrate to unified secrets and keep copy in legacy - // If a complete migration happened and now backwards compatibility is enabled, copy secrets back to legacy - needCompatibility := migrationStatus != compatibleSecretMigrationValue && !disableSecretsCompatibility - // If migration hasn't happened, migrate to unified secrets and delete from legacy - // If a compatible migration happened and now compatibility is disabled, delete secrets from legacy - needMigration := migrationStatus != completeSecretMigrationValue && disableSecretsCompatibility - if needCompatibility || needMigration { - logger.Debug("performing secret migration", "needs migration", needMigration, "needs compatibility", needCompatibility) + // Only migrate if it hasn't happened yet + if migrationStatus != compatibleSecretMigrationValue { + logger.Debug("performing secret migration") query := &datasources.GetAllDataSourcesQuery{} dsList, err := s.dataSourcesService.GetAllDataSources(ctx, query) if err != nil { @@ -67,7 +58,6 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error { } // Secrets are set by the update data source function if the SecureJsonData is set in the command - // Secrets are deleted by the update data source function if the disableSecretsCompatibility flag is enabled _, err = s.dataSourcesService.UpdateDataSource(ctx, &datasources.UpdateDataSourceCommand{ ID: ds.ID, OrgID: ds.OrgID, @@ -89,17 +79,11 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error { } } - var newMigStatus string - if disableSecretsCompatibility { - newMigStatus = completeSecretMigrationValue - } else { - newMigStatus = compatibleSecretMigrationValue - } - err = s.kvStore.Set(ctx, secretMigrationStatusKey, newMigStatus) + err = s.kvStore.Set(ctx, secretMigrationStatusKey, compatibleSecretMigrationValue) if err != nil { return err } - logger.Debug(fmt.Sprint("set secret migration status to ", newMigStatus)) + logger.Debug(fmt.Sprint("set secret migration status to ", compatibleSecretMigrationValue)) } return nil diff --git a/pkg/services/secrets/kvstore/migrations/datasource_mig_test.go b/pkg/services/secrets/kvstore/migrations/datasource_mig_test.go index f22d2456eb7..f7a8429114f 100644 --- a/pkg/services/secrets/kvstore/migrations/datasource_mig_test.go +++ b/pkg/services/secrets/kvstore/migrations/datasource_mig_test.go @@ -30,13 +30,10 @@ func TestMain(m *testing.M) { testsuite.Run(m) } -func SetupTestDataSourceSecretMigrationService(t *testing.T, sqlStore db.DB, kvStore kvstore.KVStore, secretsStore secretskvs.SecretsKVStore, compatibility bool) *DataSourceSecretMigrationService { +func SetupTestDataSourceSecretMigrationService(t *testing.T, sqlStore db.DB, kvStore kvstore.KVStore, secretsStore secretskvs.SecretsKVStore) *DataSourceSecretMigrationService { t.Helper() cfg := &setting.Cfg{} features := featuremgmt.WithFeatures() - if !compatibility { - features = featuremgmt.WithFeatures(featuremgmt.FlagDisableSecretsCompatibility, true) - } secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) quotaService := quotatest.New(false, nil) dsService, err := dsservice.ProvideService(sqlStore, secretsService, secretsStore, cfg, features, acmock.New(), @@ -48,76 +45,12 @@ func SetupTestDataSourceSecretMigrationService(t *testing.T, sqlStore db.DB, kvS } func TestMigrate(t *testing.T) { - t.Run("should migrate from legacy to unified without compatibility", func(t *testing.T) { - sqlStore := db.InitTestDB(t) - kvStore := kvstore.ProvideService(sqlStore) - secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) - secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger")) - migService := SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, false) - ds := dsservice.CreateStore(sqlStore, log.NewNopLogger()) - dataSourceName := "Test" - dataSourceOrg := int64(1) - _, err := ds.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ - OrgID: dataSourceOrg, - Name: dataSourceName, - Type: datasources.DS_MYSQL, - Access: datasources.DS_ACCESS_DIRECT, - URL: "http://test", - EncryptedSecureJsonData: map[string][]byte{ - "password": []byte("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"), - }, - }) - assert.NoError(t, err) - - // Check if the secret json data was added - query := &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err := ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.NotEmpty(t, dataSource.SecureJsonData) - - // Check if the migration status key is empty - value, exist, err := kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Check that the secret is not present on the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Run the migration - err = migService.Migrate(context.Background()) - assert.NoError(t, err) - - // Check if the secure json data was deleted - query = &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err = ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.Empty(t, dataSource.SecureJsonData) - - // Check if the secret was added to the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.NotEmpty(t, value) - assert.True(t, exist) - - // Check if the migration status key was set - value, exist, err = kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Equal(t, completeSecretMigrationValue, value) - assert.True(t, exist) - }) - t.Run("should migrate from legacy to unified with compatibility", func(t *testing.T) { sqlStore := db.InitTestDB(t) kvStore := kvstore.ProvideService(sqlStore) secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger")) - migService := SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, true) + migService := SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore) ds := dsservice.CreateStore(sqlStore, log.NewNopLogger()) dataSourceName := "Test" dataSourceOrg := int64(1) @@ -177,187 +110,4 @@ func TestMigrate(t *testing.T) { assert.Equal(t, compatibleSecretMigrationValue, value) assert.True(t, exist) }) - - t.Run("should replicate from unified to legacy for compatibility", func(t *testing.T) { - sqlStore := db.InitTestDB(t) - - kvStore := kvstore.ProvideService(sqlStore) - secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) - secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger")) - migService := SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, false) - ds := dsservice.CreateStore(sqlStore, log.NewNopLogger()) - - dataSourceName := "Test" - dataSourceOrg := int64(1) - - // Add test data source - _, err := ds.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ - OrgID: dataSourceOrg, - Name: dataSourceName, - Type: datasources.DS_MYSQL, - Access: datasources.DS_ACCESS_DIRECT, - URL: "http://test", - EncryptedSecureJsonData: map[string][]byte{ - "password": []byte("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"), - }, - }) - assert.NoError(t, err) - - // Check if the secret json data was added - query := &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err := ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.NotEmpty(t, dataSource.SecureJsonData) - - // Check if the migration status key is empty - value, exist, err := kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Check that the secret is not present on the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Run the migration without compatibility - err = migService.Migrate(context.Background()) - assert.NoError(t, err) - - // Check if the secure json data was deleted - query = &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err = ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.Empty(t, dataSource.SecureJsonData) - - // Check if the secret was added to the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.NotEmpty(t, value) - assert.True(t, exist) - - // Check if the migration status key was set - value, exist, err = kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Equal(t, completeSecretMigrationValue, value) - assert.True(t, exist) - - // Run the migration with compatibility - migService = SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, true) - err = migService.Migrate(context.Background()) - assert.NoError(t, err) - - // Check if the secure json data was re-added for compatibility - query = &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err = ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.NotEmpty(t, dataSource.SecureJsonData) - - // Check if the secret was added to the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.NotEmpty(t, value) - assert.True(t, exist) - - // Check if the migration status key was set - value, exist, err = kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Equal(t, compatibleSecretMigrationValue, value) - assert.True(t, exist) - }) - - t.Run("should delete from legacy to remove compatibility", func(t *testing.T) { - sqlStore := db.InitTestDB(t) - kvStore := kvstore.ProvideService(sqlStore) - secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore()) - secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger")) - migService := SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, true) - ds := dsservice.CreateStore(sqlStore, log.NewNopLogger()) - - dataSourceName := "Test" - dataSourceOrg := int64(1) - - // Add test data source - _, err := ds.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ - OrgID: dataSourceOrg, - Name: dataSourceName, - Type: datasources.DS_MYSQL, - Access: datasources.DS_ACCESS_DIRECT, - URL: "http://test", - EncryptedSecureJsonData: map[string][]byte{ - "password": []byte("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"), - }, - }) - assert.NoError(t, err) - - // Check if the secret json data was added - query := &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err := ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.NotEmpty(t, dataSource.SecureJsonData) - - // Check if the migration status key is empty - value, exist, err := kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Check that the secret is not present on the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.Empty(t, value) - assert.False(t, exist) - - // Run the migration with compatibility - err = migService.Migrate(context.Background()) - assert.NoError(t, err) - - // Check if the secure json data was maintained for compatibility - query = &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err = ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.NotEmpty(t, dataSource.SecureJsonData) - - // Check if the secret was added to the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.NotEmpty(t, value) - assert.True(t, exist) - - // Check if the migration status key was set - value, exist, err = kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Equal(t, compatibleSecretMigrationValue, value) - assert.True(t, exist) - - // Run the migration without compatibility - migService = SetupTestDataSourceSecretMigrationService(t, sqlStore, kvStore, secretsStore, false) - err = migService.Migrate(context.Background()) - assert.NoError(t, err) - - // Check if the secure json data was deleted - query = &datasources.GetDataSourceQuery{OrgID: dataSourceOrg, Name: dataSourceName} - dataSource, err = ds.GetDataSource(context.Background(), query) - assert.NoError(t, err) - assert.NotNil(t, dataSource) - assert.Empty(t, dataSource.SecureJsonData) - - // Check if the secret was added to the secret store - value, exist, err = secretsStore.Get(context.Background(), dataSourceOrg, dataSourceName, secretskvs.DataSourceSecretType) - assert.NoError(t, err) - assert.NotEmpty(t, value) - assert.True(t, exist) - - // Check if the migration status key was set - value, exist, err = kvStore.Get(context.Background(), 0, secretskvs.DataSourceSecretType, secretMigrationStatusKey) - assert.NoError(t, err) - assert.Equal(t, completeSecretMigrationValue, value) - assert.True(t, exist) - }) }