From dcb344afcb7018ce7ca08bf1307c6a3a9b6ea58b Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 26 Jul 2022 13:24:30 +0300 Subject: [PATCH] Introduce a way to get KubeApi with selfLink using DI Signed-off-by: Janne Savolainen --- .../cluster-role-binding.api.injectable.ts | 3 +++ .../endpoints/cluster-role.api.injectable.ts | 3 +++ .../endpoints/cluster.api.injectable.ts | 3 +++ .../component-status.api.injectable.ts | 3 +++ .../endpoints/config-map.api.injectable.ts | 3 +++ .../endpoints/cron-job.api.injectable.ts | 3 +++ ...stom-resource-definition.api.injectable.ts | 3 +++ .../endpoints/daemon-set.api.injectable.ts | 3 +++ .../endpoints/deployment.api.injectable.ts | 3 +++ .../endpoints/endpoint.api.injectable.ts | 3 +++ .../endpoints/events.api.injectable.ts | 3 +++ ...orizontal-pod-autoscaler.api.injectable.ts | 3 +++ .../endpoints/ingress.api.injectable.ts | 3 +++ .../k8s-api/endpoints/job.api.injectable.ts | 3 +++ .../endpoints/limit-range.api.injectable.ts | 3 +++ .../endpoints/namespace.api.injectable.ts | 4 +++ .../network-policy.api.injectable.ts | 3 +++ .../k8s-api/endpoints/node.api.injectable.ts | 3 +++ .../persistent-volume-claim.api.injectable.ts | 3 +++ .../persistent-volume.api.injectable.ts | 3 +++ .../pod-disruption-budget.api.injectable.ts | 3 +++ .../endpoints/pod-metrics.api.injectable.ts | 3 +++ .../pod-security-policy.api.injectable.ts | 3 +++ .../k8s-api/endpoints/pod.api.injectable.ts | 4 +++ .../priority-class.api.injectable.ts | 3 +++ .../endpoints/replica-set.api.injectable.ts | 3 +++ .../resource-quota.api.injectable.ts | 3 +++ .../endpoints/role-binding.api.injectable.ts | 3 +++ .../k8s-api/endpoints/role.api.injectable.ts | 3 +++ .../endpoints/secret.api.injectable.ts | 3 +++ ...lf-subject-rules-reviews.api.injectable.ts | 3 +++ .../service-account.api.injectable.ts | 3 +++ .../endpoints/service.api.injectable.ts | 3 +++ .../endpoints/stateful-set.api.injectable.ts | 3 +++ .../endpoints/storage-class.api.injectable.ts | 3 +++ .../get-kube-api-from-path.injectable.ts | 26 +++++++++++++++++++ .../kube-api/kube-api-injection-token.ts | 10 +++++++ 37 files changed, 143 insertions(+) create mode 100644 src/common/k8s-api/kube-api/get-kube-api-from-path.injectable.ts create mode 100644 src/common/k8s-api/kube-api/kube-api-injection-token.ts diff --git a/src/common/k8s-api/endpoints/cluster-role-binding.api.injectable.ts b/src/common/k8s-api/endpoints/cluster-role-binding.api.injectable.ts index c06f3baaff..38ba76d661 100644 --- a/src/common/k8s-api/endpoints/cluster-role-binding.api.injectable.ts +++ b/src/common/k8s-api/endpoints/cluster-role-binding.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ClusterRoleBindingApi } from "./cluster-role-binding.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const clusterRoleBindingApiInjectable = getInjectable({ id: "cluster-role-binding-api", @@ -14,6 +15,8 @@ const clusterRoleBindingApiInjectable = getInjectable({ return new ClusterRoleBindingApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default clusterRoleBindingApiInjectable; diff --git a/src/common/k8s-api/endpoints/cluster-role.api.injectable.ts b/src/common/k8s-api/endpoints/cluster-role.api.injectable.ts index 19a8f83542..9b56bc2559 100644 --- a/src/common/k8s-api/endpoints/cluster-role.api.injectable.ts +++ b/src/common/k8s-api/endpoints/cluster-role.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ClusterRoleApi } from "./cluster-role.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const clusterRoleApiInjectable = getInjectable({ id: "cluster-role-api", @@ -14,6 +15,8 @@ const clusterRoleApiInjectable = getInjectable({ return new ClusterRoleApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default clusterRoleApiInjectable; diff --git a/src/common/k8s-api/endpoints/cluster.api.injectable.ts b/src/common/k8s-api/endpoints/cluster.api.injectable.ts index fd82ae93f3..8d51e630ee 100644 --- a/src/common/k8s-api/endpoints/cluster.api.injectable.ts +++ b/src/common/k8s-api/endpoints/cluster.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ClusterApi } from "./cluster.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const clusterApiInjectable = getInjectable({ id: "cluster-api", @@ -14,6 +15,8 @@ const clusterApiInjectable = getInjectable({ return new ClusterApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default clusterApiInjectable; diff --git a/src/common/k8s-api/endpoints/component-status.api.injectable.ts b/src/common/k8s-api/endpoints/component-status.api.injectable.ts index fbe4b7f176..395c825401 100644 --- a/src/common/k8s-api/endpoints/component-status.api.injectable.ts +++ b/src/common/k8s-api/endpoints/component-status.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ComponentStatusApi } from "./component-status.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const componentStatusApiInjectable = getInjectable({ id: "component-status-api", @@ -14,6 +15,8 @@ const componentStatusApiInjectable = getInjectable({ return new ComponentStatusApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default componentStatusApiInjectable; diff --git a/src/common/k8s-api/endpoints/config-map.api.injectable.ts b/src/common/k8s-api/endpoints/config-map.api.injectable.ts index 715e1ba728..d643849f70 100644 --- a/src/common/k8s-api/endpoints/config-map.api.injectable.ts +++ b/src/common/k8s-api/endpoints/config-map.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ConfigMapApi } from "./config-map.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const configMapApiInjectable = getInjectable({ id: "config-map-api", @@ -14,6 +15,8 @@ const configMapApiInjectable = getInjectable({ return new ConfigMapApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default configMapApiInjectable; diff --git a/src/common/k8s-api/endpoints/cron-job.api.injectable.ts b/src/common/k8s-api/endpoints/cron-job.api.injectable.ts index 9390d5d4c8..a22909861e 100644 --- a/src/common/k8s-api/endpoints/cron-job.api.injectable.ts +++ b/src/common/k8s-api/endpoints/cron-job.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { CronJobApi } from "./cron-job.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const cronJobApiInjectable = getInjectable({ id: "cron-job-api", @@ -14,6 +15,8 @@ const cronJobApiInjectable = getInjectable({ return new CronJobApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default cronJobApiInjectable; diff --git a/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts b/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts index abe728850c..c441b07c3e 100644 --- a/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts +++ b/src/common/k8s-api/endpoints/custom-resource-definition.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { CustomResourceDefinitionApi } from "./custom-resource-definition.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const customResourceDefinitionApiInjectable = getInjectable({ id: "custom-resource-definition-api", @@ -14,6 +15,8 @@ const customResourceDefinitionApiInjectable = getInjectable({ return new CustomResourceDefinitionApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default customResourceDefinitionApiInjectable; diff --git a/src/common/k8s-api/endpoints/daemon-set.api.injectable.ts b/src/common/k8s-api/endpoints/daemon-set.api.injectable.ts index 346742c996..a1e1d65084 100644 --- a/src/common/k8s-api/endpoints/daemon-set.api.injectable.ts +++ b/src/common/k8s-api/endpoints/daemon-set.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { DaemonSetApi } from "./daemon-set.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const daemonSetApiInjectable = getInjectable({ id: "daemon-set-api", @@ -14,6 +15,8 @@ const daemonSetApiInjectable = getInjectable({ return new DaemonSetApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default daemonSetApiInjectable; diff --git a/src/common/k8s-api/endpoints/deployment.api.injectable.ts b/src/common/k8s-api/endpoints/deployment.api.injectable.ts index 5b94d949aa..26c98c39e6 100644 --- a/src/common/k8s-api/endpoints/deployment.api.injectable.ts +++ b/src/common/k8s-api/endpoints/deployment.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { DeploymentApi } from "./deployment.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const deploymentApiInjectable = getInjectable({ id: "deployment-api", @@ -14,6 +15,8 @@ const deploymentApiInjectable = getInjectable({ return new DeploymentApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default deploymentApiInjectable; diff --git a/src/common/k8s-api/endpoints/endpoint.api.injectable.ts b/src/common/k8s-api/endpoints/endpoint.api.injectable.ts index 44a6595b6c..79a57cd3e7 100644 --- a/src/common/k8s-api/endpoints/endpoint.api.injectable.ts +++ b/src/common/k8s-api/endpoints/endpoint.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { EndpointsApi } from "./endpoint.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const endpointsApiInjectable = getInjectable({ id: "endpoints-api", @@ -14,6 +15,8 @@ const endpointsApiInjectable = getInjectable({ return new EndpointsApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default endpointsApiInjectable; diff --git a/src/common/k8s-api/endpoints/events.api.injectable.ts b/src/common/k8s-api/endpoints/events.api.injectable.ts index c4fbe81224..83f0697d31 100644 --- a/src/common/k8s-api/endpoints/events.api.injectable.ts +++ b/src/common/k8s-api/endpoints/events.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { KubeEventApi } from "./events.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const kubeEventApiInjectable = getInjectable({ id: "kube-event-api", @@ -14,6 +15,8 @@ const kubeEventApiInjectable = getInjectable({ return new KubeEventApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default kubeEventApiInjectable; diff --git a/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts index 70b6458456..7449053661 100644 --- a/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts +++ b/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { HorizontalPodAutoscalerApi } from "./horizontal-pod-autoscaler.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const horizontalPodAutoscalerApiInjectable = getInjectable({ id: "horizontal-pod-autoscaler-api", @@ -14,6 +15,8 @@ const horizontalPodAutoscalerApiInjectable = getInjectable({ return new HorizontalPodAutoscalerApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default horizontalPodAutoscalerApiInjectable; diff --git a/src/common/k8s-api/endpoints/ingress.api.injectable.ts b/src/common/k8s-api/endpoints/ingress.api.injectable.ts index ca280508b2..350f8824e4 100644 --- a/src/common/k8s-api/endpoints/ingress.api.injectable.ts +++ b/src/common/k8s-api/endpoints/ingress.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { IngressApi } from "./ingress.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const ingressApiInjectable = getInjectable({ id: "ingress-api", @@ -14,6 +15,8 @@ const ingressApiInjectable = getInjectable({ return new IngressApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default ingressApiInjectable; diff --git a/src/common/k8s-api/endpoints/job.api.injectable.ts b/src/common/k8s-api/endpoints/job.api.injectable.ts index c0bbe9161e..a9c4252e59 100644 --- a/src/common/k8s-api/endpoints/job.api.injectable.ts +++ b/src/common/k8s-api/endpoints/job.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { JobApi } from "./job.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const jobApiInjectable = getInjectable({ id: "job-api", @@ -14,6 +15,8 @@ const jobApiInjectable = getInjectable({ return new JobApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default jobApiInjectable; diff --git a/src/common/k8s-api/endpoints/limit-range.api.injectable.ts b/src/common/k8s-api/endpoints/limit-range.api.injectable.ts index 1842fdf33e..c2898c998a 100644 --- a/src/common/k8s-api/endpoints/limit-range.api.injectable.ts +++ b/src/common/k8s-api/endpoints/limit-range.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { LimitRangeApi } from "./limit-range.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const limitRangeApiInjectable = getInjectable({ id: "limit-range-api", @@ -14,6 +15,8 @@ const limitRangeApiInjectable = getInjectable({ return new LimitRangeApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default limitRangeApiInjectable; diff --git a/src/common/k8s-api/endpoints/namespace.api.injectable.ts b/src/common/k8s-api/endpoints/namespace.api.injectable.ts index 0ff259f58d..c55c6b9521 100644 --- a/src/common/k8s-api/endpoints/namespace.api.injectable.ts +++ b/src/common/k8s-api/endpoints/namespace.api.injectable.ts @@ -6,14 +6,18 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { NamespaceApi } from "./namespace.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const namespaceApiInjectable = getInjectable({ id: "namespace-api", + instantiate: (di) => { assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "namespaceApi is only available in certain environments"); return new NamespaceApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default namespaceApiInjectable; diff --git a/src/common/k8s-api/endpoints/network-policy.api.injectable.ts b/src/common/k8s-api/endpoints/network-policy.api.injectable.ts index e351451f53..58a316605a 100644 --- a/src/common/k8s-api/endpoints/network-policy.api.injectable.ts +++ b/src/common/k8s-api/endpoints/network-policy.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { NetworkPolicyApi } from "./network-policy.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const networkPolicyApiInjectable = getInjectable({ id: "network-policy-api", @@ -14,6 +15,8 @@ const networkPolicyApiInjectable = getInjectable({ return new NetworkPolicyApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default networkPolicyApiInjectable; diff --git a/src/common/k8s-api/endpoints/node.api.injectable.ts b/src/common/k8s-api/endpoints/node.api.injectable.ts index d382e9a7ba..4a0faf3270 100644 --- a/src/common/k8s-api/endpoints/node.api.injectable.ts +++ b/src/common/k8s-api/endpoints/node.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { NodeApi } from "./node.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const nodeApiInjectable = getInjectable({ id: "node-api", @@ -14,6 +15,8 @@ const nodeApiInjectable = getInjectable({ return new NodeApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default nodeApiInjectable; diff --git a/src/common/k8s-api/endpoints/persistent-volume-claim.api.injectable.ts b/src/common/k8s-api/endpoints/persistent-volume-claim.api.injectable.ts index fcd539b429..e765cf0c38 100644 --- a/src/common/k8s-api/endpoints/persistent-volume-claim.api.injectable.ts +++ b/src/common/k8s-api/endpoints/persistent-volume-claim.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PersistentVolumeClaimApi } from "./persistent-volume-claim.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const persistentVolumeClaimApiInjectable = getInjectable({ id: "persistent-volume-claim-api", @@ -14,6 +15,8 @@ const persistentVolumeClaimApiInjectable = getInjectable({ return new PersistentVolumeClaimApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default persistentVolumeClaimApiInjectable; diff --git a/src/common/k8s-api/endpoints/persistent-volume.api.injectable.ts b/src/common/k8s-api/endpoints/persistent-volume.api.injectable.ts index 7627b9d3c3..38ad80845c 100644 --- a/src/common/k8s-api/endpoints/persistent-volume.api.injectable.ts +++ b/src/common/k8s-api/endpoints/persistent-volume.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PersistentVolumeApi } from "./persistent-volume.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const persistentVolumeApiInjectable = getInjectable({ id: "persistent-volume-api", @@ -14,6 +15,8 @@ const persistentVolumeApiInjectable = getInjectable({ return new PersistentVolumeApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default persistentVolumeApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts b/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts index afc8190eb3..c2e793433b 100644 --- a/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts +++ b/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PodDisruptionBudgetApi } from "./pod-disruption-budget.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const podDisruptionBudgetApiInjectable = getInjectable({ id: "pod-disruption-budget-api", @@ -14,6 +15,8 @@ const podDisruptionBudgetApiInjectable = getInjectable({ return new PodDisruptionBudgetApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default podDisruptionBudgetApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts b/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts index 6d5d8efaf6..ecdbfa920d 100644 --- a/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts +++ b/src/common/k8s-api/endpoints/pod-metrics.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PodMetricsApi } from "./pod-metrics.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const podMetricsApiInjectable = getInjectable({ id: "pod-metrics-api", @@ -14,6 +15,8 @@ const podMetricsApiInjectable = getInjectable({ return new PodMetricsApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default podMetricsApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts b/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts index 81b65660a9..44e25a54b1 100644 --- a/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts +++ b/src/common/k8s-api/endpoints/pod-security-policy.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PodSecurityPolicyApi } from "./pod-security-policy.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const podSecurityPolicyApiInjectable = getInjectable({ id: "pod-security-policy-api", @@ -14,6 +15,8 @@ const podSecurityPolicyApiInjectable = getInjectable({ return new PodSecurityPolicyApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default podSecurityPolicyApiInjectable; diff --git a/src/common/k8s-api/endpoints/pod.api.injectable.ts b/src/common/k8s-api/endpoints/pod.api.injectable.ts index b92d213f77..f88a396bab 100644 --- a/src/common/k8s-api/endpoints/pod.api.injectable.ts +++ b/src/common/k8s-api/endpoints/pod.api.injectable.ts @@ -6,14 +6,18 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PodApi } from "./pod.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const podApiInjectable = getInjectable({ id: "pod-api", + instantiate: (di) => { assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "podApi is only available in certain environments"); return new PodApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default podApiInjectable; diff --git a/src/common/k8s-api/endpoints/priority-class.api.injectable.ts b/src/common/k8s-api/endpoints/priority-class.api.injectable.ts index 4599839580..8aae454967 100644 --- a/src/common/k8s-api/endpoints/priority-class.api.injectable.ts +++ b/src/common/k8s-api/endpoints/priority-class.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { PriorityClassApi } from "./priority-class.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const priorityClassApiInjectable = getInjectable({ id: "priority-class-api", @@ -14,6 +15,8 @@ const priorityClassApiInjectable = getInjectable({ return new PriorityClassApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default priorityClassApiInjectable; diff --git a/src/common/k8s-api/endpoints/replica-set.api.injectable.ts b/src/common/k8s-api/endpoints/replica-set.api.injectable.ts index 8831173403..2bda99b703 100644 --- a/src/common/k8s-api/endpoints/replica-set.api.injectable.ts +++ b/src/common/k8s-api/endpoints/replica-set.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ReplicaSetApi } from "./replica-set.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const replicaSetApiInjectable = getInjectable({ id: "replica-set-api", @@ -14,6 +15,8 @@ const replicaSetApiInjectable = getInjectable({ return new ReplicaSetApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default replicaSetApiInjectable; diff --git a/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts b/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts index 6cedcba453..b10865fe47 100644 --- a/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts +++ b/src/common/k8s-api/endpoints/resource-quota.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ResourceQuotaApi } from "./resource-quota.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const resourceQuotaApiInjectable = getInjectable({ id: "resource-quota-api", @@ -14,6 +15,8 @@ const resourceQuotaApiInjectable = getInjectable({ return new ResourceQuotaApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default resourceQuotaApiInjectable; diff --git a/src/common/k8s-api/endpoints/role-binding.api.injectable.ts b/src/common/k8s-api/endpoints/role-binding.api.injectable.ts index 8e0f04b92c..7b802f78ce 100644 --- a/src/common/k8s-api/endpoints/role-binding.api.injectable.ts +++ b/src/common/k8s-api/endpoints/role-binding.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { RoleBindingApi } from "./role-binding.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const roleBindingApiInjectable = getInjectable({ id: "role-binding-api", @@ -14,6 +15,8 @@ const roleBindingApiInjectable = getInjectable({ return new RoleBindingApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default roleBindingApiInjectable; diff --git a/src/common/k8s-api/endpoints/role.api.injectable.ts b/src/common/k8s-api/endpoints/role.api.injectable.ts index 0b6949357b..d2b09f8bf7 100644 --- a/src/common/k8s-api/endpoints/role.api.injectable.ts +++ b/src/common/k8s-api/endpoints/role.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { RoleApi } from "./role.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const roleApiInjectable = getInjectable({ id: "role-api", @@ -14,6 +15,8 @@ const roleApiInjectable = getInjectable({ return new RoleApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default roleApiInjectable; diff --git a/src/common/k8s-api/endpoints/secret.api.injectable.ts b/src/common/k8s-api/endpoints/secret.api.injectable.ts index 67ebd3d541..916fbe1e93 100644 --- a/src/common/k8s-api/endpoints/secret.api.injectable.ts +++ b/src/common/k8s-api/endpoints/secret.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { SecretApi } from "./secret.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const secretApiInjectable = getInjectable({ id: "secret-api", @@ -14,6 +15,8 @@ const secretApiInjectable = getInjectable({ return new SecretApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default secretApiInjectable; diff --git a/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts index cc77399c02..b66a2b4fc9 100644 --- a/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts +++ b/src/common/k8s-api/endpoints/self-subject-rules-reviews.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { SelfSubjectRulesReviewApi } from "./self-subject-rules-reviews.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const selfSubjectRulesReviewApiInjectable = getInjectable({ id: "self-subject-rules-review-api", @@ -14,6 +15,8 @@ const selfSubjectRulesReviewApiInjectable = getInjectable({ return new SelfSubjectRulesReviewApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default selfSubjectRulesReviewApiInjectable; diff --git a/src/common/k8s-api/endpoints/service-account.api.injectable.ts b/src/common/k8s-api/endpoints/service-account.api.injectable.ts index 3b48b0eb98..da202d6ccd 100644 --- a/src/common/k8s-api/endpoints/service-account.api.injectable.ts +++ b/src/common/k8s-api/endpoints/service-account.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ServiceAccountApi } from "./service-account.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const serviceAccountApiInjectable = getInjectable({ id: "service-account-api", @@ -14,6 +15,8 @@ const serviceAccountApiInjectable = getInjectable({ return new ServiceAccountApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default serviceAccountApiInjectable; diff --git a/src/common/k8s-api/endpoints/service.api.injectable.ts b/src/common/k8s-api/endpoints/service.api.injectable.ts index db5f62b89e..31885238de 100644 --- a/src/common/k8s-api/endpoints/service.api.injectable.ts +++ b/src/common/k8s-api/endpoints/service.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { ServiceApi } from "./service.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const serviceApiInjectable = getInjectable({ id: "service-api", @@ -14,6 +15,8 @@ const serviceApiInjectable = getInjectable({ return new ServiceApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default serviceApiInjectable; diff --git a/src/common/k8s-api/endpoints/stateful-set.api.injectable.ts b/src/common/k8s-api/endpoints/stateful-set.api.injectable.ts index a28dd5e967..fa206cf957 100644 --- a/src/common/k8s-api/endpoints/stateful-set.api.injectable.ts +++ b/src/common/k8s-api/endpoints/stateful-set.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { StatefulSetApi } from "./stateful-set.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const statefulSetApiInjectable = getInjectable({ id: "stateful-set-api", @@ -14,6 +15,8 @@ const statefulSetApiInjectable = getInjectable({ return new StatefulSetApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default statefulSetApiInjectable; diff --git a/src/common/k8s-api/endpoints/storage-class.api.injectable.ts b/src/common/k8s-api/endpoints/storage-class.api.injectable.ts index 8594e231a0..7f1abab299 100644 --- a/src/common/k8s-api/endpoints/storage-class.api.injectable.ts +++ b/src/common/k8s-api/endpoints/storage-class.api.injectable.ts @@ -6,6 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; import { StorageClassApi } from "./storage-class.api"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; const storageClassApiInjectable = getInjectable({ id: "storage-class-api", @@ -14,6 +15,8 @@ const storageClassApiInjectable = getInjectable({ return new StorageClassApi(); }, + + injectionToken: kubeApiInjectionToken, }); export default storageClassApiInjectable; diff --git a/src/common/k8s-api/kube-api/get-kube-api-from-path.injectable.ts b/src/common/k8s-api/kube-api/get-kube-api-from-path.injectable.ts new file mode 100644 index 0000000000..669185684f --- /dev/null +++ b/src/common/k8s-api/kube-api/get-kube-api-from-path.injectable.ts @@ -0,0 +1,26 @@ +/** + * 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 { parseKubeApi } from "../kube-api-parse"; +import { kubeApiInjectionToken } from "./kube-api-injection-token"; +import type { KubeApi } from "../kube-api"; + +const getKubeApiFromPathInjectable = getInjectable({ + id: "get-kube-api-from-path", + + instantiate: (di) => { + const kubeApis = di.injectMany(kubeApiInjectionToken); + + return (apiPath: string) => { + const parsed = parseKubeApi(apiPath); + + const kubeApi = kubeApis.find((api) => api.apiBase === parsed.apiBase); + + return (kubeApi as KubeApi) || undefined; + }; + }, +}); + +export default getKubeApiFromPathInjectable; diff --git a/src/common/k8s-api/kube-api/kube-api-injection-token.ts b/src/common/k8s-api/kube-api/kube-api-injection-token.ts new file mode 100644 index 0000000000..92b6636274 --- /dev/null +++ b/src/common/k8s-api/kube-api/kube-api-injection-token.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { KubeApi } from "../kube-api"; + +export const kubeApiInjectionToken = getInjectionToken>({ + id: "kube-api-injection-token", +});