UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

74 lines (67 loc) 2.76 kB
import { KubeObject, KubeObjectInterface } from '@kinvolk/headlamp-plugin/lib/k8s/cluster'; import { LabelSelector } from './common'; const MACHINEDRAINRULE_API_GROUP = 'cluster.x-k8s.io'; const MACHINEDRAINRULE_CRD_NAME = 'machinedrainrules.cluster.x-k8s.io'; /** * MachineDrainRule is the KubeObject implementation for the Cluster API MachineDrainRule resource. * Managed Drain allows Cluster API to coordinate node draining with external agents. * @see https://cluster-api.sigs.k8s.io/tasks/experimental-features/managed-drain.html */ export class MachineDrainRule extends KubeObject<ClusterApiMachineDrainRule> { static readonly apiName = 'machinedrainrules'; static apiVersion = `${MACHINEDRAINRULE_API_GROUP}/v1beta1`; static readonly crdName = MACHINEDRAINRULE_CRD_NAME; static readonly isNamespaced = true; static readonly kind = 'MachineDrainRule'; /** * Returns the route for the machine drain rule details page. */ static get detailsRoute() { return '/cluster-api/machinedrainrules/:namespace/:name'; } /** * Returns a version of the MachineDrainRule class with a specific API version. */ static withApiVersion(version: string): typeof MachineDrainRule { const versionedClass = class extends MachineDrainRule {} as typeof MachineDrainRule; versionedClass.apiVersion = `${MACHINEDRAINRULE_API_GROUP}/${version}`; return versionedClass; } /** * Returns the machine drain rule specification. */ get spec() { return this.jsonData.spec; } } /** * MachineDrainRule resource definition. * Managed Drain allows Cluster API to coordinate node draining with external agents. * @see https://cluster-api.sigs.k8s.io/tasks/experimental-features/managed-drain.html */ export interface ClusterApiMachineDrainRule extends KubeObjectInterface { /** Spec defines the desired state of MachineDrainRule. */ spec: { /** Drain specifies the drain behavior. */ drain: { /** Behavior specifies how the drain should be handled. */ behavior: 'Drain' | 'Skip' | 'WaitCompleted'; /** Order specifies the order in which the drain should be handled. */ order?: number; }; /** Machines specifies the machines the rule applies to. */ machines?: Array<{ /** Selector is a label selector to find machines. */ selector?: LabelSelector; /** ClusterSelector is a label selector to find clusters. */ clusterSelector?: LabelSelector; }>; /** Pods specifies the pods the rule applies to. */ pods?: Array<{ /** Selector is a label selector to find pods. */ selector?: LabelSelector; /** NamespaceSelector is a label selector to find namespaces. */ namespaceSelector?: LabelSelector; }>; }; }