Skip to content

Commit 5f0a8db

Browse files
Merge pull request #5872 from bipuladh/noobaa_secret_fix
Bug 1842992: Fix Noobaa delay issues in creating secret
2 parents 5d355c8 + f875f24 commit 5f0a8db

File tree

1 file changed

+43
-24
lines changed
  • frontend/packages/noobaa-storage-plugin/src/components/object-bucket-claim-page

1 file changed

+43
-24
lines changed

frontend/packages/noobaa-storage-plugin/src/components/object-bucket-claim-page/secret.tsx

+43-24
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,65 @@
11
import * as React from 'react';
2-
import * as _ from 'lodash';
32
import { Base64 } from 'js-base64';
43
import { SecretValue } from '@console/internal/components/configmap-and-secret-data';
54
import { ConfigMapModel, SecretModel } from '@console/internal/models';
6-
import { k8sGet, K8sResourceKind } from '@console/internal/module/k8s';
5+
import { K8sResourceKind, SecretKind, ConfigMapKind } from '@console/internal/module/k8s';
76
import { getName, getNamespace } from '@console/shared';
87
import { SectionHeading, EmptyBox } from '@console/internal/components/utils';
8+
import { useK8sWatchResource } from '@console/internal/components/utils/k8s-watch-hook';
99
import { Button } from '@patternfly/react-core';
1010
import { EyeSlashIcon, EyeIcon } from '@patternfly/react-icons';
1111

1212
export const GetSecret: React.FC<GetSecretProps> = ({ obj }) => {
1313
const [reveal, setReveal] = React.useState(false);
14-
const [secretData, setSecretData] = React.useState([]);
1514

1615
const name = getName(obj);
1716
const namespace = getNamespace(obj);
1817

19-
React.useEffect(() => {
20-
const secret = k8sGet(SecretModel, name, namespace);
21-
const configMap = k8sGet(ConfigMapModel, name, namespace);
22-
Promise.all([secret, configMap])
23-
.then((data) => {
24-
const bucketName = _.get(data[1], 'data.BUCKET_NAME');
25-
const endpoint = `${_.get(data[1], 'data.BUCKET_HOST')}:${_.get(
26-
data[1],
27-
'data.BUCKET_PORT',
28-
)}`;
29-
const accessKey = Base64.decode(_.get(data[0], 'data.AWS_ACCESS_KEY_ID'));
30-
const secretKey = Base64.decode(_.get(data[0], 'data.AWS_SECRET_ACCESS_KEY'));
31-
const secretValues = [
18+
const [secretResource, cmResource] = React.useMemo(
19+
() => [
20+
{
21+
kind: SecretModel.kind,
22+
namespace,
23+
name,
24+
isList: false,
25+
},
26+
{
27+
kind: ConfigMapModel.kind,
28+
namespace,
29+
name,
30+
isList: false,
31+
},
32+
],
33+
[name, namespace],
34+
);
35+
36+
const [secretData, secretLoaded, secretLoadError] = useK8sWatchResource<SecretKind>(
37+
secretResource,
38+
);
39+
40+
const [configData, configLoaded, configLoadError] = useK8sWatchResource<ConfigMapKind>(
41+
cmResource,
42+
);
43+
const isLoaded = secretLoaded && configLoaded;
44+
const error = secretLoadError || configLoadError;
45+
const bucketName = configData?.data?.BUCKET_NAME;
46+
const endpoint = `${configData?.data?.BUCKET_HOST}:${configData?.data?.BUCKET_PORT}`;
47+
const accessKey = isLoaded && !error ? Base64.decode(secretData?.data?.AWS_ACCESS_KEY_ID) : '';
48+
const secretKey =
49+
isLoaded && !error ? Base64.decode(secretData?.data?.AWS_SECRET_ACCESS_KEY) : '';
50+
51+
const secretValues =
52+
isLoaded && !error
53+
? [
3254
{ field: 'Endpoint', value: endpoint },
3355
{ field: 'Bucket Name', value: bucketName },
3456
{ field: 'Access Key', value: accessKey },
3557
{ field: 'Secret Key', value: secretKey },
36-
];
37-
setSecretData(secretValues);
38-
})
39-
.catch(() => undefined);
40-
}, [name, namespace]);
58+
]
59+
: [];
4160

42-
const dl = secretData.length
43-
? secretData.reduce((acc, datum) => {
61+
const dl = secretValues.length
62+
? secretValues.reduce((acc, datum) => {
4463
const { field, value } = datum;
4564
acc.push(<dt key={`${field}-k`}>{field}</dt>);
4665
acc.push(
@@ -55,7 +74,7 @@ export const GetSecret: React.FC<GetSecretProps> = ({ obj }) => {
5574
return dl.length ? (
5675
<div className="co-m-pane__body">
5776
<SectionHeading text="Object Bucket Claim Data">
58-
{secretData.length ? (
77+
{secretValues.length ? (
5978
<Button
6079
type="button"
6180
onClick={() => setReveal(!reveal)}

0 commit comments

Comments
 (0)