1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/api/endpoints/service.api.ts
Jari Kolehmainen db4dca3005 lens app source code
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
2020-03-15 09:46:21 +02:00

76 lines
1.7 KiB
TypeScript

import { autobind } from "../../utils";
import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
@autobind()
export class Service extends KubeObject {
static kind = "Service"
spec: {
type: string;
clusterIP: string;
externalTrafficPolicy?: string;
loadBalancerIP?: string;
sessionAffinity: string;
selector: { [key: string]: string };
ports: { name?: string; protocol: string; port: number; targetPort: number }[];
externalIPs?: string[]; // https://kubernetes.io/docs/concepts/services-networking/service/#external-ips
}
status: {
loadBalancer?: {
ingress?: {
ip?: string;
hostname?: string;
}[];
};
}
getClusterIp() {
return this.spec.clusterIP;
}
getExternalIps() {
const lb = this.getLoadBalancer();
if (lb && lb.ingress) {
return lb.ingress.map(val => val.ip || val.hostname)
}
return this.spec.externalIPs || [];
}
getType() {
return this.spec.type || "-";
}
getSelector(): string[] {
if (!this.spec.selector) return [];
return Object.entries(this.spec.selector).map(val => val.join("="));
}
getPorts(): string[] {
const ports = this.spec.ports || [];
return ports.map(({ port, protocol, targetPort }) => {
return `${port}${port === targetPort ? "" : ":" + targetPort}/${protocol}`
})
}
getLoadBalancer() {
return this.status.loadBalancer;
}
isActive() {
return this.getType() !== "LoadBalancer" || this.getExternalIps().length > 0;
}
getStatus() {
return this.isActive() ? "Active" : "Pending";
}
}
export const serviceApi = new KubeApi({
kind: Service.kind,
apiBase: "/api/v1/services",
isNamespaced: true,
objectConstructor: Service,
});