From d4e2848f90399da869421e23157f3452e89456b5 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 7 Apr 2022 08:54:17 -0400 Subject: [PATCH] Replace KubeObject scope strings with enum Signed-off-by: Sebastian Malton --- .../k8s-api/endpoints/cluster-role-binding.api.ts | 6 +++--- src/common/k8s-api/endpoints/cluster-role.api.ts | 6 +++--- src/common/k8s-api/endpoints/configmap.api.ts | 6 +++--- src/common/k8s-api/endpoints/crd.api.ts | 4 ++-- src/common/k8s-api/endpoints/cron-job.api.ts | 4 ++-- src/common/k8s-api/endpoints/daemon-set.api.ts | 4 ++-- src/common/k8s-api/endpoints/deployment.api.ts | 4 ++-- src/common/k8s-api/endpoints/endpoint.api.ts | 6 +++--- src/common/k8s-api/endpoints/hpa.api.ts | 4 ++-- src/common/k8s-api/endpoints/ingress.api.ts | 4 ++-- src/common/k8s-api/endpoints/job.api.ts | 4 ++-- src/common/k8s-api/endpoints/limit-range.api.ts | 3 ++- src/common/k8s-api/endpoints/namespaces.api.ts | 4 ++-- src/common/k8s-api/endpoints/network-policy.api.ts | 4 ++-- src/common/k8s-api/endpoints/nodes.api.ts | 4 ++-- .../endpoints/persistent-volume-claims.api.ts | 4 ++-- .../k8s-api/endpoints/persistent-volume.api.ts | 4 ++-- src/common/k8s-api/endpoints/pod-metrics.api.ts | 6 +++--- .../k8s-api/endpoints/poddisruptionbudget.api.ts | 4 ++-- src/common/k8s-api/endpoints/pods.api.ts | 4 ++-- .../k8s-api/endpoints/podsecuritypolicy.api.ts | 3 ++- src/common/k8s-api/endpoints/replica-set.api.ts | 4 ++-- src/common/k8s-api/endpoints/resource-quota.api.ts | 3 ++- src/common/k8s-api/endpoints/role-binding.api.ts | 6 +++--- src/common/k8s-api/endpoints/role.api.ts | 6 +++--- src/common/k8s-api/endpoints/secret.api.ts | 6 +++--- .../k8s-api/endpoints/service-accounts.api.ts | 6 +++--- src/common/k8s-api/endpoints/service.api.ts | 3 ++- src/common/k8s-api/endpoints/stateful-set.api.ts | 4 ++-- src/common/k8s-api/endpoints/storage-class.api.ts | 6 +++--- .../k8s-api/endpoints/types/job-template-spec.ts | 4 ++-- .../types/persistent-volume-claim-template-spec.ts | 4 ++-- .../k8s-api/endpoints/types/pod-template-spec.ts | 4 ++-- src/common/k8s-api/kube-object.ts | 13 ++++++++----- .../components/+workloads-pods/pods.store.ts | 4 ++-- 35 files changed, 86 insertions(+), 79 deletions(-) diff --git a/src/common/k8s-api/endpoints/cluster-role-binding.api.ts b/src/common/k8s-api/endpoints/cluster-role-binding.api.ts index 487439cc20..c27ccebe80 100644 --- a/src/common/k8s-api/endpoints/cluster-role-binding.api.ts +++ b/src/common/k8s-api/endpoints/cluster-role-binding.api.ts @@ -6,17 +6,17 @@ import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { RoleRef } from "./types/role-ref"; import type { Subject } from "./types/subject"; -export interface ClusterRoleBindingData extends KubeJsonApiData, void, void> { +export interface ClusterRoleBindingData extends KubeJsonApiData, void, void> { subjects?: Subject[]; roleRef: RoleRef; } -export class ClusterRoleBinding extends KubeObject { +export class ClusterRoleBinding extends KubeObject { static kind = "ClusterRoleBinding"; static namespaced = false; static apiBase = "/apis/rbac.authorization.k8s.io/v1/clusterrolebindings"; diff --git a/src/common/k8s-api/endpoints/cluster-role.api.ts b/src/common/k8s-api/endpoints/cluster-role.api.ts index 03707bbd9f..62b8417653 100644 --- a/src/common/k8s-api/endpoints/cluster-role.api.ts +++ b/src/common/k8s-api/endpoints/cluster-role.api.ts @@ -7,17 +7,17 @@ import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { AggregationRule } from "./types/aggregation-rule"; import type { PolicyRule } from "./types/policy-rule"; -export interface ClusterRoleData extends KubeJsonApiData, void, void> { +export interface ClusterRoleData extends KubeJsonApiData, void, void> { rules?: PolicyRule[]; aggregationRule?: AggregationRule; } -export class ClusterRole extends KubeObject { +export class ClusterRole extends KubeObject { static kind = "ClusterRole"; static namespaced = false; static apiBase = "/apis/rbac.authorization.k8s.io/v1/clusterroles"; diff --git a/src/common/k8s-api/endpoints/configmap.api.ts b/src/common/k8s-api/endpoints/configmap.api.ts index b732f7669d..99cfb30cf6 100644 --- a/src/common/k8s-api/endpoints/configmap.api.ts +++ b/src/common/k8s-api/endpoints/configmap.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; import type { DerivedKubeApiOptions } from "../kube-api"; @@ -11,13 +11,13 @@ import { KubeApi } from "../kube-api"; import { autoBind } from "../../utils"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -export interface ConfigMapData extends KubeJsonApiData, void, void> { +export interface ConfigMapData extends KubeJsonApiData, void, void> { data?: Partial>; binaryData?: Partial>; immutable?: boolean; } -export class ConfigMap extends KubeObject { +export class ConfigMap extends KubeObject { static kind = "ConfigMap"; static namespaced = true; static apiBase = "/api/v1/configmaps"; diff --git a/src/common/k8s-api/endpoints/crd.api.ts b/src/common/k8s-api/endpoints/crd.api.ts index 7c8e898dce..27f6fb69d9 100644 --- a/src/common/k8s-api/endpoints/crd.api.ts +++ b/src/common/k8s-api/endpoints/crd.api.ts @@ -6,7 +6,7 @@ import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import customResourcesRouteInjectable from "../../front-end-routing/routes/cluster/custom-resources/custom-resources/custom-resources-route.injectable"; import { buildURL } from "../../utils/buildUrl"; -import type { BaseKubeObjectCondition } from "../kube-object"; +import type { BaseKubeObjectCondition, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -102,7 +102,7 @@ export interface CustomResourceDefinitionStatus { storedVersions: string[]; } -export class CustomResourceDefinition extends KubeObject { +export class CustomResourceDefinition extends KubeObject { static kind = "CustomResourceDefinition"; static namespaced = false; static apiBase = "/apis/apiextensions.k8s.io/v1/customresourcedefinitions"; diff --git a/src/common/k8s-api/endpoints/cron-job.api.ts b/src/common/k8s-api/endpoints/cron-job.api.ts index 2097b3d098..ad2db771d9 100644 --- a/src/common/k8s-api/endpoints/cron-job.api.ts +++ b/src/common/k8s-api/endpoints/cron-job.api.ts @@ -4,7 +4,7 @@ */ import moment from "moment"; -import type { ObjectReference } from "../kube-object"; +import type { KubeObjectScope, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import { formatDuration } from "../../utils/formatDuration"; import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; @@ -67,7 +67,7 @@ export interface CronJobStatus { active?: ObjectReference[]; } -export class CronJob extends KubeObject { +export class CronJob extends KubeObject { static readonly kind = "CronJob"; static readonly namespaced = true; static readonly apiBase = "/apis/batch/v1beta1/cronjobs"; diff --git a/src/common/k8s-api/endpoints/daemon-set.api.ts b/src/common/k8s-api/endpoints/daemon-set.api.ts index 5928d79835..54e9b78773 100644 --- a/src/common/k8s-api/endpoints/daemon-set.api.ts +++ b/src/common/k8s-api/endpoints/daemon-set.api.ts @@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api"; import { metricsApi } from "./metrics.api"; import type { PodMetricData } from "./pods.api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -import type { KubeObjectStatus, LabelSelector } from "../kube-object"; +import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { PodTemplateSpec } from "./types/pod-template-spec"; @@ -42,7 +42,7 @@ export interface DaemonSetStatus extends KubeObjectStatus { updatedNumberScheduled?: number; } -export class DaemonSet extends KubeObject { +export class DaemonSet extends KubeObject { static kind = "DaemonSet"; static namespaced = true; static apiBase = "/apis/apps/v1/daemonsets"; diff --git a/src/common/k8s-api/endpoints/deployment.api.ts b/src/common/k8s-api/endpoints/deployment.api.ts index dab49e587e..b1367e36d3 100644 --- a/src/common/k8s-api/endpoints/deployment.api.ts +++ b/src/common/k8s-api/endpoints/deployment.api.ts @@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api"; import { metricsApi } from "./metrics.api"; import type { PodMetricData, PodSpec } from "./pods.api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -import type { KubeObjectStatus, LabelSelector } from "../kube-object"; +import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import { hasTypedProperty, isNumber, isObject } from "../../utils"; @@ -117,7 +117,7 @@ export interface DeploymentStatus extends KubeObjectStatus { unavailableReplicas?: number; } -export class Deployment extends KubeObject { +export class Deployment extends KubeObject { static kind = "Deployment"; static namespaced = true; static apiBase = "/apis/apps/v1/deployments"; diff --git a/src/common/k8s-api/endpoints/endpoint.api.ts b/src/common/k8s-api/endpoints/endpoint.api.ts index 799b894d66..ce47965eda 100644 --- a/src/common/k8s-api/endpoints/endpoint.api.ts +++ b/src/common/k8s-api/endpoints/endpoint.api.ts @@ -4,7 +4,7 @@ */ import { autoBind } from "../../utils"; -import type { KubeObjectMetadata, ObjectReference } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -72,11 +72,11 @@ export interface EndpointSubset { ports?: EndpointPort[]; } -export interface EndpointsData extends KubeJsonApiData, void, void> { +export interface EndpointsData extends KubeJsonApiData, void, void> { subsets?: EndpointSubset[]; } -export class Endpoints extends KubeObject { +export class Endpoints extends KubeObject { static kind = "Endpoints"; static namespaced = true; static apiBase = "/api/v1/endpoints"; diff --git a/src/common/k8s-api/endpoints/hpa.api.ts b/src/common/k8s-api/endpoints/hpa.api.ts index 75b81a48dc..8fad40f38b 100644 --- a/src/common/k8s-api/endpoints/hpa.api.ts +++ b/src/common/k8s-api/endpoints/hpa.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { BaseKubeObjectCondition, LabelSelector } from "../kube-object"; +import type { BaseKubeObjectCondition, KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -98,7 +98,7 @@ interface MetricCurrentTarget { target?: string | undefined; } -export class HorizontalPodAutoscaler extends KubeObject { +export class HorizontalPodAutoscaler extends KubeObject { static readonly kind = "HorizontalPodAutoscaler"; static readonly namespaced = true; static readonly apiBase = "/apis/autoscaling/v2beta1/horizontalpodautoscalers"; diff --git a/src/common/k8s-api/endpoints/ingress.api.ts b/src/common/k8s-api/endpoints/ingress.api.ts index e362b5d2b0..bc8dd09368 100644 --- a/src/common/k8s-api/endpoints/ingress.api.ts +++ b/src/common/k8s-api/endpoints/ingress.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { TypedLocalObjectReference } from "../kube-object"; +import type { KubeObjectScope, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import { hasTypedProperty, isString, iter } from "../../utils"; import type { MetricData } from "./metrics.api"; @@ -141,7 +141,7 @@ export interface IngressStatus { }; } -export class Ingress extends KubeObject { +export class Ingress extends KubeObject { static readonly kind = "Ingress"; static readonly namespaced = true; static readonly apiBase = "/apis/networking.k8s.io/v1/ingresses"; diff --git a/src/common/k8s-api/endpoints/job.api.ts b/src/common/k8s-api/endpoints/job.api.ts index 55c528f903..0f2277bebd 100644 --- a/src/common/k8s-api/endpoints/job.api.ts +++ b/src/common/k8s-api/endpoints/job.api.ts @@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api"; import { metricsApi } from "./metrics.api"; import type { IPodContainer, PodMetricData, PodSpec } from "./pods.api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -import type { KubeObjectStatus, LabelSelector } from "../kube-object"; +import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; export interface JobSpec { @@ -39,7 +39,7 @@ export interface JobStatus extends KubeObjectStatus { succeeded: number; } -export class Job extends KubeObject { +export class Job extends KubeObject { static readonly kind = "Job"; static readonly namespaced = true; static readonly apiBase = "/apis/batch/v1/jobs"; diff --git a/src/common/k8s-api/endpoints/limit-range.api.ts b/src/common/k8s-api/endpoints/limit-range.api.ts index 3f2095aded..95e3c3eee5 100644 --- a/src/common/k8s-api/endpoints/limit-range.api.ts +++ b/src/common/k8s-api/endpoints/limit-range.api.ts @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -39,7 +40,7 @@ export interface LimitRangeSpec { limits: LimitRangeItem[]; } -export class LimitRange extends KubeObject { +export class LimitRange extends KubeObject { static readonly kind = "LimitRange"; static readonly namespaced = true; static readonly apiBase = "/api/v1/limitranges"; diff --git a/src/common/k8s-api/endpoints/namespaces.api.ts b/src/common/k8s-api/endpoints/namespaces.api.ts index f46aa8782c..3c33394c13 100644 --- a/src/common/k8s-api/endpoints/namespaces.api.ts +++ b/src/common/k8s-api/endpoints/namespaces.api.ts @@ -4,7 +4,7 @@ */ import { KubeApi } from "../kube-api"; -import type { KubeObjectStatus } from "../kube-object"; +import type { KubeObjectScope, KubeObjectStatus } from "../kube-object"; import { KubeObject } from "../kube-object"; import { metricsApi } from "./metrics.api"; import type { PodMetricData } from "./pods.api"; @@ -23,7 +23,7 @@ export interface NamespaceStatus extends KubeObjectStatus { phase?: string; } -export class Namespace extends KubeObject { +export class Namespace extends KubeObject { static readonly kind = "Namespace"; static readonly namespaced = false; static readonly apiBase = "/api/v1/namespaces"; diff --git a/src/common/k8s-api/endpoints/network-policy.api.ts b/src/common/k8s-api/endpoints/network-policy.api.ts index 3dad0ce3a1..07f77fa474 100644 --- a/src/common/k8s-api/endpoints/network-policy.api.ts +++ b/src/common/k8s-api/endpoints/network-policy.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { LabelSelector } from "../kube-object"; +import type { KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -104,7 +104,7 @@ export interface NetworkPolicy { spec: NetworkPolicySpec; } -export class NetworkPolicy extends KubeObject { +export class NetworkPolicy extends KubeObject { static readonly kind = "NetworkPolicy"; static readonly namespaced = true; static readonly apiBase = "/apis/networking.k8s.io/v1/networkpolicies"; diff --git a/src/common/k8s-api/endpoints/nodes.api.ts b/src/common/k8s-api/endpoints/nodes.api.ts index 04697c6bb3..b2511daa37 100644 --- a/src/common/k8s-api/endpoints/nodes.api.ts +++ b/src/common/k8s-api/endpoints/nodes.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { BaseKubeObjectCondition } from "../kube-object"; +import type { BaseKubeObjectCondition, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import { cpuUnitsToNumber, unitsToBytes } from "../../../renderer/utils"; import type { MetricData } from "./metrics.api"; @@ -166,7 +166,7 @@ export interface NodeStatus { volumesAttached?: AttachedVolume[]; } -export class Node extends KubeObject { +export class Node extends KubeObject { static readonly kind = "Node"; static readonly namespaced = false; static readonly apiBase = "/api/v1/nodes"; diff --git a/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts b/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts index 7c56afc651..fbdc56bfd8 100644 --- a/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts +++ b/src/common/k8s-api/endpoints/persistent-volume-claims.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { LabelSelector, TypedLocalObjectReference } from "../kube-object"; +import type { KubeObjectScope, LabelSelector, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { MetricData } from "./metrics.api"; import { metricsApi } from "./metrics.api"; @@ -54,7 +54,7 @@ export interface PersistentVolumeClaimStatus { phase: string; // Pending } -export class PersistentVolumeClaim extends KubeObject { +export class PersistentVolumeClaim extends KubeObject { static readonly kind = "PersistentVolumeClaim"; static readonly namespaced = true; static readonly apiBase = "/api/v1/persistentvolumeclaims"; diff --git a/src/common/k8s-api/endpoints/persistent-volume.api.ts b/src/common/k8s-api/endpoints/persistent-volume.api.ts index 8734d3fd10..9c2868c847 100644 --- a/src/common/k8s-api/endpoints/persistent-volume.api.ts +++ b/src/common/k8s-api/endpoints/persistent-volume.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { LabelSelector, ObjectReference, TypedLocalObjectReference } from "../kube-object"; +import type { KubeObjectScope, LabelSelector, ObjectReference, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import { unitsToBytes } from "../../utils"; import type { DerivedKubeApiOptions } from "../kube-api"; @@ -65,7 +65,7 @@ export interface PersistentVolumeStatus { reason?: string; } -export class PersistentVolume extends KubeObject { +export class PersistentVolume extends KubeObject { static kind = "PersistentVolume"; static namespaced = false; static apiBase = "/api/v1/persistentvolumes"; diff --git a/src/common/k8s-api/endpoints/pod-metrics.api.ts b/src/common/k8s-api/endpoints/pod-metrics.api.ts index 42cd022c33..9c362a8af8 100644 --- a/src/common/k8s-api/endpoints/pod-metrics.api.ts +++ b/src/common/k8s-api/endpoints/pod-metrics.api.ts @@ -3,14 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { KubeJsonApiData } from "../kube-json-api"; -export interface PodMetricsData extends KubeJsonApiData, void, void> { +export interface PodMetricsData extends KubeJsonApiData, void, void> { timestamp: string; window: string; containers: PodMetricsContainer[]; @@ -26,7 +26,7 @@ export interface PodMetricsContainer { usage: PodMetricsContainerUsage; } -export class PodMetrics extends KubeObject { +export class PodMetrics extends KubeObject { static readonly kind = "PodMetrics"; static readonly namespaced = true; static readonly apiBase = "/apis/metrics.k8s.io/v1beta1/pods"; diff --git a/src/common/k8s-api/endpoints/poddisruptionbudget.api.ts b/src/common/k8s-api/endpoints/poddisruptionbudget.api.ts index 0053aa1dff..23e9c6bf02 100644 --- a/src/common/k8s-api/endpoints/poddisruptionbudget.api.ts +++ b/src/common/k8s-api/endpoints/poddisruptionbudget.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { LabelSelector } from "../kube-object"; +import type { KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -22,7 +22,7 @@ export interface PodDisruptionBudgetStatus { expectedPods: number; } -export class PodDisruptionBudget extends KubeObject { +export class PodDisruptionBudget extends KubeObject { static readonly kind = "PodDisruptionBudget"; static readonly namespaced = true; static readonly apiBase = "/apis/policy/v1beta1/poddisruptionbudgets"; diff --git a/src/common/k8s-api/endpoints/pods.api.ts b/src/common/k8s-api/endpoints/pods.api.ts index 30aeb69800..2e94d7d30b 100644 --- a/src/common/k8s-api/endpoints/pods.api.ts +++ b/src/common/k8s-api/endpoints/pods.api.ts @@ -9,7 +9,7 @@ import type { DerivedKubeApiOptions, IgnoredKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { RequireExactlyOne } from "type-fest"; -import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, LabelSelector } from "../kube-object"; +import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, LabelSelector, KubeObjectScope } from "../kube-object"; import type { SecretReference } from "./secret.api"; import type { PersistentVolumeClaimSpec } from "./persistent-volume-claims.api"; import { KubeObject } from "../kube-object"; @@ -759,7 +759,7 @@ export interface PodStatus { reason?: string; } -export class Pod extends KubeObject { +export class Pod extends KubeObject { static kind = "Pod"; static namespaced = true; static apiBase = "/api/v1/pods"; diff --git a/src/common/k8s-api/endpoints/podsecuritypolicy.api.ts b/src/common/k8s-api/endpoints/podsecuritypolicy.api.ts index 65b1e68bfc..bdcb82c582 100644 --- a/src/common/k8s-api/endpoints/podsecuritypolicy.api.ts +++ b/src/common/k8s-api/endpoints/podsecuritypolicy.api.ts @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -80,7 +81,7 @@ export interface PodSecurityPolicySpec { volumes?: string[]; } -export class PodSecurityPolicy extends KubeObject { +export class PodSecurityPolicy extends KubeObject { static readonly kind = "PodSecurityPolicy"; static readonly namespaced = false; static readonly apiBase = "/apis/policy/v1beta1/podsecuritypolicies"; diff --git a/src/common/k8s-api/endpoints/replica-set.api.ts b/src/common/k8s-api/endpoints/replica-set.api.ts index 1a11523d9b..70669f765b 100644 --- a/src/common/k8s-api/endpoints/replica-set.api.ts +++ b/src/common/k8s-api/endpoints/replica-set.api.ts @@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api"; import { metricsApi } from "./metrics.api"; import type { PodMetricData } from "./pods.api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -import type { KubeObjectStatus, LabelSelector } from "../kube-object"; +import type { KubeObjectScope, KubeObjectStatus, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { PodTemplateSpec } from "./types/pod-template-spec"; @@ -74,7 +74,7 @@ export interface ReplicaSetStatus extends KubeObjectStatus { observedGeneration?: number; } -export class ReplicaSet extends KubeObject { +export class ReplicaSet extends KubeObject { static kind = "ReplicaSet"; static namespaced = true; static apiBase = "/apis/apps/v1/replicasets"; diff --git a/src/common/k8s-api/endpoints/resource-quota.api.ts b/src/common/k8s-api/endpoints/resource-quota.api.ts index 1b984043e9..9d7d699816 100644 --- a/src/common/k8s-api/endpoints/resource-quota.api.ts +++ b/src/common/k8s-api/endpoints/resource-quota.api.ts @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -50,7 +51,7 @@ export interface ResourceQuotaStatus { used: IResourceQuotaValues; } -export class ResourceQuota extends KubeObject { +export class ResourceQuota extends KubeObject { static readonly kind = "ResourceQuota"; static readonly namespaced = true; static readonly apiBase = "/api/v1/resourcequotas"; diff --git a/src/common/k8s-api/endpoints/role-binding.api.ts b/src/common/k8s-api/endpoints/role-binding.api.ts index 4b2cec4c62..d8fc6bf031 100644 --- a/src/common/k8s-api/endpoints/role-binding.api.ts +++ b/src/common/k8s-api/endpoints/role-binding.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -12,12 +12,12 @@ import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { RoleRef } from "./types/role-ref"; import type { Subject } from "./types/subject"; -export interface RoleBindingData extends KubeJsonApiData, void, void> { +export interface RoleBindingData extends KubeJsonApiData, void, void> { subjects?: Subject[]; roleRef: RoleRef; } -export class RoleBinding extends KubeObject { +export class RoleBinding extends KubeObject { static readonly kind = "RoleBinding"; static readonly namespaced = true; static readonly apiBase = "/apis/rbac.authorization.k8s.io/v1/rolebindings"; diff --git a/src/common/k8s-api/endpoints/role.api.ts b/src/common/k8s-api/endpoints/role.api.ts index 673fdaed41..0d17a152b6 100644 --- a/src/common/k8s-api/endpoints/role.api.ts +++ b/src/common/k8s-api/endpoints/role.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -11,11 +11,11 @@ import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; import type { KubeJsonApiData } from "../kube-json-api"; import type { PolicyRule } from "./types/policy-rule"; -export interface RoleData extends KubeJsonApiData, void, void> { +export interface RoleData extends KubeJsonApiData, void, void> { rules?: PolicyRule[]; } -export class Role extends KubeObject { +export class Role extends KubeObject { static readonly kind = "Role"; static readonly namespaced = true; static readonly apiBase = "/apis/rbac.authorization.k8s.io/v1/roles"; diff --git a/src/common/k8s-api/endpoints/secret.api.ts b/src/common/k8s-api/endpoints/secret.api.ts index 437926ec15..a7fb615059 100644 --- a/src/common/k8s-api/endpoints/secret.api.ts +++ b/src/common/k8s-api/endpoints/secret.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; import { autoBind } from "../../utils"; @@ -27,12 +27,12 @@ export interface SecretReference { namespace?: string; } -export interface SecretData extends KubeJsonApiData, void, void> { +export interface SecretData extends KubeJsonApiData, void, void> { type: SecretType; data?: Partial>; } -export class Secret extends KubeObject { +export class Secret extends KubeObject { static readonly kind = "Secret"; static readonly namespaced = true; static readonly apiBase = "/api/v1/secrets"; diff --git a/src/common/k8s-api/endpoints/service-accounts.api.ts b/src/common/k8s-api/endpoints/service-accounts.api.ts index e26ce42c67..101618ea57 100644 --- a/src/common/k8s-api/endpoints/service-accounts.api.ts +++ b/src/common/k8s-api/endpoints/service-accounts.api.ts @@ -3,20 +3,20 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeObjectMetadata, LocalObjectReference, ObjectReference } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope, LocalObjectReference, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -export interface ServiceAccountData extends KubeJsonApiData, void, void> { +export interface ServiceAccountData extends KubeJsonApiData, void, void> { automountServiceAccountToken?: boolean; imagePullSecrets?: LocalObjectReference[]; secrets?: ObjectReference[]; } -export class ServiceAccount extends KubeObject { +export class ServiceAccount extends KubeObject { static readonly kind = "ServiceAccount"; static readonly namespaced = true; static readonly apiBase = "/api/v1/serviceaccounts"; diff --git a/src/common/k8s-api/endpoints/service.api.ts b/src/common/k8s-api/endpoints/service.api.ts index 2849eba554..49f0e81244 100644 --- a/src/common/k8s-api/endpoints/service.api.ts +++ b/src/common/k8s-api/endpoints/service.api.ts @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -60,7 +61,7 @@ export interface ServiceStatus { }; } -export class Service extends KubeObject { +export class Service extends KubeObject { static readonly kind = "Service"; static readonly namespaced = true; static readonly apiBase = "/api/v1/services"; diff --git a/src/common/k8s-api/endpoints/stateful-set.api.ts b/src/common/k8s-api/endpoints/stateful-set.api.ts index 3d000f1c5e..73dd8b77fb 100644 --- a/src/common/k8s-api/endpoints/stateful-set.api.ts +++ b/src/common/k8s-api/endpoints/stateful-set.api.ts @@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api"; import { metricsApi } from "./metrics.api"; import type { PodMetricData } from "./pods.api"; import { isClusterPageContext } from "../../utils/cluster-id-url-parsing"; -import type { LabelSelector } from "../kube-object"; +import type { KubeObjectScope, LabelSelector } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { PodTemplateSpec } from "./types/pod-template-spec"; import type { PersistentVolumeClaimTemplateSpec } from "./types/persistent-volume-claim-template-spec"; @@ -82,7 +82,7 @@ export interface StatefulSetStatus { collisionCount: number; } -export class StatefulSet extends KubeObject { +export class StatefulSet extends KubeObject { static readonly kind = "StatefulSet"; static readonly namespaced = true; static readonly apiBase = "/apis/apps/v1/statefulsets"; diff --git a/src/common/k8s-api/endpoints/storage-class.api.ts b/src/common/k8s-api/endpoints/storage-class.api.ts index 46f62fb3ee..e97707e77b 100644 --- a/src/common/k8s-api/endpoints/storage-class.api.ts +++ b/src/common/k8s-api/endpoints/storage-class.api.ts @@ -4,7 +4,7 @@ */ import { autoBind } from "../../utils"; -import type { KubeObjectMetadata } from "../kube-object"; +import type { KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions } from "../kube-api"; import { KubeApi } from "../kube-api"; @@ -20,7 +20,7 @@ export interface TopologySelectorTerm { matchLabelExpressions?: TopologySelectorLabelRequirement[]; } -export interface StorageClassData extends KubeJsonApiData, void, void> { +export interface StorageClassData extends KubeJsonApiData, void, void> { allowVolumeExpansion?: boolean; allowedTopologies?: TopologySelectorTerm[]; mountOptions?: string[]; @@ -30,7 +30,7 @@ export interface StorageClassData extends KubeJsonApiData { +export class StorageClass extends KubeObject { static readonly kind = "StorageClass"; static readonly namespaced = false; static readonly apiBase = "/apis/storage.k8s.io/v1/storageclasses"; diff --git a/src/common/k8s-api/endpoints/types/job-template-spec.ts b/src/common/k8s-api/endpoints/types/job-template-spec.ts index e842101a62..b3ae5cceca 100644 --- a/src/common/k8s-api/endpoints/types/job-template-spec.ts +++ b/src/common/k8s-api/endpoints/types/job-template-spec.ts @@ -3,10 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeTemplateObjectMetadata } from "../../kube-object"; +import type { KubeObjectScope, KubeTemplateObjectMetadata } from "../../kube-object"; import type { JobSpec } from "../job.api"; export interface JobTemplateSpec { - metadata?: KubeTemplateObjectMetadata<"namespace-scoped">; + metadata?: KubeTemplateObjectMetadata; spec?: JobSpec; } diff --git a/src/common/k8s-api/endpoints/types/persistent-volume-claim-template-spec.ts b/src/common/k8s-api/endpoints/types/persistent-volume-claim-template-spec.ts index 8b55c45574..5461c81807 100644 --- a/src/common/k8s-api/endpoints/types/persistent-volume-claim-template-spec.ts +++ b/src/common/k8s-api/endpoints/types/persistent-volume-claim-template-spec.ts @@ -3,10 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeTemplateObjectMetadata } from "../../kube-object"; +import type { KubeObjectScope, KubeTemplateObjectMetadata } from "../../kube-object"; import type { PersistentVolumeSpec } from "../persistent-volume.api"; export interface PersistentVolumeClaimTemplateSpec { - metadata?: KubeTemplateObjectMetadata<"cluster-scoped">; + metadata?: KubeTemplateObjectMetadata; spec?: PersistentVolumeSpec; } diff --git a/src/common/k8s-api/endpoints/types/pod-template-spec.ts b/src/common/k8s-api/endpoints/types/pod-template-spec.ts index 75549c01d9..4c960d6a95 100644 --- a/src/common/k8s-api/endpoints/types/pod-template-spec.ts +++ b/src/common/k8s-api/endpoints/types/pod-template-spec.ts @@ -3,10 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { KubeTemplateObjectMetadata } from "../../kube-object"; +import type { KubeObjectScope, KubeTemplateObjectMetadata } from "../../kube-object"; import type { PodSpec } from "../pods.api"; export interface PodTemplateSpec { - metadata?: KubeTemplateObjectMetadata<"namespace-scoped">; + metadata?: KubeTemplateObjectMetadata; spec?: PodSpec; } diff --git a/src/common/k8s-api/kube-object.ts b/src/common/k8s-api/kube-object.ts index 079340cdf3..97b17f5b40 100644 --- a/src/common/k8s-api/kube-object.ts +++ b/src/common/k8s-api/kube-object.ts @@ -200,8 +200,8 @@ interface BaseKubeJsonApiObjectMetadata { [key: string]: unknown; } -export type KubeJsonApiObjectMetadata = Namespaced extends "namespace-scoped" - ? BaseKubeJsonApiObjectMetadata<"namespace-scoped"> & { readonly namespace: string } +export type KubeJsonApiObjectMetadata = Namespaced extends KubeObjectScope.Namespace + ? BaseKubeJsonApiObjectMetadata & { readonly namespace: string } : BaseKubeJsonApiObjectMetadata; export type KubeObjectMetadata = KubeJsonApiObjectMetadata & { @@ -359,11 +359,14 @@ export interface LabelSelector { matchExpressions?: LabelMatchExpression[]; } -export type KubeObjectScope = "namespace-scoped" | "cluster-scoped"; +export enum KubeObjectScope { + Namespace, + Cluster, +} export type ScopedNamespace = ( - Namespaced extends "namespace-scoped" + Namespaced extends KubeObjectScope.Namespace ? string - : Namespaced extends "cluster-scoped" + : Namespaced extends KubeObjectScope.Cluster ? undefined : string | undefined ); diff --git a/src/renderer/components/+workloads-pods/pods.store.ts b/src/renderer/components/+workloads-pods/pods.store.ts index 9c82817806..776c688940 100644 --- a/src/renderer/components/+workloads-pods/pods.store.ts +++ b/src/renderer/components/+workloads-pods/pods.store.ts @@ -10,7 +10,7 @@ import { cpuUnitsToNumber, isClusterPageContext, unitsToBytes } from "../../util import type { Pod, PodMetrics, PodApi } from "../../../common/k8s-api/endpoints"; import { podMetricsApi, podApi } from "../../../common/k8s-api/endpoints"; import { apiManager } from "../../../common/k8s-api/api-manager"; -import type { KubeObject } from "../../../common/k8s-api/kube-object"; +import type { KubeObject, KubeObjectScope } from "../../../common/k8s-api/kube-object"; export class PodsStore extends KubeObjectStore { readonly kubeMetrics = observable.array([]); @@ -25,7 +25,7 @@ export class PodsStore extends KubeObjectStore { } } - getPodsByOwner(workload: KubeObject): Pod[] { + getPodsByOwner(workload: KubeObject): Pod[] { return this.items.filter(pod => ( pod.getOwnerRefs() .find(owner => owner.uid === workload.getId())