From cc3b2d3271b6db6d7d8241a75a77bd3d8d630e10 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 20 Jan 2023 10:53:23 -0500 Subject: [PATCH] Check preferred version for PodDistruptionBudgets Signed-off-by: Sebastian Malton --- .../pod-disruption-budget.api.injectable.ts | 2 ++ .../endpoints/pod-disruption-budget.api.ts | 31 +++++++++++++++++-- .../k8s-api/endpoints/types/condition.ts | 13 ++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 packages/core/src/common/k8s-api/endpoints/types/condition.ts diff --git a/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts b/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts index 28ecff01b1..c5dc62c413 100644 --- a/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.injectable.ts @@ -18,6 +18,8 @@ const podDisruptionBudgetApiInjectable = getInjectable({ return new PodDisruptionBudgetApi({ logger: di.inject(loggerInjectable), maybeKubeApi: di.inject(maybeKubeApiInjectable), + }, { + checkPreferredVersion: true, }); }, diff --git a/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts b/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts index 0010bbb642..e94de01abd 100644 --- a/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/pod-disruption-budget.api.ts @@ -7,20 +7,45 @@ import type { LabelSelector, NamespaceScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; +import type { Condition } from "./types/condition"; -export interface PodDisruptionBudgetSpec { +export interface V1Beta1PodDisruptionBudgetSpec { minAvailable: string; maxUnavailable: string; selector: LabelSelector; } -export interface PodDisruptionBudgetStatus { +export interface V1PodDisruptionBudgetSpec { + maxUnavailable?: string | number; + minAvailable?: string | number; + selector?: LabelSelector; +} + +export type PodDisruptionBudgetSpec = + | V1Beta1PodDisruptionBudgetSpec + | V1PodDisruptionBudgetSpec; + +export interface V1Beta1PodDisruptionBudgetStatus { currentHealthy: number; desiredHealthy: number; disruptionsAllowed: number; expectedPods: number; } +export interface V1PodDisruptionBudgetStatus { + conditions?: Condition[]; + currentHealthy: number; + desiredHealthy: number; + disruptedPods?: Partial>; + disruptionsAllowed: number; + expectedPods: number; + observedGeneration?: number; +} + +export type PodDisruptionBudgetStatus = + | V1Beta1PodDisruptionBudgetStatus + | V1PodDisruptionBudgetStatus; + export class PodDisruptionBudget extends KubeObject< NamespaceScopedMetadata, PodDisruptionBudgetStatus, @@ -31,7 +56,7 @@ export class PodDisruptionBudget extends KubeObject< static readonly apiBase = "/apis/policy/v1beta1/poddisruptionbudgets"; getSelectors() { - return KubeObject.stringifyLabels(this.spec.selector.matchLabels); + return KubeObject.stringifyLabels(this.spec.selector?.matchLabels); } getMinAvailable() { diff --git a/packages/core/src/common/k8s-api/endpoints/types/condition.ts b/packages/core/src/common/k8s-api/endpoints/types/condition.ts new file mode 100644 index 0000000000..81bf191194 --- /dev/null +++ b/packages/core/src/common/k8s-api/endpoints/types/condition.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +export interface Condition { + lastTransitionTime: string; + message: string; + observedGeneration?: number; + reason: string; + status: string; + type: string; +}