KubeVirt VM Management API

KubeVirt extends the Kubernetes API with custom resources for virtual machine management. VirtualMachine resources define VM specifications including CPU, memory, disks, and network interfaces. VirtualMachineInstance tracks running VMs, and VirtualMachineInstanceMigration handles live migrations. The API supports start, stop, pause, migrate, and snapshot operations through standard kubectl commands.

OpenAPI Specification

kubevirt-vm-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: KubeVirt VM Management API
  description: >-
    The KubeVirt VM Management API extends the Kubernetes API with custom
    resources for running and managing virtual machines alongside containers.
    It provides CRD endpoints for VirtualMachine, VirtualMachineInstance, and
    VirtualMachineInstanceMigration resources, plus subresource REST endpoints
    for VM lifecycle operations including start, stop, pause, unpause, restart,
    migrate, and console/VNC access.
  version: '1.3.0'
  contact:
    name: KubeVirt Community
    url: https://kubevirt.io/
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
externalDocs:
  description: KubeVirt User Guide
  url: https://kubevirt.io/user-guide/
servers:
  - url: https://{kubernetes-api-server}
    description: Kubernetes API server
    variables:
      kubernetes-api-server:
        default: localhost:6443
        description: Address of the Kubernetes API server
tags:
  - name: VirtualMachineInstanceMigrations
    description: >-
      Operations for managing live migration of VirtualMachineInstances from one
      node to another without downtime.
  - name: VirtualMachineInstances
    description: >-
      Operations for managing VirtualMachineInstance (VMI) resources. A
      VirtualMachineInstance represents a running virtual machine and tracks its
      actual state.
  - name: VirtualMachines
    description: >-
      Operations for managing VirtualMachine (VM) resources. A VirtualMachine
      defines the desired state and configuration of a virtual machine, providing
      lifecycle management and persistence across restarts.
  - name: VMConsole
    description: >-
      Subresource endpoints for accessing VM consoles via VNC, serial console,
      and USB redirection.
  - name: VMLifecycle
    description: >-
      Subresource operations for VM lifecycle management including start, stop,
      pause, unpause, restart, migrate, and adding/removing volumes.
