--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.18.0 kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"apiextensions.k8s.io/v1","kind":"CustomResourceDefinition","metadata":{"annotations":{"controller-gen.kubebuilder.io/version":"v0.18.0"},"name":"trainers.components.platform.opendatahub.io"},"spec":{"group":"components.platform.opendatahub.io","names":{"kind":"Trainer","listKind":"TrainerList","plural":"trainers","singular":"trainer"},"scope":"Cluster","versions":[{"additionalPrinterColumns":[{"jsonPath":".status.conditions[?(@.type=='Ready')].status","name":"Ready","type":"string"},{"jsonPath":".status.conditions[?(@.type=='Ready')].reason","name":"Reason","type":"string"},{"jsonPath":".metadata.creationTimestamp","name":"Age","type":"date"}],"name":"v1alpha1","schema":{"openAPIV3Schema":{"description":"Trainer is the Schema for the trainers API.","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"type":"object"},"spec":{"properties":{"appNamespace":{"type":"string"},"controllers":{"items":{"properties":{"name":{"type":"string"},"resources":{"description":"ResourceRequirements describes the compute resource requirements.","properties":{"claims":{"description":"Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.","items":{"description":"ResourceClaim references one entry in PodSpec.ResourceClaims.","properties":{"name":{"description":"Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.","type":"string"},"request":{"description":"Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.","type":"string"}},"required":["name"],"type":"object"},"type":"array","x-kubernetes-list-map-keys":["name"],"x-kubernetes-list-type":"map"},"limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Limits describes the maximum amount of compute resources allowed.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/","type":"object"},"requests":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"string"}],"pattern":"^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$","x-kubernetes-int-or-string":true},"description":"Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is explicitly specified,\notherwise to an implementation-defined value. Requests cannot exceed Limits.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/","type":"object"}},"type":"object"}},"required":["name"],"type":"object"},"type":"array"},"featureGates":{"additionalProperties":{"type":"boolean"},"type":"object"}},"type":"object"},"status":{"properties":{"conditions":{"items":{"description":"Condition represents an observation of an object's state.","properties":{"lastHeartbeatTime":{"description":"The last time we got an update on a given condition, this should not be set and is\npresent only for backward compatibility reasons.","format":"date-time","type":"string"},"lastTransitionTime":{"description":"lastTransitionTime is the last time the condition transitioned from one status to another.","format":"date-time","type":"string"},"message":{"description":"message is a human-readable message indicating details about the transition.","type":"string"},"observedGeneration":{"description":"observedGeneration represents the .metadata.generation that the condition was set based upon.","format":"int64","minimum":0,"type":"integer"},"reason":{"description":"reason contains a programmatic identifier indicating the reason for the condition's last transition.","type":"string"},"severity":{"description":"Severity with which to treat failures of this type of condition.\nWhen this is not specified, it defaults to Error.","type":"string"},"status":{"description":"status of the condition, one of True, False, Unknown.","enum":["True","False","Unknown"],"type":"string"},"type":{"description":"type of condition in CamelCase or in foo.example.com/CamelCase.","maxLength":316,"pattern":"^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$","type":"string"}},"required":["status","type"],"type":"object"},"type":"array","x-kubernetes-list-type":"atomic"},"observedGeneration":{"description":"The generation observed by the resource controller.","format":"int64","type":"integer"},"phase":{"type":"string"},"releases":{"items":{"description":"ComponentRelease represents the detailed status of a component release.","properties":{"name":{"type":"string"},"repoUrl":{"type":"string"},"version":{"type":"string"}},"required":["name"],"type":"object"},"type":"array","x-kubernetes-list-map-keys":["name"],"x-kubernetes-list-type":"map"}},"type":"object"}},"type":"object","x-kubernetes-validations":[{"message":"Trainer must be named 'default-trainer'","rule":"self.metadata.name == 'default-trainer'"}]}},"served":true,"storage":true,"subresources":{"status":{}}}]}} creationTimestamp: "2026-09-18T03:24:45Z" generation: 1 managedFields: - apiVersion: apiextensions.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:status: f:acceptedNames: f:kind: {} f:listKind: {} f:plural: {} f:singular: {} f:conditions: k:{"type":"Established"}: .: {} f:lastTransitionTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} k:{"type":"NamesAccepted"}: .: {} f:lastTransitionTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} manager: kube-apiserver operation: Update subresource: status time: "2026-09-18T03:24:45Z" - apiVersion: apiextensions.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:controller-gen.kubebuilder.io/version: {} f:kubectl.kubernetes.io/last-applied-configuration: {} f:spec: f:conversion: .: {} f:strategy: {} f:group: {} f:names: f:kind: {} f:listKind: {} f:plural: {} f:singular: {} f:scope: {} f:versions: {} manager: kubectl-client-side-apply operation: Update time: "2026-09-18T03:24:45Z" name: trainers.components.platform.opendatahub.io resourceVersion: "12885" uid: b0d5d5fa-699d-4f87-aa86-54c6b21a3722 spec: conversion: strategy: None group: components.platform.opendatahub.io names: kind: Trainer listKind: TrainerList plural: trainers singular: trainer scope: Cluster versions: - additionalPrinterColumns: - jsonPath: .status.conditions[?(@.type=='Ready')].status name: Ready type: string - jsonPath: .status.conditions[?(@.type=='Ready')].reason name: Reason type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: Trainer is the Schema for the trainers API. properties: apiVersion: description: |- 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 type: string kind: description: |- 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 type: string metadata: type: object spec: properties: appNamespace: type: string controllers: items: properties: name: type: string resources: description: ResourceRequirements describes the compute resource requirements. properties: claims: description: |- Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. This field depends on the DynamicResourceAllocation feature gate. This field is immutable. It can only be set for containers. items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. properties: name: description: |- Name must match the name of one entry in pod.spec.resourceClaims of the Pod where this field is used. It makes that resource available inside a container. type: string request: description: |- Request is the name chosen for a request in the referenced claim. If empty, everything from the claim is made available, otherwise only the result of this request. type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map limits: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: |- Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object requests: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: |- Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object type: object required: - name type: object type: array featureGates: additionalProperties: type: boolean type: object type: object status: properties: conditions: items: description: Condition represents an observation of an object's state. properties: lastHeartbeatTime: description: |- The last time we got an update on a given condition, this should not be set and is present only for backward compatibility reasons. format: date-time type: string lastTransitionTime: description: lastTransitionTime is the last time the condition transitioned from one status to another. format: date-time type: string message: description: message is a human-readable message indicating details about the transition. type: string observedGeneration: description: observedGeneration represents the .metadata.generation that the condition was set based upon. format: int64 minimum: 0 type: integer reason: description: reason contains a programmatic identifier indicating the reason for the condition's last transition. type: string severity: description: |- Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error. type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - status - type type: object type: array x-kubernetes-list-type: atomic observedGeneration: description: The generation observed by the resource controller. format: int64 type: integer phase: type: string releases: items: description: ComponentRelease represents the detailed status of a component release. properties: name: type: string repoUrl: type: string version: type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object type: object x-kubernetes-validations: - message: Trainer must be named 'default-trainer' rule: self.metadata.name == 'default-trainer' served: true storage: true subresources: status: {} status: acceptedNames: kind: Trainer listKind: TrainerList plural: trainers singular: trainer conditions: - lastTransitionTime: "2026-09-18T03:24:45Z" message: no conflicts found reason: NoConflicts status: "True" type: NamesAccepted - lastTransitionTime: "2026-09-18T03:24:45Z" message: the initial names have been accepted reason: InitialNamesAccepted status: "True" type: Established storedVersions: - v1alpha1