Skip to content

Commit b6f299b

Browse files
authored
feat: Show GA and SA IDs in cluster metadata (#3889)
* feat: display GA and SA ids in metadata * cleanup * fix: add placeholder * fix: import * fix jobs test
1 parent 3bae3d1 commit b6f299b

File tree

4 files changed

+46
-29
lines changed

4 files changed

+46
-29
lines changed

public/i18n/en.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ clusters:
117117
title-current-cluster: Cluster Details
118118
kyma-version: Kyma Version
119119
kubernetes-version: Kubernetes Version
120+
global-account-id: Global Account ID
121+
subaccount-id: Subaccount ID
120122
statuses:
121123
inmemory: In Memory
122124
localstorage: Local Storage

src/components/App/App.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { useResourceSchemas } from './resourceSchemas/useResourceSchemas';
2222
import { useAfterInitHook } from 'state/useAfterInitHook';
2323
import useSidebarCondensed from 'sidebar/useSidebarCondensed';
2424
import { useGetValidationEnabledSchemas } from 'state/validationEnabledSchemasAtom';
25-
import { useGetKymaResources } from 'state/kymaResourcesAtom';
2625

2726
import { SplitterElement, SplitterLayout } from '@ui5/webcomponents-react';
2827
import { showKymaCompanionState } from 'state/companion/showKymaCompanionAtom';
@@ -74,7 +73,6 @@ export default function App() {
7473
useSentry();
7574
useAppTracking();
7675
useAfterInitHook(kubeconfigIdState);
77-
useGetKymaResources();
7876

7977
const showCompanion = useRecoilValue(showKymaCompanionState);
8078

src/components/Clusters/views/ClusterOverview/ClusterDetails.js

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
import { useMemo } from 'react';
12
import { useTranslation } from 'react-i18next';
2-
import { ClusterStorageType } from '../ClusterStorageType';
3+
import { useRecoilValue } from 'recoil';
4+
35
import { useGetGardenerProvider } from './useGetGardenerProvider';
46
import { useGetVersions } from './useGetVersions';
57
import { useFeature } from 'hooks/useFeature';
8+
import { kymaResourcesAtom } from 'state/kymaResourcesAtom';
9+
10+
import { Text } from '@ui5/webcomponents-react';
611
import { DynamicPageComponent } from 'shared/components/DynamicPageComponent/DynamicPageComponent';
712
import ResourceDetailsCard from 'shared/components/ResourceDetails/ResourceDetailsCard';
8-
import { Text } from '@ui5/webcomponents-react';
913
import ClusterModulesCard from './ClusterModulesCard';
14+
import { ClusterStorageType } from '../ClusterStorageType';
15+
import { EMPTY_TEXT_PLACEHOLDER } from 'shared/constants';
1016

1117
const GardenerProvider = () => {
1218
const { t } = useTranslation();
@@ -29,7 +35,14 @@ const GardenerProvider = () => {
2935
export default function ClusterDetails({ currentCluster }) {
3036
const { t } = useTranslation();
3137
const { loading, kymaVersion, k8sVersion } = useGetVersions();
38+
const kymaResources = useRecoilValue(kymaResourcesAtom);
3239
const config = currentCluster?.config;
40+
const kymaResourceLabels = useMemo(
41+
() =>
42+
kymaResources?.items.find(kymaResource => kymaResource?.status)?.metadata
43+
.labels || kymaResources?.items[0]?.metadata?.labels,
44+
[kymaResources],
45+
);
3346

3447
return (
3548
<div className="resource-details-container">
@@ -63,6 +76,22 @@ export default function ClusterDetails({ currentCluster }) {
6376
</Text>
6477
</DynamicPageComponent.Column>
6578
<GardenerProvider />
79+
{kymaResourceLabels && (
80+
<>
81+
<DynamicPageComponent.Column
82+
title={t('clusters.overview.global-account-id')}
83+
>
84+
{kymaResourceLabels['kyma-project.io/global-account-id'] ??
85+
EMPTY_TEXT_PLACEHOLDER}
86+
</DynamicPageComponent.Column>
87+
<DynamicPageComponent.Column
88+
title={t('clusters.overview.subaccount-id')}
89+
>
90+
{kymaResourceLabels['kyma-project.io/subaccount-id'] ??
91+
EMPTY_TEXT_PLACEHOLDER}
92+
</DynamicPageComponent.Column>
93+
</>
94+
)}
6695
</>
6796
}
6897
/>

src/state/kymaResourcesAtom.ts

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,29 @@
1-
import { atom, useRecoilValue, useSetRecoilState } from 'recoil';
1+
import { atom, selector } from 'recoil';
22
import { getFetchFn } from './utils/getFetchFn';
3-
import { useEffect, useState } from 'react';
43
import { clusterState } from './clusterAtom';
54

6-
export async function useGetKymaResources() {
7-
const setKymaResources = useSetRecoilState(kymaResourcesAtom);
8-
const [fetched, setFetched] = useState(false);
9-
const cluster = useRecoilValue(clusterState);
5+
const kymaResourcesQuery = selector({
6+
key: 'kymaResourcesQuery',
7+
get: async ({ get }) => {
8+
// We need to track if cluster changes
9+
const _cluster = get(clusterState); // eslint-disable-line @typescript-eslint/no-unused-vars
10+
const fetchFn = getFetchFn(get);
1011

11-
let kymas;
12-
const fetchFn = getFetchFn(useRecoilValue);
12+
if (!fetchFn) return null;
1313

14-
useEffect(() => {
15-
setFetched(false);
16-
}, [cluster?.name]);
17-
18-
if (fetched || !fetchFn) {
19-
return;
20-
}
21-
22-
if (fetchFn) {
2314
try {
2415
const response = await fetchFn({
2516
relativeUrl:
2617
'/apis/operator.kyma-project.io/v1beta2/namespaces/kyma-system/kymas',
2718
});
28-
kymas = await response.json();
19+
return await response.json();
2920
} catch (e) {
30-
console.warn('Cannot load cluster params from the target cluster: ', e);
31-
} finally {
32-
setFetched(true);
21+
return null;
3322
}
34-
}
35-
setKymaResources(kymas);
36-
}
23+
},
24+
});
3725

3826
export const kymaResourcesAtom = atom({
3927
key: 'kymaResourcesAtom',
40-
default: null,
28+
default: kymaResourcesQuery,
4129
});

0 commit comments

Comments
 (0)