---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.2-0.20250203100058-d1f73b5ea552
  labels:
    cluster.x-k8s.io/v1beta1: v1beta1
  name: kkmachines.infrastructure.cluster.x-k8s.io
spec:
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: KKMachine
    listKind: KKMachineList
    plural: kkmachines
    shortNames:
    - kkm
    singular: kkmachine
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: Cluster to which this KKMachine belongs
      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
      name: Cluster
      type: string
    - description: the providerID for the machine
      jsonPath: .spec.providerID
      name: ProviderID
      type: string
    - description: Machine ready status
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: Machine object which owns with this KKMachine
      jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
      name: Machine
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: KKMachine resource maps a machine instance, manage and reconcile
          machine status.
        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:
            description: KKMachineSpec defines the desired state of KKMachine.
            properties:
              config:
                description: Config for machine. contains cluster version, binary
                  version, etc.
                type: object
                x-kubernetes-preserve-unknown-fields: true
              failureDomain:
                description: |-
                  failureDomain is the failure domain the machine will be created in.
                  Must match a key in the FailureDomains map stored on the cluster object.
                type: string
              providerID:
                description: |-
                  providerID is the identification ID of the machine provided by the provider.
                  This field must match the provider ID as seen on the node object corresponding to this machine.
                  This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
                  with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
                  machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
                  generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
                  able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
                  and then a comparison is done to find out unregistered machines and are marked for delete.
                  This field will be set by the actuators and consumed by higher level entities like autoscaler that will
                  be interfacing with cluster-api as generic provider.
                type: string
              roles:
                description: |-
                  Roles defines the roles assigned to the Kubernetes cluster node, such as "worker" or "control-plane".
                  A KKMachine created by ControlPlane will automatically have the "control-plane" role.
                  A KKMachine created by MachineDeployment will automatically have the "worker" role.
                  Additional custom roles can also be specified in this field as needed.
                items:
                  type: string
                type: array
              version:
                description: |-
                  version defines the desired Kubernetes version.
                  This field is meant to be optionally used by bootstrap providers.
                type: string
            type: object
          status:
            description: KKMachineStatus defines the observed state of KKMachine.
            properties:
              certificatesExpiryDate:
                description: |-
                  certificatesExpiryDate is the expiry date of the machine certificates.
                  This value is only set for control plane machines.
                format: date-time
                type: string
              conditions:
                description: Conditions defines current service state of the KKMachine.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: |-
                        Last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed. If that is not known, then using the time when
                        the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        A human readable message indicating details about the transition.
                        This field may be empty.
                      type: string
                    reason:
                      description: |-
                        The reason for the condition's last transition in CamelCase.
                        The specific API may choose whether or not this field is considered a guaranteed API.
                        This field may be empty.
                      type: string
                    severity:
                      description: |-
                        severity provides an explicit classification of Reason code, so the users or machines can immediately
                        understand the current situation and act accordingly.
                        The Severity field MUST be set only when Status=False.
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: |-
                        type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
                        can be useful (see .node.status.conditions), the ability to deconflict is important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              failureMessage:
                description: FailureMessage will be set in the event that there is
                  a terminal problem
                type: string
              failureReason:
                description: FailureReason will be set in the event that there is
                  a terminal problem
                type: string
              ready:
                description: Ready is true when the provider resource is ready.
                type: boolean
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
