import "./network-policy-details.scss" import get from "lodash/get"; import React, { Fragment } from "react"; import { t, Trans } from "@lingui/macro"; import { DrawerItem, DrawerTitle } from "../drawer"; import { IPolicyEgress, IPolicyIngress, IPolicyIpBlock, IPolicySelector, NetworkPolicy, networkPolicyApi } from "../../api/endpoints/network-policy.api"; import { Badge } from "../badge"; import { SubTitle } from "../layout/sub-title"; import { KubeEventDetails } from "../+events/kube-event-details"; import { observer } from "mobx-react"; import { KubeObjectDetailsProps } from "../kube-object"; import { _i18n } from "../../i18n"; import { apiManager } from "../../api/api-manager"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; interface Props extends KubeObjectDetailsProps { } @observer export class NetworkPolicyDetails extends React.Component { renderIngressFrom(ingress: IPolicyIngress) { const { from } = ingress; if (!from) return null; return ( <> From}/> {from.map(item => Object.keys(item).map(key => { const data = get(item, key) if (key === "ipBlock") { const { cidr, except } = data as IPolicyIpBlock; if (!cidr) return return ( cidr: {cidr}, {" "} {except && `except: ${except.join(", ")}` } ) } const selector: IPolicySelector = data if (selector.matchLabels) { return ( { Object .entries(selector.matchLabels) .map(data => data.join(": ")) .join(", ") } ) } else { return ((empty)); } }) )} ); } renderEgressTo(egress: IPolicyEgress) { const { to } = egress; if (!to) return null; return ( <> To}/> {to.map(item => { const { ipBlock } = item if (!ipBlock) return const { cidr, except } = ipBlock if (!cidr) return return ( cidr: {cidr}, {" "} {except && `except: ${except.join(", ")}` } ) })} ); } render() { const { object: policy } = this.props; if (!policy) { return null; } const { ingress, egress } = policy.spec; const selector = policy.getMatchLabels(); return (
Pod Selector} labelsOnly={selector.length > 0}> {selector.length > 0 ? policy.getMatchLabels().map(label => ) : _i18n._(t`(empty) (Allowing the specific traffic to all pods in this namespace)`) } {ingress && ( <> {ingress.map((ingress, i) => { const { ports } = ingress; return ( Ports}> {ports && ports.map(({ port, protocol }) => `${protocol || ""}:${port || ""}`).join(", ")} {this.renderIngressFrom(ingress)} ) })} )} {egress && ( <> Egress}/> {egress.map((egress, i) => { const { ports } = egress; return ( Ports}> {ports && ports.map(({ port, protocol }) => `${protocol || ""}:${port || ""}`).join(", ")} {this.renderEgressTo(egress)} ) })} )}
); } } apiManager.registerViews(networkPolicyApi, { Details: NetworkPolicyDetails })