apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  labels:
    app.kubernetes.io/component: kubevirt
    app.kubernetes.io/managed-by: virt-operator
    kubevirt.io: ""
  name: virtualmachineclusterinstancetypes.instancetype.kubevirt.io
spec:
  conversion:
    strategy: None
  group: instancetype.kubevirt.io
  names:
    kind: VirtualMachineClusterInstancetype
    listKind: VirtualMachineClusterInstancetypeList
    plural: virtualmachineclusterinstancetypes
    shortNames:
      - vmclusterinstancetype
      - vmclusterinstancetypes
      - vmcf
      - vmcfs
    singular: virtualmachineclusterinstancetype
  scope: Cluster
  versions:
    - deprecated: true
      deprecationWarning: instancetype.kubevirt.io/v1alpha1 VirtualMachineClusterInstanceTypes is now deprecated and will be removed in v1.
      name: v1alpha1
      schema:
        openAPIV3Schema:
          description: VirtualMachineClusterInstancetype is a cluster scoped version of VirtualMachineInstancetype resource.
          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: Required spec describing the instancetype
              properties:
                cpu:
                  description: Required CPU related attributes of the instancetype.
                  properties:
                    dedicatedCPUPlacement:
                      description: DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.
                      type: boolean
                    guest:
                      description: "Required number of vCPUs to expose to the guest. \n The resulting CPU topology being derived from the optional PreferredCPUTopology attribute of CPUPreferences that itself defaults to PreferSockets."
                      format: int32
                      type: integer
                    isolateEmulatorThread:
                      description: IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.
                      type: boolean
                    model:
                      description: Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like "host-passthrough" to get the same CPU as the node and "host-model" to get CPU closest to the node one. Defaults to host-model.
                      type: string
                    numa:
                      description: NUMA allows specifying settings for the guest NUMA topology
                      properties:
                        guestMappingPassthrough:
                          description: GuestMappingPassthrough will create an efficient guest topology based on host CPUs exclusively assigned to a pod. The created topology ensures that memory and CPUs on the virtual numa nodes never cross boundaries of host numa nodes.
                          type: object
                      type: object
                    realtime:
                      description: Realtime instructs the virt-launcher to tune the VMI for lower latency, optional for real time workloads
                      properties:
                        mask:
                          description: 'Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt''s expressions. Example: "0-3,^1","0,2,3","2-3"'
                          type: string
                      type: object
                  required:
                    - guest
                  type: object
                gpus:
                  description: Optionally defines any GPU devices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        type: string
                      name:
                        description: Name of the GPU device as exposed by a device plugin
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                      virtualGPUOptions:
                        properties:
                          display:
                            properties:
                              enabled:
                                description: Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.
                                type: boolean
                              ramFB:
                                description: Enables a boot framebuffer, until the guest OS loads a real GPU driver Defaults to true.
                                properties:
                                  enabled:
                                    description: Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.
                                    type: boolean
                                type: object
                            type: object
                        type: object
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                hostDevices:
                  description: Optionally defines any HostDevices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        description: DeviceName is the resource name of the host device exposed by a device plugin
                        type: string
                      name:
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                ioThreadsPolicy:
                  description: Optionally defines the IOThreadsPolicy to be used by the instancetype.
                  type: string
                launchSecurity:
                  description: Optionally defines the LaunchSecurity to be used by the instancetype.
                  properties:
                    sev:
                      description: AMD Secure Encrypted Virtualization (SEV).
                      properties:
                        policy:
                          description: 'Guest policy flags as defined in AMD SEV API specification. Note: due to security reasons it is not allowed to enable guest debugging. Therefore NoDebug flag is not exposed to users and is always true.'
                          properties:
                            encryptedState:
                              description: SEV-ES is required. Defaults to false.
                              type: boolean
                          type: object
                      type: object
                  type: object
                memory:
                  description: Required Memory related attributes of the instancetype.
                  properties:
                    guest:
                      anyOf:
                        - type: integer
                        - type: string
                      description: Required amount of memory which is visible inside the guest OS.
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    hugepages:
                      description: Optionally enables the use of hugepages for the VirtualMachineInstance instead of regular memory.
                      properties:
                        pageSize:
                          description: PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.
                          type: string
                      type: object
                    overcommitPercent:
                      description: OvercommitPercent is the percentage of the guest memory which will be overcommitted. This means that the VMIs parent pod (virt-launcher) will request less physical memory by a factor specified by the OvercommitPercent. Overcommits can lead to memory exhaustion, which in turn can lead to crashes. Use carefully. Defaults to 0
                      maximum: 100
                      minimum: 0
                      type: integer
                  required:
                    - guest
                  type: object
              required:
                - cpu
                - memory
              type: object
          required:
            - spec
          type: object
      served: true
      storage: false
    - deprecated: true
      deprecationWarning: instancetype.kubevirt.io/v1alpha2 VirtualMachineClusterInstanceTypes is now deprecated and will be removed in v1.
      name: v1alpha2
      schema:
        openAPIV3Schema:
          description: VirtualMachineClusterInstancetype is a cluster scoped version of VirtualMachineInstancetype resource.
          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: Required spec describing the instancetype
              properties:
                cpu:
                  description: Required CPU related attributes of the instancetype.
                  properties:
                    dedicatedCPUPlacement:
                      description: DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.
                      type: boolean
                    guest:
                      description: "Required number of vCPUs to expose to the guest. \n The resulting CPU topology being derived from the optional PreferredCPUTopology attribute of CPUPreferences that itself defaults to PreferSockets."
                      format: int32
                      type: integer
                    isolateEmulatorThread:
                      description: IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.
                      type: boolean
                    model:
                      description: Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like "host-passthrough" to get the same CPU as the node and "host-model" to get CPU closest to the node one. Defaults to host-model.
                      type: string
                    numa:
                      description: NUMA allows specifying settings for the guest NUMA topology
                      properties:
                        guestMappingPassthrough:
                          description: GuestMappingPassthrough will create an efficient guest topology based on host CPUs exclusively assigned to a pod. The created topology ensures that memory and CPUs on the virtual numa nodes never cross boundaries of host numa nodes.
                          type: object
                      type: object
                    realtime:
                      description: Realtime instructs the virt-launcher to tune the VMI for lower latency, optional for real time workloads
                      properties:
                        mask:
                          description: 'Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt''s expressions. Example: "0-3,^1","0,2,3","2-3"'
                          type: string
                      type: object
                  required:
                    - guest
                  type: object
                gpus:
                  description: Optionally defines any GPU devices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        type: string
                      name:
                        description: Name of the GPU device as exposed by a device plugin
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                      virtualGPUOptions:
                        properties:
                          display:
                            properties:
                              enabled:
                                description: Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.
                                type: boolean
                              ramFB:
                                description: Enables a boot framebuffer, until the guest OS loads a real GPU driver Defaults to true.
                                properties:
                                  enabled:
                                    description: Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.
                                    type: boolean
                                type: object
                            type: object
                        type: object
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                hostDevices:
                  description: Optionally defines any HostDevices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        description: DeviceName is the resource name of the host device exposed by a device plugin
                        type: string
                      name:
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                ioThreadsPolicy:
                  description: Optionally defines the IOThreadsPolicy to be used by the instancetype.
                  type: string
                launchSecurity:
                  description: Optionally defines the LaunchSecurity to be used by the instancetype.
                  properties:
                    sev:
                      description: AMD Secure Encrypted Virtualization (SEV).
                      properties:
                        policy:
                          description: 'Guest policy flags as defined in AMD SEV API specification. Note: due to security reasons it is not allowed to enable guest debugging. Therefore NoDebug flag is not exposed to users and is always true.'
                          properties:
                            encryptedState:
                              description: SEV-ES is required. Defaults to false.
                              type: boolean
                          type: object
                      type: object
                  type: object
                memory:
                  description: Required Memory related attributes of the instancetype.
                  properties:
                    guest:
                      anyOf:
                        - type: integer
                        - type: string
                      description: Required amount of memory which is visible inside the guest OS.
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    hugepages:
                      description: Optionally enables the use of hugepages for the VirtualMachineInstance instead of regular memory.
                      properties:
                        pageSize:
                          description: PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.
                          type: string
                      type: object
                    overcommitPercent:
                      description: OvercommitPercent is the percentage of the guest memory which will be overcommitted. This means that the VMIs parent pod (virt-launcher) will request less physical memory by a factor specified by the OvercommitPercent. Overcommits can lead to memory exhaustion, which in turn can lead to crashes. Use carefully. Defaults to 0
                      maximum: 100
                      minimum: 0
                      type: integer
                  required:
                    - guest
                  type: object
              required:
                - cpu
                - memory
              type: object
          required:
            - spec
          type: object
      served: true
      storage: false
    - name: v1beta1
      schema:
        openAPIV3Schema:
          description: VirtualMachineClusterInstancetype is a cluster scoped version of VirtualMachineInstancetype resource.
          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: Required spec describing the instancetype
              properties:
                cpu:
                  description: Required CPU related attributes of the instancetype.
                  properties:
                    dedicatedCPUPlacement:
                      description: DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.
                      type: boolean
                    guest:
                      description: "Required number of vCPUs to expose to the guest. \n The resulting CPU topology being derived from the optional PreferredCPUTopology attribute of CPUPreferences that itself defaults to PreferSockets."
                      format: int32
                      type: integer
                    isolateEmulatorThread:
                      description: IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.
                      type: boolean
                    model:
                      description: Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like "host-passthrough" to get the same CPU as the node and "host-model" to get CPU closest to the node one. Defaults to host-model.
                      type: string
                    numa:
                      description: NUMA allows specifying settings for the guest NUMA topology
                      properties:
                        guestMappingPassthrough:
                          description: GuestMappingPassthrough will create an efficient guest topology based on host CPUs exclusively assigned to a pod. The created topology ensures that memory and CPUs on the virtual numa nodes never cross boundaries of host numa nodes.
                          type: object
                      type: object
                    realtime:
                      description: Realtime instructs the virt-launcher to tune the VMI for lower latency, optional for real time workloads
                      properties:
                        mask:
                          description: 'Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt''s expressions. Example: "0-3,^1","0,2,3","2-3"'
                          type: string
                      type: object
                  required:
                    - guest
                  type: object
                gpus:
                  description: Optionally defines any GPU devices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        type: string
                      name:
                        description: Name of the GPU device as exposed by a device plugin
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                      virtualGPUOptions:
                        properties:
                          display:
                            properties:
                              enabled:
                                description: Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.
                                type: boolean
                              ramFB:
                                description: Enables a boot framebuffer, until the guest OS loads a real GPU driver Defaults to true.
                                properties:
                                  enabled:
                                    description: Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.
                                    type: boolean
                                type: object
                            type: object
                        type: object
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                hostDevices:
                  description: Optionally defines any HostDevices associated with the instancetype.
                  items:
                    properties:
                      deviceName:
                        description: DeviceName is the resource name of the host device exposed by a device plugin
                        type: string
                      name:
                        type: string
                      tag:
                        description: If specified, the virtual network interface address and its tag will be provided to the guest via config drive
                        type: string
                    required:
                      - deviceName
                      - name
                    type: object
                  type: array
                  x-kubernetes-list-type: atomic
                ioThreadsPolicy:
                  description: Optionally defines the IOThreadsPolicy to be used by the instancetype.
                  type: string
                launchSecurity:
                  description: Optionally defines the LaunchSecurity to be used by the instancetype.
                  properties:
                    sev:
                      description: AMD Secure Encrypted Virtualization (SEV).
                      properties:
                        policy:
                          description: 'Guest policy flags as defined in AMD SEV API specification. Note: due to security reasons it is not allowed to enable guest debugging. Therefore NoDebug flag is not exposed to users and is always true.'
                          properties:
                            encryptedState:
                              description: SEV-ES is required. Defaults to false.
                              type: boolean
                          type: object
                      type: object
                  type: object
                memory:
                  description: Required Memory related attributes of the instancetype.
                  properties:
                    guest:
                      anyOf:
                        - type: integer
                        - type: string
                      description: Required amount of memory which is visible inside the guest OS.
                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                      x-kubernetes-int-or-string: true
                    hugepages:
                      description: Optionally enables the use of hugepages for the VirtualMachineInstance instead of regular memory.
                      properties:
                        pageSize:
                          description: PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.
                          type: string
                      type: object
                    overcommitPercent:
                      description: OvercommitPercent is the percentage of the guest memory which will be overcommitted. This means that the VMIs parent pod (virt-launcher) will request less physical memory by a factor specified by the OvercommitPercent. Overcommits can lead to memory exhaustion, which in turn can lead to crashes. Use carefully. Defaults to 0
                      maximum: 100
                      minimum: 0
                      type: integer
                  required:
                    - guest
                  type: object
              required:
                - cpu
                - memory
              type: object
          required:
            - spec
          type: object
      served: true
      storage: true