diff --git a/src/common/k8s-api/endpoints/ingress-class.api.injectable.ts b/src/common/k8s-api/endpoints/ingress-class.api.injectable.ts new file mode 100644 index 0000000000..f5fa747eb7 --- /dev/null +++ b/src/common/k8s-api/endpoints/ingress-class.api.injectable.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { IngressClassApi } from "./ingress-class.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; + +const ingressClassApiInjectable = getInjectable({ + id: "ingress-class-api", + instantiate: (di) => { + return new IngressClassApi(); + }, + + injectionToken: kubeApiInjectionToken, +}); + +export default ingressClassApiInjectable; diff --git a/src/common/k8s-api/endpoints/ingress-class.api.ts b/src/common/k8s-api/endpoints/ingress-class.api.ts new file mode 100644 index 0000000000..a357f03c9e --- /dev/null +++ b/src/common/k8s-api/endpoints/ingress-class.api.ts @@ -0,0 +1,51 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { KubeObject, KubeObjectMetadata, KubeObjectScope } from "../kube-object"; +import { KubeApi } from "../kube-api"; + +export class IngressClassApi extends KubeApi { + constructor() { + super({ + objectConstructor: IngressClass, + }); + } +} + +// API docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#ingressclass-v1-networking-k8s-io +export type IngressClassMetadata = KubeObjectMetadata & { + "name": string; + "labels"?: { + [name: string]: string | undefined; + "app.kubernetes.io/component"?: "controller" + } + "annotations"?: { + [name: string]: string | undefined; + "ingressclass.kubernetes.io/is-default-class"?: "true", + } +}; + +export interface IngressClassParametersReference { + "apiGroup": string; // k8s.example.net + "scope": "Namespace" | "Cluster" + "kind": "ClusterIngressParameter" | "IngressParameter" + "name": string; // external-config-1 + "namespace"?: string; // namespaced for IngressClass must be defined in `spec.parameters.namespace` instead of `metadata.namespace` (!) +} + +export interface IngressClassSpec { + "controller": string; // example.com/ingress-controller + "parameters": IngressClassParametersReference, +} + +export interface IngressClassStatus { +} + +export class IngressClass extends KubeObject { + static readonly kind = "IngressClass"; + static readonly namespaced = true; + static readonly apiBase = "/apis/networking.k8s.io/v1/ingressclasses"; + +}