package v1alpha3 import "cue.dev/x/k8s.io/apimachinery/pkg/apis/meta/v1" // The device this taint is attached to has the "effect" on any // claim which does not tolerate the taint and, through the // claim, to pods using the claim. #DeviceTaint: { // The effect of the taint on claims that do not tolerate the // taint and through such claims on the pods using them. // // Valid effects are None, NoSchedule and NoExecute. // PreferNoSchedule as used for nodes is not valid here. More // effects may get added in the future. Consumers must treat // unknown effects like None. "effect"!: string // The taint key to be applied to a device. Must be a label name. "key"!: string // TimeAdded represents the time at which the taint was added or // (only in a DeviceTaintRule) the effect was modified. Added // automatically during create or update if not set. // // In addition, in a DeviceTaintRule a value provided during an // update gets replaced with the current time if the provided // value is the same as the old one and the new effect is // different. Changing the key and/or value while keeping the // effect unchanged is possible and does not update the time // stamp because the eviction which uses it is either already // started (NoExecute) or not started yet (NoEffect, NoSchedule). "timeAdded"?: v1.#Time // The taint value corresponding to the taint key. Must be a label // value. "value"?: string } // DeviceTaintRule adds one taint to all devices which match the // selector. This has the same effect as if the taint was // specified directly in the ResourceSlice by the DRA driver. #DeviceTaintRule: { // APIVersion defines the versioned schema of this representation // of an object. Servers should convert recognized schemas to the // latest internal value, and may reject unrecognized values. // More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "resource.k8s.io/v1alpha3" // Kind is a string value representing the REST resource this // object represents. Servers may infer this from the endpoint // the client submits requests to. Cannot be updated. In // CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "DeviceTaintRule" // Standard object metadata "metadata"?: v1.#ObjectMeta // Spec specifies the selector and one taint. // // Changing the spec automatically increments the // metadata.generation number. "spec"!: #DeviceTaintRuleSpec // Status provides information about what was requested in the // spec. "status"?: #DeviceTaintRuleStatus } // DeviceTaintRuleList is a collection of DeviceTaintRules. #DeviceTaintRuleList: { // APIVersion defines the versioned schema of this representation // of an object. Servers should convert recognized schemas to the // latest internal value, and may reject unrecognized values. // More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "resource.k8s.io/v1alpha3" // Items is the list of DeviceTaintRules. "items"!: [...#DeviceTaintRule] // Kind is a string value representing the REST resource this // object represents. Servers may infer this from the endpoint // the client submits requests to. Cannot be updated. In // CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "DeviceTaintRuleList" // Standard list metadata "metadata"?: v1.#ListMeta } // DeviceTaintRuleSpec specifies the selector and one taint. #DeviceTaintRuleSpec: { // DeviceSelector defines which device(s) the taint is applied to. // All selector criteria must be satisfied for a device to match. // The empty selector matches all devices. Without a selector, no // devices are matches. "deviceSelector"?: #DeviceTaintSelector // The taint that gets applied to matching devices. "taint"!: #DeviceTaint } // DeviceTaintRuleStatus provides information about an on-going // pod eviction. #DeviceTaintRuleStatus: { // Conditions provide information about the state of the // DeviceTaintRule and the cluster at some point in time, in a // machine-readable and human-readable format. // // The following condition is currently defined as part of this // API, more may get added: - Type: EvictionInProgress - Status: // True if there are currently pods which need to be evicted, // False otherwise // (includes the effects which don't cause eviction). // - Reason: not specified, may change - Message: includes // information about number of pending pods and already evicted // pods // in a human-readable format, updated periodically, may change // // For `effect: None`, the condition above gets set once for each // change to the spec, with the message containing information // about what would happen if the effect was `NoExecute`. This // feedback can be used to decide whether changing the effect to // `NoExecute` will work as intended. It only gets set once to // avoid having to constantly update the status. // // Must have 8 or fewer entries. "conditions"?: [...v1.#Condition] } // DeviceTaintSelector defines which device(s) a DeviceTaintRule // applies to. The empty selector matches all devices. Without a // selector, no devices are matched. #DeviceTaintSelector: { // If device is set, only devices with that name are selected. // This field corresponds to slice.spec.devices[].name. // // Setting also driver and pool may be required to avoid // ambiguity, but is not required. "device"?: string // If driver is set, only devices from that driver are selected. // This fields corresponds to slice.spec.driver. "driver"?: string // If pool is set, only devices in that pool are selected. // // Also setting the driver name may be useful to avoid ambiguity // when different drivers use the same pool name, but this is not // required because selecting pools from different drivers may // also be useful, for example when drivers with node-local // devices use the node name as their pool name. "pool"?: string } // PoolStatus contains status information for a single resource // pool. #PoolStatus: { // AllocatedDevices is the number of devices currently allocated // to claims. A value of 0 means no devices are allocated. May be // unset when validationError is set. "allocatedDevices"?: int32 & int // AvailableDevices is the number of devices available for // allocation. This equals TotalDevices - AllocatedDevices - // UnavailableDevices. A value of 0 means no devices are // currently available. May be unset when validationError is set. "availableDevices"?: int32 & int // Driver is the DRA driver name for this pool. Must be a DNS // subdomain (e.g., "gpu.example.com"). "driver"!: string // Generation is the pool generation observed across all // ResourceSlices in this pool. Only the latest generation is // reported. During a generation rollout, if not all slices at // the latest generation have been published, the pool is // included with a validationError and device counts unset. "generation"!: int64 & int // NodeName is the node this pool is associated with. When // omitted, the pool is not associated with a specific node. Must // be a valid DNS subdomain name (RFC1123). "nodeName"?: string // PoolName is the name of the pool. Must be a valid resource pool // name (DNS subdomains separated by "/"). "poolName"!: string // ResourceSliceCount is the number of ResourceSlices that make up // this pool. May be unset when validationError is set. "resourceSliceCount"?: int32 & int // TotalDevices is the total number of devices in the pool across // all slices. A value of 0 means the pool has no devices. May be // unset when validationError is set. "totalDevices"?: int32 & int // UnavailableDevices is the number of devices that are not // available due to taints or other conditions, but are not // allocated. A value of 0 means all unallocated devices are // available. May be unset when validationError is set. "unavailableDevices"?: int32 & int // ValidationError is set when the pool's data could not be fully // validated (e.g., incomplete slice publication). When set, // device count fields and ResourceSliceCount may be unset. "validationError"?: string } // ResourcePoolStatusRequest triggers a one-time calculation of // resource pool status based on the provided filters. Once // status is set, the request is considered complete and will not // be reprocessed. Users should delete and recreate requests to // get updated information. #ResourcePoolStatusRequest: { // APIVersion defines the versioned schema of this representation // of an object. Servers should convert recognized schemas to the // latest internal value, and may reject unrecognized values. // More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "resource.k8s.io/v1alpha3" // Kind is a string value representing the REST resource this // object represents. Servers may infer this from the endpoint // the client submits requests to. Cannot be updated. In // CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "ResourcePoolStatusRequest" // Standard object metadata "metadata"!: v1.#ObjectMeta // Spec defines the filters for which pools to include in the // status. The spec is immutable once created. "spec"!: #ResourcePoolStatusRequestSpec // Status is populated by the controller with the calculated pool // status. When status is non-nil, the request is considered // complete and the entire object becomes immutable. "status"?: #ResourcePoolStatusRequestStatus } // ResourcePoolStatusRequestList is a collection of // ResourcePoolStatusRequests. #ResourcePoolStatusRequestList: { // APIVersion defines the versioned schema of this representation // of an object. Servers should convert recognized schemas to the // latest internal value, and may reject unrecognized values. // More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources "apiVersion": "resource.k8s.io/v1alpha3" // Items is the list of ResourcePoolStatusRequests. "items"!: [...#ResourcePoolStatusRequest] // Kind is a string value representing the REST resource this // object represents. Servers may infer this from the endpoint // the client submits requests to. Cannot be updated. In // CamelCase. More info: // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "kind": "ResourcePoolStatusRequestList" // Standard list metadata "metadata"?: v1.#ListMeta } // ResourcePoolStatusRequestSpec defines the filters for the pool // status request. #ResourcePoolStatusRequestSpec: { // Driver specifies the DRA driver name to filter pools. Only // pools from ResourceSlices with this driver will be included. // Must be a DNS subdomain (e.g., "gpu.example.com"). "driver"!: string // Limit optionally specifies the maximum number of pools to // return in the status. If more pools match the filter criteria, // the response will be truncated (i.e., len(status.pools) < // status.poolCount). // // Default: 100 Minimum: 1 Maximum: 1000 "limit"?: int32 & int // PoolName optionally filters to a specific pool name. If not // specified, all pools from the specified driver are included. // When specified, must be a non-empty valid resource pool name // (DNS subdomains separated by "/"). "poolName"?: string } // ResourcePoolStatusRequestStatus contains the calculated pool // status information. #ResourcePoolStatusRequestStatus: { // Conditions provide information about the state of the request. // A condition with type=Complete or type=Failed will always be // set when the status is populated. // // Known condition types: - "Complete": True when the request has // been processed successfully - "Failed": True when the request // could not be processed "conditions"?: [...v1.#Condition] // PoolCount is the total number of pools that matched the filter // criteria, regardless of truncation. This helps users // understand how many pools exist even when the response is // truncated. A value of 0 means no pools matched the filter // criteria. "poolCount"!: int32 & int // Pools contains the first `spec.limit` matching pools, sorted by // driver then pool name. If `len(pools) < poolCount`, the list // was truncated. When omitted, no pools matched the request // filters. "pools"?: [...#PoolStatus] }