diff --git a/public/app/features/dashboard-scene/scene/ManagedDashboardNavBarBadge.tsx b/public/app/features/dashboard-scene/scene/ManagedDashboardNavBarBadge.tsx
index fe025098988..c9de2b0621f 100644
--- a/public/app/features/dashboard-scene/scene/ManagedDashboardNavBarBadge.tsx
+++ b/public/app/features/dashboard-scene/scene/ManagedDashboardNavBarBadge.tsx
@@ -1,26 +1,46 @@
-import { Badge } from '@grafana/ui';
-import { AnnoKeyManagerIdentity, AnnoKeyManagerKind, ManagerKind } from 'app/features/apiserver/types';
-import { DashboardMeta } from 'app/types/dashboard';
+import { skipToken } from '@reduxjs/toolkit/query';
-export default function ManagedDashboardNavBarBadge({ meta }: { meta: DashboardMeta }) {
- const obj = meta.k8s;
- if (!obj?.annotations) {
- return;
+import { t } from '@grafana/i18n';
+import { config } from '@grafana/runtime';
+import { Badge } from '@grafana/ui';
+import { useGetRepositoryQuery } from 'app/api/clients/provisioning/v0alpha1';
+import { ManagerKind } from 'app/features/apiserver/types';
+
+import { DashboardScene } from './DashboardScene';
+
+export const ManagedDashboardNavBarBadge = ({ dashboard }: { dashboard: DashboardScene }) => {
+ const kind = dashboard.getManagerKind();
+ const id = dashboard.getManagerIdentity();
+
+ const shouldSkipQuery = !config.featureToggles.provisioning || kind !== ManagerKind.Repo || !id;
+ const { data: repoData } = useGetRepositoryQuery(shouldSkipQuery ? skipToken : { name: id });
+
+ if (!kind) {
+ return null;
}
- let text = 'Provisioned';
- const kind = obj.annotations?.[AnnoKeyManagerKind];
- const id = obj.annotations?.[AnnoKeyManagerIdentity];
+ let text;
+
switch (kind) {
case ManagerKind.Terraform:
- text = 'Terraform';
+ text = t('dashboard-scene.managed-badge.terraform', 'Managed by: Terraform');
break;
case ManagerKind.Kubectl:
- text = 'Kubectl';
+ text = t('dashboard-scene.managed-badge.kubectl', 'Managed by: Kubectl');
break;
case ManagerKind.Plugin:
- text = `Plugin: ${id}`;
+ text = t('dashboard-scene.managed-badge.plugin', 'Managed by: Plugin {{id}}', { id });
break;
+ case ManagerKind.Repo:
+ text = t('dashboard-scene.managed-badge.repository', 'Managed by: Repository {{title}}', {
+ title: repoData?.spec?.title || id,
+ interpolation: { escapeValue: false },
+ });
+ break;
+ default:
+ console.error('Unknown kind ' + kind);
+ return null;
}
+
return ;
-}
+};
diff --git a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx
index c1ab00abf92..08793bf546f 100644
--- a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx
+++ b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx
@@ -38,7 +38,7 @@ import { isLibraryPanel } from '../utils/utils';
import { DashboardScene } from './DashboardScene';
import { GoToSnapshotOriginButton } from './GoToSnapshotOriginButton';
-import ManagedDashboardNavBarBadge from './ManagedDashboardNavBarBadge';
+import { ManagedDashboardNavBarBadge } from './ManagedDashboardNavBarBadge';
import { LeftActions } from './new-toolbar/LeftActions';
import { RightActions } from './new-toolbar/RightActions';
import { PublicDashboardBadge } from './new-toolbar/actions/PublicDashboardBadge';
@@ -145,7 +145,7 @@ export function ToolbarActions({ dashboard }: Props) {
group: 'icon-actions',
condition: true,
render: () => {
- return ;
+ return ;
},
});
}
diff --git a/public/app/features/dashboard-scene/scene/new-toolbar/LeftActions.tsx b/public/app/features/dashboard-scene/scene/new-toolbar/LeftActions.tsx
index 211870823b4..54243407057 100644
--- a/public/app/features/dashboard-scene/scene/new-toolbar/LeftActions.tsx
+++ b/public/app/features/dashboard-scene/scene/new-toolbar/LeftActions.tsx
@@ -2,8 +2,8 @@ import { ToolbarButtonRow } from '@grafana/ui';
import { dynamicDashNavActions } from '../../utils/registerDynamicDashNavAction';
import { DashboardScene } from '../DashboardScene';
+import { ManagedDashboardNavBarBadge } from '../ManagedDashboardNavBarBadge';
-import { ManagedDashboardBadge } from './actions/ManagedDashboardBadge';
import { OpenSnapshotOriginButton } from './actions/OpenSnapshotOriginButton';
import { PublicDashboardBadge } from './actions/PublicDashboardBadge';
import { StarButton } from './actions/StarButton';
@@ -40,7 +40,7 @@ export const LeftActions = ({ dashboard }: { dashboard: DashboardScene }) => {
},
{
key: 'managed-dashboard-badge',
- component: ManagedDashboardBadge,
+ component: ManagedDashboardNavBarBadge,
group: 'actions',
condition: dashboard.isManaged() && canEdit,
},
diff --git a/public/app/features/dashboard-scene/scene/new-toolbar/actions/ManagedDashboardBadge.tsx b/public/app/features/dashboard-scene/scene/new-toolbar/actions/ManagedDashboardBadge.tsx
deleted file mode 100644
index ddcafb6dca8..00000000000
--- a/public/app/features/dashboard-scene/scene/new-toolbar/actions/ManagedDashboardBadge.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Badge } from '@grafana/ui';
-import { AnnoKeyManagerIdentity, AnnoKeyManagerKind, ManagerKind } from 'app/features/apiserver/types';
-
-import { ToolbarActionProps } from '../types';
-
-export const ManagedDashboardBadge = ({ dashboard }: ToolbarActionProps) => {
- if (!dashboard.state.meta.k8s?.annotations) {
- return null;
- }
-
- let text = 'Provisioned';
- const kind = dashboard.state.meta.k8s.annotations[AnnoKeyManagerKind];
- const id = dashboard.state.meta.k8s.annotations[AnnoKeyManagerIdentity];
-
- switch (kind) {
- case ManagerKind.Terraform:
- text = 'Terraform';
- break;
- case ManagerKind.Kubectl:
- text = 'Kubectl';
- break;
- case ManagerKind.Plugin:
- text = `Plugin: ${id}`;
- break;
- case ManagerKind.Repo:
- text = 'Repository';
- break;
- }
-
- return ;
-};
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 19ebdcca999..eb14cf6082d 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -5986,6 +5986,12 @@
"usage-count_one": "Used on {{count}} dashboards",
"usage-count_other": "Used on {{count}} dashboards"
},
+ "managed-badge": {
+ "kubectl": "Managed by: Kubectl",
+ "plugin": "Managed by: Plugin {{id}}",
+ "repository": "Managed by: Repository {{title}}",
+ "terraform": "Managed by: Terraform"
+ },
"move-provisioned-dashboard-form": {
"api-error": "Failed to move dashboard",
"cancel-action": "Cancel",