apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    kubevirt.io/generation: "3"
    kubevirt.io/install-strategy-identifier: 5dc642dcafc20b388aac8893d36db44393e586b9
    kubevirt.io/install-strategy-registry: ""
    kubevirt.io/install-strategy-version: sha256:031a34ff7b451f8588ed2960c576d6a835a749de7c168e88eaec45d180be6a21
  creationTimestamp: "2025-10-29T11:53:45Z"
  generation: 1
  labels:
    app.kubernetes.io/component: compute
    app.kubernetes.io/managed-by: virt-operator
    app.kubernetes.io/part-of: hyperconverged-cluster
    app.kubernetes.io/version: 4.19.12
    kubevirt.io: ""
  managedFields:
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:acceptedNames:
          f:categories: {}
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:shortNames: {}
          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: "2025-10-29T11:53:45Z"
  - apiVersion: apiextensions.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubevirt.io/generation: {}
          f:kubevirt.io/install-strategy-identifier: {}
          f:kubevirt.io/install-strategy-registry: {}
          f:kubevirt.io/install-strategy-version: {}
        f:labels:
          .: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/managed-by: {}
          f:app.kubernetes.io/part-of: {}
          f:app.kubernetes.io/version: {}
          f:kubevirt.io: {}
      f:spec:
        f:conversion:
          .: {}
          f:strategy: {}
        f:group: {}
        f:names:
          f:categories: {}
          f:kind: {}
          f:listKind: {}
          f:plural: {}
          f:shortNames: {}
          f:singular: {}
        f:scope: {}
        f:versions: {}
    manager: virt-operator
    operation: Update
    time: "2025-10-29T13:20:44Z"
  name: virtualmachineinstancemigrations.kubevirt.io
  resourceVersion: "2228626"
  uid: 1917bc58-dec2-43f2-8092-fbb95487755b
