Unverified Commit 1ce2e727 authored by Sebastian Malton's avatar Sebastian Malton Committed by GitHub
Browse files

Fix crash in IngressDetails (#4267)


* Fix crash in IngressDetails

- Adds check in Ingress.getServiceNamePort() for a
  .spec.defaultBackend.resource instead of .spec.defaultBackend.service
Signed-off-by: default avatarSebastian Malton <sebastian@malton.name>

* remove undefined
Signed-off-by: default avatarSebastian Malton <sebastian@malton.name>

* Add comment about RequireExactlyOne
Signed-off-by: default avatarSebastian Malton <sebastian@malton.name>
parent 142610ae
Showing with 14 additions and 8 deletions
+14 -8
...@@ -25,6 +25,7 @@ import { IMetrics, metricsApi } from "./metrics.api"; ...@@ -25,6 +25,7 @@ import { IMetrics, metricsApi } from "./metrics.api";
import { KubeApi } from "../kube-api"; import { KubeApi } from "../kube-api";
import type { KubeJsonApiData } from "../kube-json-api"; import type { KubeJsonApiData } from "../kube-json-api";
import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing";
import type { RequireExactlyOne } from "type-fest";
export class IngressApi extends KubeApi<Ingress> { export class IngressApi extends KubeApi<Ingress> {
} }
...@@ -58,7 +59,7 @@ export interface ILoadBalancerIngress { ...@@ -58,7 +59,7 @@ export interface ILoadBalancerIngress {
// extensions/v1beta1 // extensions/v1beta1
interface IExtensionsBackend { interface IExtensionsBackend {
serviceName: string; serviceName: string;
servicePort: number; servicePort: number | string;
} }
// networking.k8s.io/v1 // networking.k8s.io/v1
...@@ -101,14 +102,18 @@ export interface Ingress { ...@@ -101,14 +102,18 @@ export interface Ingress {
}[]; }[];
// extensions/v1beta1 // extensions/v1beta1
backend?: IExtensionsBackend; backend?: IExtensionsBackend;
// networking.k8s.io/v1 /**
defaultBackend?: INetworkingBackend & { * The default backend which is exactly on of:
* - service
* - resource
*/
defaultBackend?: RequireExactlyOne<INetworkingBackend & {
resource: { resource: {
apiGroup: string; apiGroup: string;
kind: string; kind: string;
name: string; name: string;
} }
} }>
}; };
status: { status: {
loadBalancer: { loadBalancer: {
...@@ -153,10 +158,11 @@ export class Ingress extends KubeObject { ...@@ -153,10 +158,11 @@ export class Ingress extends KubeObject {
return routes; return routes;
} }
getServiceNamePort() { getServiceNamePort(): IExtensionsBackend {
const { spec } = this; const { spec: { backend, defaultBackend } = {}} = this;
const serviceName = spec?.defaultBackend?.service.name ?? spec?.backend?.serviceName;
const servicePort = spec?.defaultBackend?.service.port.number ?? spec?.defaultBackend?.service.port.name ?? spec?.backend?.servicePort; const serviceName = defaultBackend?.service?.name ?? backend?.serviceName;
const servicePort = defaultBackend?.service?.port.number ?? defaultBackend?.service?.port.name ?? backend?.servicePort;
return { return {
serviceName, serviceName,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment