import { ApiObjectMetadata, ApiObjectMetadataDefinition } from 'cdk8s'; import { Construct } from 'constructs'; import * as k8s from './imports/k8s'; import * as pod from './pod'; /** * Properties for `Workload`. */ export interface WorkloadProps extends pod.AbstractPodProps { /** * The pod metadata of this workload. */ readonly podMetadata?: ApiObjectMetadata; /** * Automatically allocates a pod label selector for this workload and add * it to the pod metadata. This ensures this workload manages pods created by * its pod template. * * @default true */ readonly select?: boolean; /** * Automatically spread pods across hostname and zones. * * @see https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#internal-default-constraints * @default false */ readonly spread?: boolean; } /** * A label selector requirement is a selector that contains values, a key, and an operator that * relates the key and values. */ export interface LabelSelectorRequirement { /** * The label key that the selector applies to. */ readonly key: string; /** * Represents a key's relationship to a set of values. */ readonly operator: string; /** * An array of string values. If the operator is In or NotIn, the values array * must be non-empty. If the operator is Exists or DoesNotExist, * the values array must be empty. This array is replaced during a strategic merge patch. */ readonly values?: string[]; } /** * A workload is an application running on Kubernetes. Whether your workload is a single * component or several that work together, on Kubernetes you run it inside a set of pods. * In Kubernetes, a Pod represents a set of running containers on your cluster. */ export declare abstract class Workload extends pod.AbstractPod { readonly connections: pod.PodConnections; readonly scheduling: WorkloadScheduling; private readonly spread; private readonly _matchLabels; private readonly _matchExpressions; private _podMetadata?; private readonly _props; private readonly _matcher; constructor(scope: Construct, id: string, props: WorkloadProps); /** * The metadata of pods in this workload. */ get podMetadata(): ApiObjectMetadataDefinition; /** * Configure selectors for this workload. */ select(...selectors: pod.LabelSelector[]): void; /** * The label matchers this workload will use in order to select pods. * * Returns a a copy. Use `select()` to add label matchers. */ get matchLabels(): Record; /** * The expression matchers this workload will use in order to select pods. * * Returns a a copy. Use `select()` to add expression matchers. */ get matchExpressions(): LabelSelectorRequirement[]; /** * @internal */ _toLabelSelector(): k8s.LabelSelector; /** * @internal */ _toPodSpec(): k8s.PodSpec; } /** * Options for `WorkloadScheduling.spread`. */ export interface WorkloadSchedulingSpreadOptions { /** * Indicates the spread is optional, with this weight score. * * @default - no weight. spread is assumed to be required. */ readonly weight?: number; /** * Which topology to spread on. * * @default - Topology.HOSTNAME */ readonly topology?: pod.Topology; } /** * Controls the pod scheduling strategy of this workload. * It offers some additional API's on top of the core pod scheduling. */ export declare class WorkloadScheduling extends pod.PodScheduling { /** * Spread the pods in this workload by the topology key. * A spread is a separation of the pod from itself and is used to * balance out pod replicas across a given topology. */ spread(options?: WorkloadSchedulingSpreadOptions): void; }