import "./service-accounts-details.scss"; import React from "react"; import { autorun, observable } from "mobx"; import { Trans } from "@lingui/macro"; import { Spinner } from "../spinner"; import { ServiceAccountsSecret } from "./service-accounts-secret"; import { DrawerItem, DrawerTitle } from "../drawer"; import { disposeOnUnmount, observer } from "mobx-react"; import { secretsStore } from "../+config-secrets/secrets.store"; import { Link } from "react-router-dom"; import { Secret, ServiceAccount, serviceAccountsApi } from "../../api/endpoints"; import { KubeEventDetails } from "../+events/kube-event-details"; 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 { } @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 }) => { 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() { const { secrets } = this; if (!secrets) { return } return secrets.map(secret => ) } renderImagePullSecrets() { const { imagePullSecrets } = this; if (!imagePullSecrets) { return } return this.renderSecretLinks(imagePullSecrets) } renderSecretLinks(secrets: 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() { const { object: serviceAccount } = this.props; if (!serviceAccount) { return null; } const tokens = secretsStore.items.filter(secret => secret.getNs() == serviceAccount.getNs() && secret.getAnnotations().some(annot => annot == `kubernetes.io/service-account.name: ${serviceAccount.getName()}`) ) const imagePullSecrets = serviceAccount.getImagePullSecrets() return (
{tokens.length > 0 && Tokens} className="links"> {this.renderSecretLinks(tokens)} } {imagePullSecrets.length > 0 && ImagePullSecrets} className="links"> {this.renderImagePullSecrets()} } Mountable secrets}/>
{this.renderSecrets()}
) } } apiManager.registerViews(serviceAccountsApi, { Details: ServiceAccountsDetails })