---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.9.1
  creationTimestamp: null
  name: kkinstances.infrastructure.cluster.x-k8s.io
spec:
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: KKInstance
    listKind: KKInstanceList
    plural: kkinstances
    shortNames:
    - kki
    singular: kkinstance
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: kubekey instance hostname
      jsonPath: .spec.name
      name: Hostname
      type: string
    - description: kubekey instance address
      jsonPath: .spec.address
      name: Address
      type: string
    - description: KKInstance state
      jsonPath: .status.instanceState
      name: State
      type: string
    - description: Time duration since creation of KKInstance
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: Kubernetes version associated with this KKInstance
      jsonPath: .status.nodeInfo.kubeletVersion
      name: Version
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: KKInstance is the Schema for the kkinstances 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:
            description: KKInstanceSpec defines the desired state of KKInstance
            properties:
              address:
                description: Address is the IP address of the machine.
                type: string
              arch:
                description: Arch is the architecture of the machine. e.g. "amd64",
                  "arm64".
                type: string
              auth:
                description: Auth is the SSH authentication information of this machine.
                  It will override the global auth configuration.
                properties:
                  password:
                    description: Password is the password for SSH authentication.
                    type: string
                  port:
                    description: Port is the port for SSH authentication.
                    type: integer
                  privateKey:
                    description: PrivateKey is the value of the private key for SSH
                      authentication.
                    type: string
                  privateKeyPath:
                    description: PrivateKeyFile is the path to the private key for
                      SSH authentication.
                    type: string
                  secret:
                    description: Secret is the secret of the PrivateKey or Password
                      for SSH authentication.It should in the same namespace as capkk.
                      When Password is empty, replace it with data.password. When
                      PrivateKey is empty, replace it with data.privateKey
                    type: string
                  timeout:
                    description: Timeout is the timeout for establish an SSH connection.
                    format: int64
                    type: integer
                  user:
                    description: User is the username for SSH authentication.
                    type: string
                type: object
              containerManager:
                description: ContainerManager is the container manager config of this
                  machine.
                properties:
                  criDockerdVersion:
                    description: CRIDockerdVersion defines the version of cri-dockerd,
                      available only when Type is docker. https://github.com/Mirantis/cri-dockerd
                    type: string
                  criSocket:
                    description: CRISocket is used to connect an existing CRIClient.
                    type: string
                  crictlVersion:
                    description: CRICTLVersion defines the version of CRICTL.
                    type: string
                  type:
                    description: Type defines the type of ContainerManager. "docker",
                      "containerd"
                    type: string
                  version:
                    description: Version defines the version of ContainerManager.
                    type: string
                type: object
              internalAddress:
                description: InternalAddress is the internal IP address of the machine.
                type: string
              name:
                description: Name is the host name of the machine.
                minLength: 1
                type: string
              repository:
                description: Repository is the repository config of this machine.
                properties:
                  iso:
                    description: 'ISO specifies the ISO file name. There are 3 options:
                      "": empty string means will not install the packages. "none":
                      no ISO file will be used. And capkk will use the default repository
                      to install the required packages. "auto": capkk will detect
                      the ISO file automatically. Only support Ubuntu/Debian/CentOS.
                      "xxx-20.04-debs-amd64.iso": use the specified name to get the
                      ISO file name.'
                    type: string
                  packages:
                    description: Packages is a list of packages to be installed.
                    items:
                      type: string
                    type: array
                  update:
                    description: Update will update the repository packages list and
                      cache if it is true.
                    type: boolean
                type: object
              roles:
                description: Roles is the role of the machine.
                items:
                  description: Role represents a role of a node.
                  type: string
                type: array
            type: object
          status:
            description: KKInstanceStatus defines the observed state of KKInstance
            properties:
              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 not 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 reconciling the Machine and will contain a more
                  verbose string suitable for logging and human consumption. \n This
                  field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over time (like
                  service outages), but instead indicate that something is fundamentally
                  wrong with the Machine's spec or the configuration of the controller,
                  and that manual intervention is required. Examples of terminal errors
                  would be invalid combinations of settings in the spec, values that
                  are unsupported by the controller, or the responsible controller
                  itself being critically misconfigured. \n Any transient errors that
                  occur during the reconciliation of Machines can be added as events
                  to the Machine object and/or logged in the controller's output."
                type: string
              failureReason:
                description: "FailureReason will be set in the event that there is
                  a terminal problem reconciling the Machine and will contain a succinct
                  value suitable for machine interpretation. \n This field should
                  not be set for transitive errors that a controller faces that are
                  expected to be fixed automatically over time (like service outages),
                  but instead indicate that something is fundamentally wrong with
                  the Machine's spec or the configuration of the controller, and that
                  manual intervention is required. Examples of terminal errors would
                  be invalid combinations of settings in the spec, values that are
                  unsupported by the controller, or the responsible controller itself
                  being critically misconfigured. \n Any transient errors that occur
                  during the reconciliation of Machines can be added as events to
                  the Machine object and/or logged in the controller's output."
                type: string
              instanceState:
                description: The current state of the instance.
                type: string
              nodeInfo:
                description: 'NodeInfo is a set of ids/uuids to uniquely identify
                  the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info'
                properties:
                  architecture:
                    description: The Architecture reported by the node
                    type: string
                  bootID:
                    description: Boot ID reported by the node.
                    type: string
                  containerRuntimeVersion:
                    description: ContainerRuntime Version reported by the node through
                      runtime remote API (e.g. containerd://1.4.2).
                    type: string
                  kernelVersion:
                    description: Kernel Version reported by the node from 'uname -r'
                      (e.g. 3.16.0-0.bpo.4-amd64).
                    type: string
                  kubeProxyVersion:
                    description: KubeProxy Version reported by the node.
                    type: string
                  kubeletVersion:
                    description: Kubelet Version reported by the node.
                    type: string
                  machineID:
                    description: 'MachineID reported by the node. For unique machine
                      identification in the cluster this field is preferred. Learn
                      more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html'
                    type: string
                  operatingSystem:
                    description: The Operating System reported by the node
                    type: string
                  osImage:
                    description: OS Image reported by the node from /etc/os-release
                      (e.g. Debian GNU/Linux 7 (wheezy)).
                    type: string
                  systemUUID:
                    description: SystemUUID reported by the node. For unique machine
                      identification MachineID is preferred. This field is specific
                      to Red Hat hosts https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
                    type: string
                required:
                - architecture
                - bootID
                - containerRuntimeVersion
                - kernelVersion
                - kubeProxyVersion
                - kubeletVersion
                - machineID
                - operatingSystem
                - osImage
                - systemUUID
                type: object
              nodeRef:
                description: NodeRef will point to the corresponding Node if it exists.
                properties:
                  apiVersion:
                    description: API version of the referent.
                    type: string
                  fieldPath:
                    description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                    type: string
                  kind:
                    description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                    type: string
                  name:
                    description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                    type: string
                  namespace:
                    description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                    type: string
                  resourceVersion:
                    description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                    type: string
                  uid:
                    description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                    type: string
                type: object
                x-kubernetes-map-type: atomic
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
