---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.2
  name: cloudstackmachineconfigs.anywhere.eks.amazonaws.com
spec:
  group: anywhere.eks.amazonaws.com
  names:
    kind: CloudStackMachineConfig
    listKind: CloudStackMachineConfigList
    plural: cloudstackmachineconfigs
    singular: cloudstackmachineconfig
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: CloudStackMachineConfig is the Schema for the cloudstackmachineconfigs
          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: CloudStackMachineConfigSpec defines the desired state of
              CloudStackMachineConfig.
            properties:
              affinity:
                description: |-
                  Defaults to `no`. Can be `pro` or `anti`. If set to `pro` or `anti`, will create an affinity
                  group per machine set of the corresponding type
                type: string
              affinityGroupIds:
                description: |-
                  AffinityGroupIds allows users to pass in a list of UUIDs for previously-created Affinity
                  Groups. Any VM’s created with this spec will be added to the affinity group, which will
                  dictate which physical host(s) they can be placed on. Affinity groups can be type “affinity”
                  or “anti-affinity” in CloudStack. If they are type “anti-affinity”, all VM’s in the group
                  must be on separate physical hosts for high availability. If they are type “affinity”, all
                  VM’s in the group must be on the same physical host for improved performance
                items:
                  type: string
                type: array
              computeOffering:
                description: |-
                  ComputeOffering refers to a compute offering which has been previously registered in
                  CloudStack. It represents a VM’s instance size including number of CPU’s, memory, and CPU
                  speed. It can either be specified as a UUID or name
                properties:
                  id:
                    description: Id of a resource in the CloudStack environment. Mutually
                      exclusive with Name
                    type: string
                  name:
                    description: Name of a resource in the CloudStack environment.
                      Mutually exclusive with Id
                    type: string
                type: object
              diskOffering:
                description: |-
                  DiskOffering refers to a disk offering which has been previously registered in CloudStack.
                  It represents a disk offering with pre-defined size or custom specified disk size. It can
                  either be specified as a UUID or name
                properties:
                  customSizeInGB:
                    description: disk size in GB, > 0 for customized disk offering;
                      = 0 for non-customized disk offering
                    format: int64
                    type: integer
                  device:
                    description: device name of the disk offering in VM, shows up
                      in lsblk command
                    type: string
                  filesystem:
                    description: filesystem used to mkfs in disk offering partition
                    type: string
                  id:
                    description: Id of a resource in the CloudStack environment. Mutually
                      exclusive with Name
                    type: string
                  label:
                    description: disk label used to label disk partition
                    type: string
                  mountPath:
                    description: path the filesystem will use to mount in VM
                    type: string
                  name:
                    description: Name of a resource in the CloudStack environment.
                      Mutually exclusive with Id
                    type: string
                required:
                - device
                - filesystem
                - label
                - mountPath
                type: object
              symlinks:
                additionalProperties:
                  type: string
                description: Symlinks create soft symbolic links folders. One use
                  case is to use data disk to store logs
                type: object
              template:
                description: |-
                  Template refers to a VM image template which has been previously registered in CloudStack.
                  It can either be specified as a UUID or name.
                  When using a template name it must include the Kubernetes version(s). For example,
                  a template used for Kubernetes 1.27 could be ubuntu-2204-1.27.
                properties:
                  id:
                    description: Id of a resource in the CloudStack environment. Mutually
                      exclusive with Name
                    type: string
                  name:
                    description: Name of a resource in the CloudStack environment.
                      Mutually exclusive with Id
                    type: string
                type: object
              userCustomDetails:
                additionalProperties:
                  type: string
                description: |-
                  UserCustomDetails allows users to pass in non-standard key value inputs, outside those
                  defined [here](https://github.com/shapeblue/cloudstack/blob/main/api/src/main/java/com/cloud/vm/VmDetailConstants.java)
                type: object
              users:
                description: |-
                  Users consists of an array of objects containing the username, as well as a list of their
                  public keys. These users will be authorized to ssh into the machines
                items:
                  description: UserConfiguration defines the configuration of the
                    user to be added to the VM.
                  properties:
                    name:
                      type: string
                    sshAuthorizedKeys:
                      items:
                        type: string
                      type: array
                  required:
                  - name
                  - sshAuthorizedKeys
                  type: object
                type: array
            required:
            - computeOffering
            - template
            type: object
          status:
            description: CloudStackMachineConfigStatus defines the observed state
              of CloudStackMachineConfig.
            properties:
              failureMessage:
                description: |-
                  FailureMessage indicates that there is a fatal problem reconciling the
                  state, and will be set to a descriptive error message.
                type: string
              specValid:
                description: SpecValid is set to true if cloudstackmachineconfig is
                  validated.
                type: boolean
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