paths:
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines:
    get:
      operationId: listNamespacedVirtualMachine
      summary: KubeVirt List VirtualMachines in a namespace
      description: >-
        Returns all VirtualMachine resources in the specified namespace. Each
        VirtualMachine defines a desired VM configuration and controls whether
        the VM is running or stopped.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/labelSelector'
        - $ref: '#/components/parameters/fieldSelector'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/continueToken'
      responses:
        '200':
          description: List of VirtualMachines
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineList'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    post:
      operationId: createNamespacedVirtualMachine
      summary: KubeVirt Create a VirtualMachine
      description: >-
        Creates a new VirtualMachine resource defining the VM's CPU, memory,
        disk, network configuration, and run strategy. KubeVirt will create a
        VirtualMachineInstance when the VM is started.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualMachine'
      responses:
        '201':
          description: VirtualMachine created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachine'
        '400':
          description: Invalid VirtualMachine specification
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: VirtualMachine already exists
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines/{name}:
    get:
      operationId: readNamespacedVirtualMachine
      summary: KubeVirt Get a VirtualMachine
      description: >-
        Returns the specified VirtualMachine resource including its current
        status, run strategy, and associated VirtualMachineInstance reference.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '200':
          description: VirtualMachine details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachine'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: VirtualMachine not found
    put:
      operationId: replaceNamespacedVirtualMachine
      summary: KubeVirt Replace a VirtualMachine
      description: >-
        Replaces the entire VirtualMachine resource. Changes to the template
        take effect on the next VM start or restart.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualMachine'
      responses:
        '200':
          description: VirtualMachine updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachine'
        '400':
          description: Invalid specification
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
    patch:
      operationId: patchNamespacedVirtualMachine
      summary: KubeVirt Partially update a VirtualMachine
      description: >-
        Applies a partial update to the VirtualMachine using JSON Merge Patch or
        Strategic Merge Patch.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: true
        content:
          application/merge-patch+json:
            schema:
              type: object
      responses:
        '200':
          description: VirtualMachine patched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachine'
        '400':
          description: Invalid patch
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
    delete:
      operationId: deleteNamespacedVirtualMachine
      summary: KubeVirt Delete a VirtualMachine
      description: >-
        Deletes the VirtualMachine resource. If the VM is running, it will be
        stopped first.
      tags:
        - VirtualMachines
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '200':
          description: VirtualMachine deleted
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: VirtualMachine not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines/{name}/start:
    put:
      operationId: startVirtualMachine
      summary: KubeVirt Start a VirtualMachine
      description: >-
        Starts a stopped VirtualMachine by creating a VirtualMachineInstance.
        The VM must be in the Stopped state. Optionally accepts a start options
        body to control start behavior such as pausing immediately after start.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartOptions'
      responses:
        '202':
          description: Start request accepted
        '400':
          description: VM is not in a startable state
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines/{name}/stop:
    put:
      operationId: stopVirtualMachine
      summary: KubeVirt Stop a VirtualMachine
      description: >-
        Stops a running VirtualMachine by deleting its VirtualMachineInstance.
        Optionally accepts stop options including a grace period for shutdown.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StopOptions'
      responses:
        '202':
          description: Stop request accepted
        '400':
          description: VM is not running
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines/{name}/restart:
    put:
      operationId: restartVirtualMachine
      summary: KubeVirt Restart a VirtualMachine
      description: >-
        Restarts a running VirtualMachine by stopping and starting it. The VM
        must currently be running.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestartOptions'
      responses:
        '202':
          description: Restart request accepted
        '400':
          description: VM is not running
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachines/{name}/migrate:
    put:
      operationId: migrateVirtualMachine
      summary: KubeVirt Migrate a VirtualMachine
      description: >-
        Initiates a live migration of the running VirtualMachine to another node.
        Creates a VirtualMachineInstanceMigration resource to track the migration.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '202':
          description: Migration request accepted
        '400':
          description: VM is not running or not migratable
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachine not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances:
    get:
      operationId: listNamespacedVirtualMachineInstance
      summary: KubeVirt List VirtualMachineInstances
      description: >-
        Returns all running VirtualMachineInstance resources in the specified
        namespace. Each VMI represents an active virtual machine process.
      tags:
        - VirtualMachineInstances
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/labelSelector'
        - $ref: '#/components/parameters/fieldSelector'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: List of VirtualMachineInstances
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineInstanceList'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances/{name}:
    get:
      operationId: readNamespacedVirtualMachineInstance
      summary: KubeVirt Get a VirtualMachineInstance
      description: >-
        Returns the specified VirtualMachineInstance including its phase,
        network interfaces, volumes, node assignment, and guest OS information.
      tags:
        - VirtualMachineInstances
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '200':
          description: VirtualMachineInstance details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineInstance'
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachineInstance not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances/{name}/pause:
    put:
      operationId: pauseVirtualMachineInstance
      summary: KubeVirt Pause a VirtualMachineInstance
      description: >-
        Pauses the CPU execution of a running VirtualMachineInstance. The VMI
        remains in memory but no CPU cycles are consumed.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '202':
          description: Pause request accepted
        '400':
          description: VMI is not in a pausable state
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachineInstance not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances/{name}/unpause:
    put:
      operationId: unpauseVirtualMachineInstance
      summary: KubeVirt Unpause a VirtualMachineInstance
      description: >-
        Resumes CPU execution of a paused VirtualMachineInstance.
      tags:
        - VMLifecycle
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '202':
          description: Unpause request accepted
        '400':
          description: VMI is not paused
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachineInstance not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances/{name}/vnc:
    get:
      operationId: getVirtualMachineInstanceVNC
      summary: KubeVirt Access VM VNC console
      description: >-
        Opens a WebSocket connection to the VNC console of the specified
        VirtualMachineInstance for graphical console access.
      tags:
        - VMConsole
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '101':
          description: WebSocket connection established for VNC access
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachineInstance not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstances/{name}/console:
    get:
      operationId: getVirtualMachineInstanceConsole
      summary: KubeVirt Access VM serial console
      description: >-
        Opens a WebSocket connection to the serial console of the specified
        VirtualMachineInstance for text-based console access.
      tags:
        - VMConsole
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '101':
          description: WebSocket connection established for serial console access
        '401':
          description: Unauthorized
        '404':
          description: VirtualMachineInstance not found
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstancemigrations:
    get:
      operationId: listNamespacedVMIMigration
      summary: KubeVirt List VirtualMachineInstanceMigrations
      description: >-
        Returns all VirtualMachineInstanceMigration resources in the specified
        namespace. Each migration resource tracks the state of a live migration.
      tags:
        - VirtualMachineInstanceMigrations
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/labelSelector'
        - $ref: '#/components/parameters/limit'
      responses:
        '200':
          description: List of migrations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineInstanceMigrationList'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    post:
      operationId: createNamespacedVMIMigration
      summary: KubeVirt Create a VirtualMachineInstanceMigration
      description: >-
        Initiates a live migration by creating a VirtualMachineInstanceMigration
        resource. The migration moves the VMI to another node while it continues
        running.
      tags:
        - VirtualMachineInstanceMigrations
      parameters:
        - $ref: '#/components/parameters/namespace'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualMachineInstanceMigration'
      responses:
        '201':
          description: Migration created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineInstanceMigration'
        '400':
          description: Invalid migration specification
        '401':
          description: Unauthorized
  /apis/kubevirt.io/v1/namespaces/{namespace}/virtualmachineinstancemigrations/{name}:
    get:
      operationId: readNamespacedVMIMigration
      summary: KubeVirt Get a VirtualMachineInstanceMigration
      description: >-
        Returns the specified migration resource including its current phase,
        source and target node information, and completion status.
      tags:
        - VirtualMachineInstanceMigrations
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '200':
          description: Migration details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineInstanceMigration'
        '401':
          description: Unauthorized
        '404':
          description: Migration not found
    delete:
      operationId: deleteNamespacedVMIMigration
      summary: KubeVirt Cancel a VirtualMachineInstanceMigration
      description: >-
        Cancels an in-progress migration by deleting the
        VirtualMachineInstanceMigration resource.
      tags:
        - VirtualMachineInstanceMigrations
      parameters:
        - $ref: '#/components/parameters/namespace'
        - $ref: '#/components/parameters/name'
      responses:
        '200':
          description: Migration cancelled
        '401':
          description: Unauthorized
        '404':
          description: Migration not found
