diff --git a/public/app/features/plugins/admin/components/PluginActions.tsx b/public/app/features/plugins/admin/components/PluginActions.tsx index 3bf24611fdc..220d3b93b45 100644 --- a/public/app/features/plugins/admin/components/PluginActions.tsx +++ b/public/app/features/plugins/admin/components/PluginActions.tsx @@ -34,7 +34,8 @@ export const PluginActions = ({ plugin }: Props) => { ? PluginStatus.UPDATE : PluginStatus.UNINSTALL : PluginStatus.INSTALL; - const isInstallControlsDisabled = plugin.isCore || plugin.isDisabled || !isInstallControlsEnabled(); + const isInstallControlsDisabled = + plugin.isCore || plugin.isDisabled || plugin.isProvisioned || !isInstallControlsEnabled(); return ( diff --git a/public/app/features/plugins/admin/helpers.ts b/public/app/features/plugins/admin/helpers.ts index ca8b3e712e2..2e9d9982e40 100644 --- a/public/app/features/plugins/admin/helpers.ts +++ b/public/app/features/plugins/admin/helpers.ts @@ -81,6 +81,7 @@ export function mergeLocalsAndRemotes({ } catalogPlugin.isUninstallingFromInstance = Boolean(localCounterpart) && !instancesMap.has(remotePlugin.slug); + catalogPlugin.isProvisioned = provisionedSet.has(remotePlugin.slug); } catalogPlugins.push(catalogPlugin); diff --git a/public/app/features/plugins/admin/pages/PluginDetails.test.tsx b/public/app/features/plugins/admin/pages/PluginDetails.test.tsx index 599c8ec44af..6a656c03064 100644 --- a/public/app/features/plugins/admin/pages/PluginDetails.test.tsx +++ b/public/app/features/plugins/admin/pages/PluginDetails.test.tsx @@ -355,6 +355,13 @@ describe('Plugin details page', () => { expect(await queryByRole('button', { name: /(un)?install/i })).not.toBeInTheDocument(); }); + it('should not display install / uninstall buttons for provisioned plugins', async () => { + const { queryByRole } = renderPluginDetails({ id, isProvisioned: true }); + + expect(await queryByRole('button', { name: /update/i })).not.toBeInTheDocument(); + expect(await queryByRole('button', { name: /(un)?install/i })).not.toBeInTheDocument(); + }); + it('should display install link with `config.pluginAdminExternalManageEnabled` set to true', async () => { config.pluginAdminExternalManageEnabled = true; diff --git a/public/app/features/plugins/admin/types.ts b/public/app/features/plugins/admin/types.ts index ec6be2d742c..734bc504953 100644 --- a/public/app/features/plugins/admin/types.ts +++ b/public/app/features/plugins/admin/types.ts @@ -65,6 +65,7 @@ export interface CatalogPlugin extends WithAccessControlMetadata { isUninstallingFromInstance?: boolean; isUpdatingFromInstance?: boolean; iam?: IdentityAccessManagement; + isProvisioned?: boolean; } export interface CatalogPluginDetails {