From f2ebd8df4b0407c238da11931164b2f999545afb Mon Sep 17 00:00:00 2001 From: Zaenab Date: Tue, 6 Aug 2024 19:46:35 +0530 Subject: [PATCH 1/5] feat: [M3-7685] - Show empty Kubernetes landing page with disabled create button for restricted users --- packages/api-v4/src/account/types.ts | 4 +- .../e2e/core/account/user-permissions.spec.ts | 1 + .../support/constants/user-permissions.ts | 31 ++++++----- packages/manager/src/factories/grants.ts | 8 +++ .../manager/src/features/Account/constants.ts | 1 + .../KubernetesLanding.test.tsx | 54 +++++++++++++++++++ .../KubernetesLanding/KubernetesLanding.tsx | 16 ++++-- .../KubernetesLandingEmptyState.tsx | 12 +++++ packages/manager/src/queries/kubernetes.ts | 7 ++- 9 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx diff --git a/packages/api-v4/src/account/types.ts b/packages/api-v4/src/account/types.ts index fafa09e4d3c..fae1e6d1c37 100644 --- a/packages/api-v4/src/account/types.ts +++ b/packages/api-v4/src/account/types.ts @@ -177,6 +177,7 @@ export interface Grant { } export type GlobalGrantTypes = | 'account_access' + | 'add_lke_clusters' | 'add_domains' | 'add_firewalls' | 'add_images' @@ -204,7 +205,8 @@ export type GrantType = | 'volume' | 'database' | 'firewall' - | 'vpc'; + | 'vpc' + | 'lkeCluster'; export type Grants = GlobalGrants & Record; diff --git a/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts b/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts index d8f21fa1366..551f0875da9 100644 --- a/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts +++ b/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts @@ -290,6 +290,7 @@ describe('User permission management', () => { add_volumes: true, add_vpcs: true, longview_subscription: true, + add_lke_clusters: true, }, }; diff --git a/packages/manager/cypress/support/constants/user-permissions.ts b/packages/manager/cypress/support/constants/user-permissions.ts index d6ca785951d..eb4d57f90fb 100644 --- a/packages/manager/cypress/support/constants/user-permissions.ts +++ b/packages/manager/cypress/support/constants/user-permissions.ts @@ -1,38 +1,41 @@ import { randomLabel } from 'support/util/random'; + import { grantFactory, grantsFactory } from 'src/factories/grants'; + import type { Grants } from '@linode/api-v4'; /** * User permission grants with all permissions restricted. */ export const userPermissionsGrants: Grants = grantsFactory.build({ + database: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), + domain: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), + firewall: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), global: { account_access: null, - cancel_account: false, - child_account_access: false, add_domains: false, add_firewalls: false, add_images: false, add_linodes: false, + add_lke_clusters: false, add_longview: false, add_nodebalancers: false, add_stackscripts: false, add_volumes: false, add_vpcs: false, + cancel_account: false, + child_account_access: false, longview_subscription: false, }, - database: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), - domain: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), - firewall: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), image: grantFactory.buildList(1, { label: randomLabel(), permissions: null }), linode: grantFactory.buildList(1, { label: randomLabel(), diff --git a/packages/manager/src/factories/grants.ts b/packages/manager/src/factories/grants.ts index bfa53a7de8b..2d37fbb3ee5 100644 --- a/packages/manager/src/factories/grants.ts +++ b/packages/manager/src/factories/grants.ts @@ -35,6 +35,7 @@ export const grantsFactory = Factory.Sync.makeFactory({ add_firewalls: true, add_images: true, add_linodes: true, + add_lke_clusters: true, add_longview: true, add_nodebalancers: true, add_stackscripts: true, @@ -58,6 +59,13 @@ export const grantsFactory = Factory.Sync.makeFactory({ permissions: 'read_only', }, ], + lkeCluster: [ + { + id: 123, + label: 'example-entity', + permissions: 'read_only', + }, + ], longview: [ { id: 123, diff --git a/packages/manager/src/features/Account/constants.ts b/packages/manager/src/features/Account/constants.ts index 1a685b2d4ce..29faf6df7cf 100644 --- a/packages/manager/src/features/Account/constants.ts +++ b/packages/manager/src/features/Account/constants.ts @@ -9,6 +9,7 @@ export const grantTypeMap = { firewall: 'Firewalls', image: 'Images', linode: 'Linodes', + lkeCluster: 'Clusters', longview: 'Longview Clients', nodebalancer: 'NodeBalancers', placementGroups: 'Placement Groups', diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx new file mode 100644 index 00000000000..1cce137f9e4 --- /dev/null +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx @@ -0,0 +1,54 @@ +import { render, waitForElementToBeRemoved } from '@testing-library/react'; +import * as React from 'react'; + +import { wrapWithTheme } from 'src/utilities/testHelpers'; + +import { KubernetesLanding } from './KubernetesLanding'; + +const queryMocks = vi.hoisted(() => ({ + useProfile: vi.fn().mockReturnValue({ data: { restricted: true } }), +})); + +vi.mock('src/queries/profile/profile', async () => { + const actual = await vi.importActual('src/queries/profile/profile'); + return { + ...actual, + useProfile: queryMocks.useProfile, + }; +}); + +describe('Kubernetes Landing', () => { + afterEach(() => { + vi.resetAllMocks(); + }); + it('should have the "Create Cluster" button disabled for restricted users', async () => { + queryMocks.useProfile.mockReturnValue({ data: { restricted: true } }); + + const { container } = render(wrapWithTheme()); + + const createClusterButton = container.querySelector('button'); + + expect(createClusterButton).toBeInTheDocument(); + expect(createClusterButton).toHaveTextContent('Create Cluster'); + expect(createClusterButton).toBeDisabled(); + }); + + it('should have the "Create Cluster" button enabled for users with full access', async () => { + queryMocks.useProfile.mockReturnValue({ data: { restricted: false } }); + + const loadingTestId = 'circle-progress'; + + const { container, getByTestId } = render( + wrapWithTheme() + ); + + expect(getByTestId(loadingTestId)).toBeInTheDocument(); + await waitForElementToBeRemoved(getByTestId(loadingTestId)); + + const createClusterButton = container.querySelector('button'); + + expect(createClusterButton).toBeInTheDocument(); + expect(createClusterButton).toHaveTextContent('Create Cluster'); + expect(createClusterButton).not.toBeDisabled(); + }); +}); diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx index 0fcf4cf75cb..5225baf7d70 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx @@ -24,6 +24,7 @@ import { Typography } from 'src/components/Typography'; import { useOrder } from 'src/hooks/useOrder'; import { usePagination } from 'src/hooks/usePagination'; import { useKubernetesClustersQuery } from 'src/queries/kubernetes'; +import { useProfile } from 'src/queries/profile/profile'; import { getErrorStringOrDefault } from 'src/utilities/errorUtils'; import { KubernetesClusterRow } from '../ClusterList/KubernetesClusterRow'; @@ -92,14 +93,21 @@ export const KubernetesLanding = () => { ['+order_by']: orderBy, }; - const { data, error, isLoading } = useKubernetesClustersQuery( + const { data: profile } = useProfile(); + + const isRestricted = profile?.restricted ?? false; + + const { data, error, fetchStatus, isLoading } = useKubernetesClustersQuery( { page: pagination.page, page_size: pagination.pageSize, }, - filter + filter, + !isRestricted ); + const showLoader = isLoading && fetchStatus !== 'idle'; + const { isDiskEncryptionFeatureEnabled, } = useIsDiskEncryptionFeatureEnabled(); @@ -150,11 +158,11 @@ export const KubernetesLanding = () => { ); } - if (isLoading) { + if (showLoader) { return ; } - if (data?.results === 0) { + if (isRestricted || data?.results === 0) { return ; } diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx index b9d0d131603..d0d0ae08305 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx @@ -3,6 +3,8 @@ import { useHistory } from 'react-router-dom'; import KubernetesSvg from 'src/assets/icons/entityIcons/kubernetes.svg'; import { ResourcesSection } from 'src/components/EmptyLandingPageResources/ResourcesSection'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { sendEvent } from 'src/utilities/analytics/utils'; import { @@ -15,11 +17,16 @@ import { export const KubernetesEmptyState = () => { const { push } = useHistory(); + const isRestricted = useRestrictedGlobalGrantCheck({ + globalGrantType: 'add_lke_clusters', + }); + return ( { sendEvent({ action: 'Click:button', @@ -28,6 +35,11 @@ export const KubernetesEmptyState = () => { }); push('/kubernetes/create'); }, + tooltipText: getRestrictedResourceText({ + action: 'create', + isSingular: false, + resourceType: 'Clusters', + }), }, ]} gettingStartedGuidesData={gettingStartedGuides} diff --git a/packages/manager/src/queries/kubernetes.ts b/packages/manager/src/queries/kubernetes.ts index 39048c38627..66b70b73fb9 100644 --- a/packages/manager/src/queries/kubernetes.ts +++ b/packages/manager/src/queries/kubernetes.ts @@ -93,9 +93,14 @@ export const kubernetesQueries = createQueryKeys('kubernetes', { }, }); -export const useKubernetesClustersQuery = (params: Params, filter: Filter) => { +export const useKubernetesClustersQuery = ( + params: Params, + filter: Filter, + enabled = true +) => { return useQuery, APIError[]>({ ...kubernetesQueries.lists._ctx.paginated(params, filter), + enabled, keepPreviousData: true, }); }; From 0e72d2203e8991db348fc2bd5e8f94e3bc89ed40 Mon Sep 17 00:00:00 2001 From: Zaenab Date: Wed, 7 Aug 2024 11:51:03 +0530 Subject: [PATCH 2/5] fixes --- packages/api-v4/src/account/types.ts | 1 - .../e2e/core/account/user-permissions.spec.ts | 1 - .../support/constants/user-permissions.ts | 31 +++++++++---------- packages/manager/src/factories/grants.ts | 1 - .../KubernetesLanding/KubernetesLanding.tsx | 2 +- .../KubernetesLandingEmptyState.tsx | 13 ++++---- 6 files changed, 22 insertions(+), 27 deletions(-) diff --git a/packages/api-v4/src/account/types.ts b/packages/api-v4/src/account/types.ts index fae1e6d1c37..99b27cbda2a 100644 --- a/packages/api-v4/src/account/types.ts +++ b/packages/api-v4/src/account/types.ts @@ -177,7 +177,6 @@ export interface Grant { } export type GlobalGrantTypes = | 'account_access' - | 'add_lke_clusters' | 'add_domains' | 'add_firewalls' | 'add_images' diff --git a/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts b/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts index 551f0875da9..d8f21fa1366 100644 --- a/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts +++ b/packages/manager/cypress/e2e/core/account/user-permissions.spec.ts @@ -290,7 +290,6 @@ describe('User permission management', () => { add_volumes: true, add_vpcs: true, longview_subscription: true, - add_lke_clusters: true, }, }; diff --git a/packages/manager/cypress/support/constants/user-permissions.ts b/packages/manager/cypress/support/constants/user-permissions.ts index eb4d57f90fb..d6ca785951d 100644 --- a/packages/manager/cypress/support/constants/user-permissions.ts +++ b/packages/manager/cypress/support/constants/user-permissions.ts @@ -1,41 +1,38 @@ import { randomLabel } from 'support/util/random'; - import { grantFactory, grantsFactory } from 'src/factories/grants'; - import type { Grants } from '@linode/api-v4'; /** * User permission grants with all permissions restricted. */ export const userPermissionsGrants: Grants = grantsFactory.build({ - database: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), - domain: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), - firewall: grantFactory.buildList(1, { - label: randomLabel(), - permissions: null, - }), global: { account_access: null, + cancel_account: false, + child_account_access: false, add_domains: false, add_firewalls: false, add_images: false, add_linodes: false, - add_lke_clusters: false, add_longview: false, add_nodebalancers: false, add_stackscripts: false, add_volumes: false, add_vpcs: false, - cancel_account: false, - child_account_access: false, longview_subscription: false, }, + database: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), + domain: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), + firewall: grantFactory.buildList(1, { + label: randomLabel(), + permissions: null, + }), image: grantFactory.buildList(1, { label: randomLabel(), permissions: null }), linode: grantFactory.buildList(1, { label: randomLabel(), diff --git a/packages/manager/src/factories/grants.ts b/packages/manager/src/factories/grants.ts index 2d37fbb3ee5..d25e174f167 100644 --- a/packages/manager/src/factories/grants.ts +++ b/packages/manager/src/factories/grants.ts @@ -35,7 +35,6 @@ export const grantsFactory = Factory.Sync.makeFactory({ add_firewalls: true, add_images: true, add_linodes: true, - add_lke_clusters: true, add_longview: true, add_nodebalancers: true, add_stackscripts: true, diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx index 5225baf7d70..d6ac8641b35 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx @@ -163,7 +163,7 @@ export const KubernetesLanding = () => { } if (isRestricted || data?.results === 0) { - return ; + return ; } return ( diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx index d0d0ae08305..789c55f1c7e 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx @@ -4,7 +4,6 @@ import { useHistory } from 'react-router-dom'; import KubernetesSvg from 'src/assets/icons/entityIcons/kubernetes.svg'; import { ResourcesSection } from 'src/components/EmptyLandingPageResources/ResourcesSection'; import { getRestrictedResourceText } from 'src/features/Account/utils'; -import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { sendEvent } from 'src/utilities/analytics/utils'; import { @@ -14,12 +13,14 @@ import { youtubeLinkData, } from './KubernetesLandingEmptyStateData'; -export const KubernetesEmptyState = () => { - const { push } = useHistory(); +interface Props { + isRestricted: boolean; +} + +export const KubernetesEmptyState = (props: Props) => { + const { isRestricted = false } = props; - const isRestricted = useRestrictedGlobalGrantCheck({ - globalGrantType: 'add_lke_clusters', - }); + const { push } = useHistory(); return ( Date: Wed, 7 Aug 2024 11:59:11 +0530 Subject: [PATCH 3/5] fixes --- packages/api-v4/src/account/types.ts | 3 +-- packages/manager/src/factories/grants.ts | 7 ------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/api-v4/src/account/types.ts b/packages/api-v4/src/account/types.ts index 99b27cbda2a..fafa09e4d3c 100644 --- a/packages/api-v4/src/account/types.ts +++ b/packages/api-v4/src/account/types.ts @@ -204,8 +204,7 @@ export type GrantType = | 'volume' | 'database' | 'firewall' - | 'vpc' - | 'lkeCluster'; + | 'vpc'; export type Grants = GlobalGrants & Record; diff --git a/packages/manager/src/factories/grants.ts b/packages/manager/src/factories/grants.ts index d25e174f167..bfa53a7de8b 100644 --- a/packages/manager/src/factories/grants.ts +++ b/packages/manager/src/factories/grants.ts @@ -58,13 +58,6 @@ export const grantsFactory = Factory.Sync.makeFactory({ permissions: 'read_only', }, ], - lkeCluster: [ - { - id: 123, - label: 'example-entity', - permissions: 'read_only', - }, - ], longview: [ { id: 123, From 3f5bd8c251ceef6668d09d5289f770d1a0606cf7 Mon Sep 17 00:00:00 2001 From: Zaenab Date: Wed, 7 Aug 2024 18:51:29 +0530 Subject: [PATCH 4/5] fixes & added changeset --- packages/manager/.changeset/pr-10756-added-1723036827057.md | 5 +++++ .../Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx | 2 +- .../Kubernetes/KubernetesLanding/KubernetesLanding.tsx | 6 ++---- 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 packages/manager/.changeset/pr-10756-added-1723036827057.md diff --git a/packages/manager/.changeset/pr-10756-added-1723036827057.md b/packages/manager/.changeset/pr-10756-added-1723036827057.md new file mode 100644 index 00000000000..20f6778760d --- /dev/null +++ b/packages/manager/.changeset/pr-10756-added-1723036827057.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Added +--- + +Empty Kubernetes landing page with the 'Create Cluster' button disabled for restricted users ([#10756](https://github.com/linode/manager/pull/10756)) diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx index 1cce137f9e4..2a92378e3bc 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx @@ -21,7 +21,7 @@ describe('Kubernetes Landing', () => { afterEach(() => { vi.resetAllMocks(); }); - it('should have the "Create Cluster" button disabled for restricted users', async () => { + it('should have the "Create Cluster" button disabled for restricted users', () => { queryMocks.useProfile.mockReturnValue({ data: { restricted: true } }); const { container } = render(wrapWithTheme()); diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx index d6ac8641b35..4269a6fd1dc 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.tsx @@ -97,7 +97,7 @@ export const KubernetesLanding = () => { const isRestricted = profile?.restricted ?? false; - const { data, error, fetchStatus, isLoading } = useKubernetesClustersQuery( + const { data, error, isFetching } = useKubernetesClustersQuery( { page: pagination.page, page_size: pagination.pageSize, @@ -106,8 +106,6 @@ export const KubernetesLanding = () => { !isRestricted ); - const showLoader = isLoading && fetchStatus !== 'idle'; - const { isDiskEncryptionFeatureEnabled, } = useIsDiskEncryptionFeatureEnabled(); @@ -158,7 +156,7 @@ export const KubernetesLanding = () => { ); } - if (showLoader) { + if (isFetching) { return ; } From b807dcf99416ba2d8b9691420ab403e2b94a17aa Mon Sep 17 00:00:00 2001 From: Zaenab Date: Thu, 8 Aug 2024 10:10:29 +0530 Subject: [PATCH 5/5] Address PR review comments --- packages/manager/src/features/Account/constants.ts | 2 +- .../KubernetesLanding/KubernetesLanding.test.tsx | 10 ++++------ .../KubernetesLanding/KubernetesLandingEmptyState.tsx | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/manager/src/features/Account/constants.ts b/packages/manager/src/features/Account/constants.ts index 29faf6df7cf..e71cdfcb359 100644 --- a/packages/manager/src/features/Account/constants.ts +++ b/packages/manager/src/features/Account/constants.ts @@ -9,7 +9,7 @@ export const grantTypeMap = { firewall: 'Firewalls', image: 'Images', linode: 'Linodes', - lkeCluster: 'Clusters', + lkeCluster: 'LKE Clusters', // Note: Not included in the user's grants returned from the API. longview: 'Longview Clients', nodebalancer: 'NodeBalancers', placementGroups: 'Placement Groups', diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx index 2a92378e3bc..6decff0fca3 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLanding.test.tsx @@ -1,7 +1,7 @@ -import { render, waitForElementToBeRemoved } from '@testing-library/react'; +import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { wrapWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { KubernetesLanding } from './KubernetesLanding'; @@ -24,7 +24,7 @@ describe('Kubernetes Landing', () => { it('should have the "Create Cluster" button disabled for restricted users', () => { queryMocks.useProfile.mockReturnValue({ data: { restricted: true } }); - const { container } = render(wrapWithTheme()); + const { container } = renderWithTheme(); const createClusterButton = container.querySelector('button'); @@ -38,9 +38,7 @@ describe('Kubernetes Landing', () => { const loadingTestId = 'circle-progress'; - const { container, getByTestId } = render( - wrapWithTheme() - ); + const { container, getByTestId } = renderWithTheme(); expect(getByTestId(loadingTestId)).toBeInTheDocument(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx index 789c55f1c7e..915ac7726b0 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesLanding/KubernetesLandingEmptyState.tsx @@ -39,7 +39,7 @@ export const KubernetesEmptyState = (props: Props) => { tooltipText: getRestrictedResourceText({ action: 'create', isSingular: false, - resourceType: 'Clusters', + resourceType: 'LKE Clusters', }), }, ]}