diff --git a/src/renderer/components/+user-management-service-accounts/service-accounts-details.tsx b/src/renderer/components/+user-management-service-accounts/service-accounts-details.tsx index cb500469f3..f54fb4632f 100644 --- a/src/renderer/components/+user-management-service-accounts/service-accounts-details.tsx +++ b/src/renderer/components/+user-management-service-accounts/service-accounts-details.tsx @@ -15,6 +15,7 @@ import { getDetailsUrl } from "../../navigation"; import { KubeObjectDetailsProps } from "../kube-object"; import { apiManager } from "../../api/api-manager"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; +import { Icon } from "../icon"; interface Props extends KubeObjectDetailsProps { } @@ -22,21 +23,25 @@ interface Props extends KubeObjectDetailsProps { @observer export class ServiceAccountsDetails extends React.Component { @observable secrets: Secret[]; + @observable imagePullSecrets: Secret[]; @disposeOnUnmount loadSecrets = autorun(async () => { this.secrets = null; + this.imagePullSecrets = null; const { object: serviceAccount } = this.props; if (!serviceAccount) { return; } const namespace = serviceAccount.getNs(); const secrets = serviceAccount.getSecrets().map(({ name }) => { - const secret = secretsStore.getByName(name, namespace); - if (!secret) return secretsStore.load({ name, namespace }); - return secret; + return secretsStore.load({ name, namespace }); }); this.secrets = await Promise.all(secrets); + const imagePullSecrets = serviceAccount.getImagePullSecrets().map(async({ name }) => { + return secretsStore.load({ name, namespace }).catch(_err => { return this.generateDummySecretObject(name) }); + }); + this.imagePullSecrets = await Promise.all(imagePullSecrets) }) renderSecrets() { @@ -49,15 +54,46 @@ export class ServiceAccountsDetails extends React.Component { ) } + renderImagePullSecrets() { + const { imagePullSecrets } = this; + if (!imagePullSecrets) { + return + } + return this.renderSecretLinks(imagePullSecrets) + } + renderSecretLinks(secrets: Secret[]) { - return secrets.map(secret => { + return secrets.map((secret) => { + if (secret.getId() === null) { + return ( +
+ {secret.getName()} + Secret is not found} + /> +
+ ) + } return ( {secret.getName()} ) - } - ) + }) + } + + generateDummySecretObject(name: string) { + return new Secret({ + apiVersion: "v1", + kind: "Secret", + metadata: { + name: name, + uid: null, + selfLink: null, + resourceVersion: null + } + }) } render() { @@ -69,9 +105,7 @@ export class ServiceAccountsDetails extends React.Component { secret.getNs() == serviceAccount.getNs() && secret.getAnnotations().some(annot => annot == `kubernetes.io/service-account.name: ${serviceAccount.getName()}`) ) - const imagePullSecrets = serviceAccount.getImagePullSecrets().map(({ name }) => - secretsStore.getByName(name, serviceAccount.getNs()) - ) + const imagePullSecrets = serviceAccount.getImagePullSecrets() return (
@@ -83,7 +117,7 @@ export class ServiceAccountsDetails extends React.Component { } {imagePullSecrets.length > 0 && ImagePullSecrets} className="links"> - {this.renderSecretLinks(imagePullSecrets)} + {this.renderImagePullSecrets()} }