components:
  parameters:
    namespace:
      name: namespace
      in: path
      required: true
      description: The Kubernetes namespace of the resource.
      schema:
        type: string
    name:
      name: name
      in: path
      required: true
      description: The name of the resource.
      schema:
        type: string
    labelSelector:
      name: labelSelector
      in: query
      required: false
      description: Label selector to filter resources.
      schema:
        type: string
    fieldSelector:
      name: fieldSelector
      in: query
      required: false
      description: Field selector to filter resources.
      schema:
        type: string
    limit:
      name: limit
      in: query
      required: false
      description: Maximum number of results per page.
      schema:
        type: integer
        minimum: 1
    continueToken:
      name: continue
      in: query
      required: false
      description: Pagination continuation token.
      schema:
        type: string
  schemas:
    VirtualMachine:
      type: object
      description: >-
        A KubeVirt VirtualMachine resource defining the desired configuration and
        lifecycle of a virtual machine. Provides persistent VM definition with
        start/stop control.
      required:
        - apiVersion
        - kind
        - metadata
        - spec
      properties:
        apiVersion:
          type: string
          enum:
            - kubevirt.io/v1
        kind:
          type: string
          enum:
            - VirtualMachine
        metadata:
          $ref: '#/components/schemas/ObjectMeta'
        spec:
          $ref: '#/components/schemas/VirtualMachineSpec'
        status:
          $ref: '#/components/schemas/VirtualMachineStatus'
    VirtualMachineSpec:
      type: object
      description: Specification of a VirtualMachine.
      properties:
        running:
          type: boolean
          description: >-
            Mutually exclusive with runStrategy. If true, the VM should be
            running. Deprecated in favor of runStrategy.
        runStrategy:
          type: string
          description: >-
            Controls when the VM is running. 'Always' restarts after crash,
            'RerunOnFailure' only restarts on failure, 'Manual' requires
            explicit start/stop, 'Halted' keeps the VM stopped.
          enum:
            - Always
            - RerunOnFailure
            - Manual
            - Halted
            - Once
        template:
          $ref: '#/components/schemas/VirtualMachineInstanceTemplateSpec'
        dataVolumeTemplates:
          type: array
          description: >-
            DataVolume templates to create alongside the VM. These are
            automatically managed by KubeVirt as part of the VM lifecycle.
          items:
            type: object
    VirtualMachineInstanceTemplateSpec:
      type: object
      description: Template for creating a VirtualMachineInstance.
      properties:
        metadata:
          type: object
          description: Labels and annotations for the VMI.
        spec:
          $ref: '#/components/schemas/VirtualMachineInstanceSpec'
    VirtualMachineInstanceSpec:
      type: object
      description: Specification of the virtual machine hardware and guest configuration.
      properties:
        domain:
          $ref: '#/components/schemas/DomainSpec'
        networks:
          type: array
          description: Network interfaces to attach to the VM.
          items:
            $ref: '#/components/schemas/Network'
        volumes:
          type: array
          description: Volumes to attach to the VM.
          items:
            $ref: '#/components/schemas/Volume'
        affinity:
          type: object
          description: Kubernetes affinity rules for pod scheduling.
        tolerations:
          type: array
          description: Kubernetes tolerations for node scheduling.
          items:
            type: object
        nodeSelector:
          type: object
          additionalProperties:
            type: string
          description: Node selector constraints for VM placement.
        hostname:
          type: string
          description: Hostname to set in the guest OS.
        subdomain:
          type: string
          description: Subdomain for the VM's DNS entry.
        terminationGracePeriodSeconds:
          type: integer
          description: Grace period in seconds before forceful VM termination.
          minimum: 0
        evictionStrategy:
          type: string
          description: >-
            Controls how the VM behaves during node eviction. 'LiveMigrate'
            migrates instead of stopping.
          enum:
            - LiveMigrate
            - None
    DomainSpec:
      type: object
      description: Virtual hardware configuration for the VM guest.
      properties:
        cpu:
          type: object
          description: CPU configuration for the VM.
          properties:
            cores:
              type: integer
              description: Number of CPU cores.
              minimum: 1
            sockets:
              type: integer
              description: Number of CPU sockets.
              minimum: 1
            threads:
              type: integer
              description: Number of CPU threads per core.
              minimum: 1
            model:
              type: string
              description: CPU model to emulate, e.g. 'host-model' or 'Westmere'.
            dedicatedCpuPlacement:
              type: boolean
              description: If true, requests dedicated CPU pinning via CPU Manager.
            features:
              type: array
              description: CPU feature flags to enable or disable.
              items:
                type: object
                properties:
                  name:
                    type: string
                  policy:
                    type: string
                    enum:
                      - force
                      - require
                      - optional
                      - disable
                      - forbid
        memory:
          type: object
          description: Memory configuration for the VM.
          properties:
            guest:
              type: string
              description: >-
                Amount of memory for the guest OS in Kubernetes resource quantity
                format, e.g. '2Gi', '512Mi'.
            hugepages:
              type: object
              description: Huge pages configuration.
              properties:
                pageSize:
                  type: string
                  description: Size of huge pages, e.g. '2Mi' or '1Gi'.
        devices:
          type: object
          description: Virtual device configuration.
          properties:
            disks:
              type: array
              description: Disk devices attached to the VM.
              items:
                $ref: '#/components/schemas/Disk'
            interfaces:
              type: array
              description: Network interface devices.
              items:
                $ref: '#/components/schemas/Interface'
            rng:
              type: object
              description: Random number generator device configuration.
            watchdog:
              type: object
              description: Hardware watchdog device configuration.
        features:
          type: object
          description: Hardware feature flags for the VM.
          properties:
            acpi:
              type: object
              description: ACPI configuration.
            smm:
              type: object
              description: System Management Mode configuration.
            hyperv:
              type: object
              description: Hyper-V enlightenments for Windows VMs.
        firmware:
          type: object
          description: Firmware configuration for the VM.
          properties:
            bootloader:
              type: object
              description: Bootloader configuration (BIOS or UEFI).
              properties:
                bios:
                  type: object
                  description: BIOS bootloader.
                efi:
                  type: object
                  description: EFI/UEFI bootloader.
                  properties:
                    secureBoot:
                      type: boolean
                      description: If true, enables Secure Boot.
            serial:
              type: string
              description: Serial number to expose to the guest.
            uuid:
              type: string
              format: uuid
              description: SMBIOS UUID for the VM.
        machine:
          type: object
          description: Machine type configuration.
          properties:
            type:
              type: string
              description: Machine type, e.g. 'q35' or 'pc-q35-rhel8.4.0'.
    Disk:
      type: object
      description: A virtual disk device attached to the VM.
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the disk, must match a volume name.
        bootOrder:
          type: integer
          description: Boot order for this disk (lower numbers boot first).
          minimum: 1
        disk:
          type: object
          description: Virtio disk configuration.
          properties:
            bus:
              type: string
              enum:
                - virtio
                - sata
                - scsi
                - ide
        cdrom:
          type: object
          description: CD-ROM device configuration.
          properties:
            bus:
              type: string
              enum:
                - virtio
                - sata
                - scsi
            readonly:
              type: boolean
        lun:
          type: object
          description: LUN device configuration.
          properties:
            bus:
              type: string
    Interface:
      type: object
      description: A virtual network interface device.
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the interface, must match a network name.
        model:
          type: string
          description: >-
            Network interface model type. 'virtio' is recommended for best
            performance.
          enum:
            - virtio
            - e1000
            - e1000e
            - rtl8139
        masquerade:
          type: object
          description: NAT masquerade networking mode.
        bridge:
          type: object
          description: Bridge networking mode, connected to a host bridge.
        sriov:
          type: object
          description: SR-IOV passthrough networking mode.
        macAddress:
          type: string
          description: Fixed MAC address for the interface.
          pattern: '^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$'
        ports:
          type: array
          description: Port forwarding rules for masquerade interfaces.
          items:
            type: object
            properties:
              name:
                type: string
              port:
                type: integer
                minimum: 1
                maximum: 65535
              protocol:
                type: string
                enum:
                  - TCP
                  - UDP
    Network:
      type: object
      description: A network to attach a VM interface to.
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the network, referenced by interface name.
        pod:
          type: object
          description: Default pod network configuration.
          properties:
            vmNetworkCIDR:
              type: string
              description: CIDR for the VM network in masquerade mode.
        multus:
          type: object
          description: Multus CNI network attachment.
          properties:
            networkName:
              type: string
              description: Name of the NetworkAttachmentDefinition.
            default:
              type: boolean
              description: If true, this is the default network.
    Volume:
      type: object
      description: A storage volume to attach to a disk device.
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the volume, referenced by disk name.
        containerDisk:
          type: object
          description: OCI container image used as a disk.
          properties:
            image:
              type: string
              description: OCI image reference containing the disk image.
            imagePullPolicy:
              type: string
              enum:
                - Always
                - Never
                - IfNotPresent
        dataVolume:
          type: object
          description: DataVolume (CDI) as a disk source.
          properties:
            name:
              type: string
              description: Name of the DataVolume resource.
        persistentVolumeClaim:
          type: object
          description: Kubernetes PersistentVolumeClaim as a disk source.
          properties:
            claimName:
              type: string
              description: Name of the PVC.
            readOnly:
              type: boole

# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kubevirt/refs/heads/main/openapi/kubevirt-vm-openapi.yml