spec:
  conversion:
    strategy: None
  group: kubevirt.io
  names:
    categories:
    - all
    kind: VirtualMachineInstanceMigration
    listKind: VirtualMachineInstanceMigrationList
    plural: virtualmachineinstancemigrations
    shortNames:
    - vmim
    - vmims
    singular: virtualmachineinstancemigration
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: The current phase of VM instance migration
      jsonPath: .status.phase
      name: Phase
      type: string
    - description: The name of the VMI to perform the migration on
      jsonPath: .spec.vmiName
      name: VMI
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: |-
          VirtualMachineInstanceMigration represents the object tracking a VMI's migration
          to another host in the cluster
        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:
              vmiName:
                description: The name of the VMI to perform the migration on. VMI
                  must exist in the migration objects namespace
                type: string
            type: object
          status:
            description: VirtualMachineInstanceMigration reprents information pertaining
              to a VMI's migration.
            properties:
              conditions:
                items:
                  properties:
                    lastProbeTime:
                      format: date-time
                      nullable: true
                      type: string
                    lastTransitionTime:
                      format: date-time
                      nullable: true
                      type: string
                    message:
                      type: string
                    reason:
                      type: string
                    status:
                      type: string
                    type:
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              migrationState:
                description: Represents the status of a live migration
                properties:
                  abortRequested:
                    description: Indicates that the migration has been requested to
                      abort
                    type: boolean
                  abortStatus:
                    description: Indicates the final status of the live migration
                      abortion
                    type: string
                  completed:
                    description: Indicates the migration completed
                    type: boolean
                  endTimestamp:
                    description: The time the migration action ended
                    format: date-time
                    nullable: true
                    type: string
                  failed:
                    description: Indicates that the migration failed
                    type: boolean
                  failureReason:
                    description: Contains the reason why the migration failed
                    type: string
                  migrationConfiguration:
                    description: Migration configurations to apply
                    properties:
                      allowAutoConverge:
                        description: |-
                          AllowAutoConverge allows the platform to compromise performance/availability of VMIs to
                          guarantee successful VMI live migrations. Defaults to false
                        type: boolean
                      allowPostCopy:
                        description: |-
                          AllowPostCopy enables post-copy live migrations. Such migrations allow even the busiest VMIs
                          to successfully live-migrate. However, events like a network failure can cause a VMI crash.
                          If set to true, migrations will still start in pre-copy, but switch to post-copy when
                          CompletionTimeoutPerGiB triggers. Defaults to false
                        type: boolean
                      allowWorkloadDisruption:
                        description: |-
                          AllowWorkloadDisruption indicates that the migration shouldn't be
                          canceled after acceptableCompletionTime is exceeded. Instead, if
                          permitted, migration will be switched to post-copy or the VMI will be
                          paused to allow the migration to complete
                        type: boolean
                      bandwidthPerMigration:
                        anyOf:
                        - type: integer
                        - type: string
                        description: |-
                          BandwidthPerMigration limits the amount of network bandwidth live migrations are allowed to use.
                          The value is in quantity per second. Defaults to 0 (no limit)
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      completionTimeoutPerGiB:
                        description: |-
                          CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
                          If the timeout is reached, the migration will be either paused, switched
                          to post-copy or cancelled depending on other settings. Defaults to 150
                        format: int64
                        type: integer
                      disableTLS:
                        description: |-
                          When set to true, DisableTLS will disable the additional layer of live migration encryption
                          provided by KubeVirt. This is usually a bad idea. Defaults to false
                        type: boolean
                      matchSELinuxLevelOnMigration:
                        description: |-
                          By default, the SELinux level of target virt-launcher pods is forced to the level of the source virt-launcher.
                          When set to true, MatchSELinuxLevelOnMigration lets the CRI auto-assign a random level to the target.
                          That will ensure the target virt-launcher doesn't share categories with another pod on the node.
                          However, migrations will fail when using RWX volumes that don't automatically deal with SELinux levels.
                        type: boolean
                      network:
                        description: |-
                          Network is the name of the CNI network to use for live migrations. By default, migrations go
                          through the pod network.
                        type: string
                      nodeDrainTaintKey:
                        description: |-
                          NodeDrainTaintKey defines the taint key that indicates a node should be drained.
                          Note: this option relies on the deprecated node taint feature. Default: kubevirt.io/drain
                        type: string
                      parallelMigrationsPerCluster:
                        description: |-
                          ParallelMigrationsPerCluster is the total number of concurrent live migrations
                          allowed cluster-wide. Defaults to 5
                        format: int32
                        type: integer
                      parallelOutboundMigrationsPerNode:
                        description: |-
                          ParallelOutboundMigrationsPerNode is the maximum number of concurrent outgoing live migrations
                          allowed per node. Defaults to 2
                        format: int32
                        type: integer
                      progressTimeout:
                        description: |-
                          ProgressTimeout is the maximum number of seconds a live migration is allowed to make no progress.
                          Hitting this timeout means a migration transferred 0 data for that many seconds. The migration is
                          then considered stuck and therefore cancelled. Defaults to 150
                        format: int64
                        type: integer
                      unsafeMigrationOverride:
                        description: |-
                          UnsafeMigrationOverride allows live migrations to occur even if the compatibility check
                          indicates the migration will be unsafe to the guest. Defaults to false
                        type: boolean
                    type: object
                  migrationPolicyName:
                    description: Name of the migration policy. If string is empty,
                      no policy is matched
                    type: string
                  migrationUid:
                    description: The VirtualMachineInstanceMigration object associated
                      with this migration
                    type: string
                  mode:
                    description: Lets us know if the vmi is currently running pre
                      or post copy migration
                    type: string
                  sourceNode:
                    description: The source node that the VMI originated on
                    type: string
                  sourcePersistentStatePVCName:
                    description: If the VMI being migrated uses persistent features
                      (backend-storage), its source PVC name is saved here
                    type: string
                  sourcePod:
                    type: string
                  startTimestamp:
                    description: The time the migration action began
                    format: date-time
                    nullable: true
                    type: string
                  targetAttachmentPodUID:
                    description: The UID of the target attachment pod for hotplug
                      volumes
                    type: string
                  targetCPUSet:
                    description: |-
                      If the VMI requires dedicated CPUs, this field will
                      hold the dedicated CPU set on the target node
                    items:
                      type: integer
                    type: array
                    x-kubernetes-list-type: atomic
                  targetDirectMigrationNodePorts:
                    additionalProperties:
                      type: integer
                    description: The list of ports opened for live migration on the
                      destination node
                    type: object
                  targetNode:
                    description: The target node that the VMI is moving to
                    type: string
                  targetNodeAddress:
                    description: The address of the target node to use for the migration
                    type: string
                  targetNodeDomainDetected:
                    description: The Target Node has seen the Domain Start Event
                    type: boolean
                  targetNodeDomainReadyTimestamp:
                    description: The timestamp at which the target node detects the
                      domain is active
                    format: date-time
                    type: string
                  targetNodeTopology:
                    description: |-
                      If the VMI requires dedicated CPUs, this field will
                      hold the numa topology on the target node
                    type: string
                  targetPersistentStatePVCName:
                    description: If the VMI being migrated uses persistent features
                      (backend-storage), its target PVC name is saved here
                    type: string
                  targetPod:
                    description: The target pod that the VMI is moving to
                    type: string
                type: object
              phase:
                description: VirtualMachineInstanceMigrationPhase is a label for the
                  condition of a VirtualMachineInstanceMigration at the current time.
                type: string
              phaseTransitionTimestamps:
                description: PhaseTransitionTimestamp is the timestamp of when the
                  last phase change occurred
                items:
                  description: VirtualMachineInstanceMigrationPhaseTransitionTimestamp
                    gives a timestamp in relation to when a phase is set on a vmi
                  properties:
                    phase:
                      description: Phase is the status of the VirtualMachineInstanceMigrationPhase
                        in kubernetes world. It is not the VirtualMachineInstanceMigrationPhase
                        status, but partially correlates to it.
                      type: string
                    phaseTransitionTimestamp:
                      description: PhaseTransitionTimestamp is the timestamp of when
                        the phase change occurred
                      format: date-time
                      type: string
                  type: object
                type: array
                x-kubernetes-list-type: atomic
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: The current phase of VM instance migration
      jsonPath: .status.phase
      name: Phase
      type: string
    - description: The name of the VMI to perform the migration on
      jsonPath: .spec.vmiName
      name: VMI
      type: string
    deprecated: true
    deprecationWarning: kubevirt.io/v1alpha3 is now deprecated and will be removed
      in a future release.
    name: v1alpha3
    schema:
      openAPIV3Schema:
        description: |-
          VirtualMachineInstanceMigration represents the object tracking a VMI's migration
          to another host in the cluster
        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:
              vmiName:
                description: The name of the VMI to perform the migration on. VMI
                  must exist in the migration objects namespace
                type: string
            type: object
          status:
            description: VirtualMachineInstanceMigration reprents information pertaining
              to a VMI's migration.
            properties:
              conditions:
                items:
                  properties:
                    lastProbeTime:
                      format: date-time
                      nullable: true
                      type: string
                    lastTransitionTime:
                      format: date-time
                      nullable: true
                      type: string
                    message:
                      type: string
                    reason:
                      type: string
                    status:
                      type: string
                    type:
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              migrationState:
                description: Represents the status of a live migration
                properties:
                  abortRequested:
                    description: Indicates that the migration has been requested to
                      abort
                    type: boolean
                  abortStatus:
                    description: Indicates the final status of the live migration
                      abortion
                    type: string
                  completed:
                    description: Indicates the migration completed
                    type: boolean
                  endTimestamp:
                    description: The time the migration action ended
                    format: date-time
                    nullable: true
                    type: string
                  failed:
                    description: Indicates that the migration failed
                    type: boolean
                  failureReason:
                    description: Contains the reason why the migration failed
                    type: string
                  migrationConfiguration:
                    description: Migration configurations to apply
                    properties:
                      allowAutoConverge:
                        description: |-
                          AllowAutoConverge allows the platform to compromise performance/availability of VMIs to
                          guarantee successful VMI live migrations. Defaults to false
                        type: boolean
                      allowPostCopy:
                        description: |-
                          AllowPostCopy enables post-copy live migrations. Such migrations allow even the busiest VMIs
                          to successfully live-migrate. However, events like a network failure can cause a VMI crash.
                          If set to true, migrations will still start in pre-copy, but switch to post-copy when
                          CompletionTimeoutPerGiB triggers. Defaults to false
                        type: boolean
                      allowWorkloadDisruption:
                        description: |-
                          AllowWorkloadDisruption indicates that the migration shouldn't be
                          canceled after acceptableCompletionTime is exceeded. Instead, if
                          permitted, migration will be switched to post-copy or the VMI will be
                          paused to allow the migration to complete
                        type: boolean
                      bandwidthPerMigration:
                        anyOf:
                        - type: integer
                        - type: string
                        description: |-
                          BandwidthPerMigration limits the amount of network bandwidth live migrations are allowed to use.
                          The value is in quantity per second. Defaults to 0 (no limit)
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        x-kubernetes-int-or-string: true
                      completionTimeoutPerGiB:
                        description: |-
                          CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
                          If the timeout is reached, the migration will be either paused, switched
                          to post-copy or cancelled depending on other settings. Defaults to 150
                        format: int64
                        type: integer
                      disableTLS:
                        description: |-
                          When set to true, DisableTLS will disable the additional layer of live migration encryption
                          provided by KubeVirt. This is usually a bad idea. Defaults to false
                        type: boolean
                      matchSELinuxLevelOnMigration:
                        description: |-
                          By default, the SELinux level of target virt-launcher pods is forced to the level of the source virt-launcher.
                          When set to true, MatchSELinuxLevelOnMigration lets the CRI auto-assign a random level to the target.
                          That will ensure the target virt-launcher doesn't share categories with another pod on the node.
                          However, migrations will fail when using RWX volumes that don't automatically deal with SELinux levels.
                        type: boolean
                      network:
                        description: |-
                          Network is the name of the CNI network to use for live migrations. By default, migrations go
                          through the pod network.
                        type: string
                      nodeDrainTaintKey:
                        description: |-
                          NodeDrainTaintKey defines the taint key that indicates a node should be drained.
                          Note: this option relies on the deprecated node taint feature. Default: kubevirt.io/drain
                        type: string
                      parallelMigrationsPerCluster:
                        description: |-
                          ParallelMigrationsPerCluster is the total number of concurrent live migrations
                          allowed cluster-wide. Defaults to 5
                        format: int32
                        type: integer
                      parallelOutboundMigrationsPerNode:
                        description: |-
                          ParallelOutboundMigrationsPerNode is the maximum number of concurrent outgoing live migrations
                          allowed per node. Defaults to 2
                        format: int32
                        type: integer
                      progressTimeout:
                        description: |-
                          ProgressTimeout is the maximum number of seconds a live migration is allowed to make no progress.
                          Hitting this timeout means a migration transferred 0 data for that many seconds. The migration is
                          then considered stuck and therefore cancelled. Defaults to 150
                        format: int64
                        type: integer
                      unsafeMigrationOverride:
                        description: |-
                          UnsafeMigrationOverride allows live migrations to occur even if the compatibility check
                          indicates the migration will be unsafe to the guest. Defaults to false
                        type: boolean
                    type: object
                  migrationPolicyName:
                    description: Name of the migration policy. If string is empty,
                      no policy is matched
                    type: string
                  migrationUid:
                    description: The VirtualMachineInstanceMigration object associated
                      with this migration
                    type: string
                  mode:
                    description: Lets us know if the vmi is currently running pre
                      or post copy migration
                    type: string
                  sourceNode:
                    description: The source node that the VMI originated on
                    type: string
                  sourcePersistentStatePVCName:
                    description: If the VMI being migrated uses persistent features
                      (backend-storage), its source PVC name is saved here
                    type: string
                  sourcePod:
                    type: string
                  startTimestamp:
                    description: The time the migration action began
                    format: date-time
                    nullable: true
                    type: string
                  targetAttachmentPodUID:
                    description: The UID of the target attachment pod for hotplug
                      volumes
                    type: string
                  targetCPUSet:
                    description: |-
                      If the VMI requires dedicated CPUs, this field will
                      hold the dedicated CPU set on the target node
                    items:
                      type: integer
                    type: array
                    x-kubernetes-list-type: atomic
                  targetDirectMigrationNodePorts:
                    additionalProperties:
                      type: integer
                    description: The list of ports opened for live migration on the
                      destination node
                    type: object
                  targetNode:
                    description: The target node that the VMI is moving to
                    type: string
                  targetNodeAddress:
                    description: The address of the target node to use for the migration
                    type: string
                  targetNodeDomainDetected:
                    description: The Target Node has seen the Domain Start Event
                    type: boolean
                  targetNodeDomainReadyTimestamp:
                    description: The timestamp at which the target node detects the
                      domain is active
                    format: date-time
                    type: string
                  targetNodeTopology:
                    description: |-
                      If the VMI requires dedicated CPUs, this field will
                      hold the numa topology on the target node
                    type: string
                  targetPersistentStatePVCName:
                    description: If the VMI being migrated uses persistent features
                      (backend-storage), its target PVC name is saved here
                    type: string
                  targetPod:
                    description: The target pod that the VMI is moving to
                    type: string
                type: object
              phase:
                description: VirtualMachineInstanceMigrationPhase is a label for the
                  condition of a VirtualMachineInstanceMigration at the current time.
                type: string
              phaseTransitionTimestamps:
                description: PhaseTransitionTimestamp is the timestamp of when the
                  last phase change occurred
                items:
                  description: VirtualMachineInstanceMigrationPhaseTransitionTimestamp
                    gives a timestamp in relation to when a phase is set on a vmi
                  properties:
                    phase:
                      description: Phase is the status of the VirtualMachineInstanceMigrationPhase
                        in kubernetes world. It is not the VirtualMachineInstanceMigrationPhase
                        status, but partially correlates to it.
                      type: string
                    phaseTransitionTimestamp:
                      description: PhaseTransitionTimestamp is the timestamp of when
                        the phase change occurred
                      format: date-time
                      type: string
                  type: object
                type: array
                x-kubernetes-list-type: atomic
            type: object
        required:
        - spec
        type: object
    served: true
    storage: false
    subresources:
      status: {}
status:
  acceptedNames:
    categories:
    - all
    kind: VirtualMachineInstanceMigration
    listKind: VirtualMachineInstanceMigrationList
    plural: virtualmachineinstancemigrations
    shortNames:
    - vmim
    - vmims
    singular: virtualmachineinstancemigration
  conditions:
  - lastTransitionTime: "2025-10-29T11:53:45Z"
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: "2025-10-29T11:53:45Z"
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  storedVersions:
  - v1
