OpenNode OVF Reference

Open Virtualization Format (OVF) is an open standard for packaging and distributing virtual appliances or more generally software to be run in virtual machines. The standard describes an "open, secure, portable, efficient and extensible format for the packaging and distribution of software to be run in virtual machines". The OVF standard is not tied to any particular hypervisor or processor architecture. The unit of packaging and distribution is a so-called OVF Package which may contain one or more virtual systems each of which can be deployed to a virtual machine.

An OVF package consists of several files placed in one directory. An OVF package always contains exactly one OVF descriptor (a file with extension .ovf). The OVF descriptor is an XML file which describes the packaged virtual machine; it contains the metadata for the OVF package, such as name, hardware requirements, references to the other files in the OVF package and human-readable descriptions. In addition to the OVF descriptor, the OVF package will typically contain one or more disk images, and optionally certificate files and other auxiliary files.

The entire directory can be distributed as an OVA package, which is a tar archive file with the OVF directory inside.

OVF references used

OVF 2.0 descriptor structure

The OVF description file (.ovf) contains metadata of the virtual appliance template. Envelope is the root element for this XML document.

The mandatory sections are:

  • References
  • DiskSection
  • VirtualSystem or VirtualSystemCollection (multi-VM)
    • ProductSection
    • VirtualHardwareSection

Envelope example

<?xml version="1.0" encoding="UTF-8"?>

References (required)

This section contains references to external resources used by the virtual appliance. References can point to files such as virtual disks or icons.

Element Attributes Value / Description
File +
required href
required id Reference key used in other parts of the package
optional size Size in bytes of the files (if known)
optional compression Compression type (gzip, bzip2, or none if empty or not specified)
optional chunkSize Chunk size (except for last chunk)

References example

    <File ovf:id="file1" ovf:href="vmdisk1.vmdk" ovf:size="180114671"/>
    <File ovf:id="file2" ovf:href="vmdisk2.vmdk" ovf:size="4882023564" ovf:chunkSize="2147483648"/>
    <File ovf:id="file3" ovf:href="resource.iso" ovf:size="212148764" ovf:compression="gzip"/>
    <File ovf:id="icon" ovf:href="icon.png" ovf:size="1360"/>

DiskSection (required)

A DiskSection describes meta-information about virtual disks in the OVF package. Virtual disks and their metadata are described outside the virtual hardware to facilitate sharing between virtual machines within an OVF package. Virtual disks in DiskSection can be referenced by multiple virtual machines, but seen from the guest software each virtual machine get individual private disks. Any level of sharing done at runtime is deployment platform specific and not visible to the guest software.

Element Attributes Value / Description
Info - String, general information
Disk + Single disk / snapshot description
required capacity Number, by default in bytes
optional populatedSize May be an estimate of used disk size (in bytes) but shall not be larger than capacity.
optional capacityAllocationUnits default bytes, KB, MB, GB, TB
required diskId GUID, id of the image
optional parentRef GUID, parent snapshot id (can be empty)
optional fileRef GUID, unique id of the image in the storage pool, it’s contains two guids separated by slash, ie: [Image Group Id]/[Image Id]. Omitting the ovf:fileRef attribute shall indicate an empty disk. In this case, the disk shall be created and the entire disk content zeroed at installation time.
optional format String, information on the disk format (usually url to the specification)
optional / oVirt volume-format String, one of the following: RAW, COW, Unassigned
optional / oVirt volume-type String, one of the following: Sparse, Preallocated, Unassigned
optional / oVirt disk-interface String, one of the following: IDE, SCSI, VirtIO
optional / oVirt disk-type String, one of the following: Unassigned, System, Data, Shared, Swap, Temp
optional / oVirt boot Boolean, Specify if disk is bootable (True or False)
optional / oVirt wipe-after-delete Boolean, Write zero to disk when delete(True of False)

DiskSection example

    <Info>List of Virtual Disks</Info>
        ovf:format="" />

Disk formats
Disk format URI volume-format volume-type ON
RAW http://raw RAW Preallocated yes
QCOW2 Fixed Disk COW Preallocated yes
QCOW2 Sparse Disk COW Sparse yes
VMDK Stream Optimized ? no
VMDK Fixed Disk Preallocated no
VMDK Sparse Disk Sparse no
VDI Fixed Disk Preallocated no
VDI Sparse Disk Sparse no
VHD Fixed Disk Preallocated no
VHD Sparse Disk Sparse no
OpenVZ SimFS RAW? Sparse yes
OpenVZ Ploop COW? Sparse yes

VirtualSystem (Single-VM, required)

The VirtualSystem describes the template configuration for a virtual machine.

Element Attributes Value / Description
required id appliance filename (without suffix)
Info required Description of the machine for the appliance library. Info element describes the meaning of the content, this is typically shown if the type is not understood by an application. ON values: OpenNode QEMU/KVM VM Template / OpenNode OpenVZ CT Template
Name optional An optional localizable display name of the content
ProductSection required
VirtualHardwareSection required
OperatingSystemSection required by ON for OpenVZ OS distro name

VirtualSystem example

<VirtualSystem ovf:id="centos-6-x86_64">
    <Info>OpenNode QEMU/KVM VM template</Info>
    <Name>CentOS 6 Appliance</Name>

VirtualSystemCollection (multi-VM)

VirtualSystemCollection example

<VirtualSystemCollection ovf:id="multi-tier-app">
    <Info>A collection of virtual machines</Info>
    <Name>Multi-tiered Appliance</Name>
        <!-- Additional section content -->
    <!-- Additional sections can follow -->
    <VirtualSystem ovf:id="...">
    <!-- Additional sections -->
    <!-- Additional VirtualSystem or VirtualSystemCollection elements can follow-->


OVF spec says:

  • The values for ovf:id should be taken from the ValueMap of the CIM_OperatingSystem.OsType property.
  • The description should be taken from the corresponding Values of the CIM_OperatingSystem.OsType property.

NB! We do mapping from CIM types to OpenVZ/Libvirt supported distros with the help of OtherTypeDescription and Version fields for CIM unsupported distros

CIM OsType value map

"Unknown" [0]
"Other" [1]
"MACOS" [2]
"DGUX" [4]
"DECNT" [5]
"Tru64 UNIX" [6]
"OpenVMS" [7]
"HPUX" [8]
"AIX" [9]
"MVS" [10]
"OS400" [11]
"OS/2" [12]
"JavaVM" [13]
"MSDOS" [14]
"WIN3x" [15]
"WIN95" [16]
"WIN98" [17]
"WINNT" [18]
"WINCE" [19]
"NCR3000" [20]
"NetWare" [21]
"OSF" [22]
"DC/OS" [23]
"Reliant UNIX" [24]
"SCO UnixWare" [25]
"SCO OpenServer" [26]
"Sequent" [27]
"IRIX" [28]
"Solaris" [29]
"SunOS" [30]
"U6000" [31]
"ASERIES" [32]
"HP NonStop OS" [33]
"HP NonStop OSS" [34]
"BS2000" [35]
"LINUX" [36]
"Lynx" [37]
"XENIX" [38]
"VM" [39]
"Interactive UNIX" [40]
"BSDUNIX" [41]
"FreeBSD" [42]
"NetBSD" [43]
"GNU Hurd" [44]
"OS9" [45]
"MACH Kernel" [46]
"Inferno" [47]
"QNX" [48]
"EPOC" [49]
"IxWorks" [50]
"VxWorks" [51]
"MiNT" [52]
"BeOS" [53]
"HP MPE" [54]
"NextStep" [55]
"PalmPilot" [56]
"Rhapsody" [57]
"Windows 2000" [58]
"Dedicated" [59]
"OS/390" [60]
"VSE" [61]
"TPF" [62]
"Windows (R) Me" [63]
"Caldera Open UNIX" [64]
"OpenBSD" [65]
"Not Applicable" [66]
"Windows XP" [67]
"z/OS" [68]
"Microsoft Windows Server 2003" [69]
"Microsoft Windows Server 2003 64-Bit" [70]
"Windows XP 64-Bit" [71]
"Windows XP Embedded" [72]
"Windows Vista" [73]
"Windows Vista 64-Bit" [74]
"Windows Embedded for Point of Service" [75]
"Microsoft Windows Server 2008" [76]
"Microsoft Windows Server 2008 64-Bit" [77]
"FreeBSD 64-Bit" [78]
"RedHat Enterprise Linux" [79]
"RedHat Enterprise Linux 64-Bit" [80]
"Solaris 64-Bit" [81]
"SUSE" [82]
"SUSE 64-Bit" [83]
"SLES" [84]
"SLES 64-Bit" [85]
"Novell OES" [86]
"Novell Linux Desktop" [87]
"Sun Java Desktop System" [88]
"Mandriva" [89]
"Mandriva 64-Bit" [90]
"TurboLinux" [91]
"TurboLinux 64-Bit" [92]
"Ubuntu" [93]
"Ubuntu 64-Bit" [94]
"Debian" [95]
"Debian 64-Bit" [96]
"Linux 2.4.x" [97]
"Linux 2.4.x 64-Bit" [98]
"Linux 2.6.x" [99]
"Linux 2.6.x 64-Bit" [100]
"Linux 64-Bit" [101]
"Other 64-Bit" [102]
"Microsoft Windows Server 2008 R2" [103]

OpenVZ distro map

OpenVZ CIM ID 32/64 bit Version (OtherType)Description + (64-bit)
alpine 1 Alpine Linux
altlinux 1 -/2.4 ALT Linux
arch 1 Arch Linux
centos 1 CentOS
debian 95/96 -/3.0/3.1 Debian
fedora 1 Fedora
fedora-core 1 Fedora Core
funtoo 1 Funtoo
gentoo 1 Gentoo
mandrake 1 Mandrake
opensuse 1 OpenSUSE
owl 1 OWL
redhat 79/80 -/7.0/7.1/7.2/7.3 RedHat Enterprise Linux
rhel 79/80 RedHat Enterprise Linux
scientific 1 Scientific Linux
slackware 1 -/9.0/9.1 Slackware Linux
sles 84/85 SLES
suse 82/83 -/7.3/8.0/8.1/ 8.2 SUSE
ubuntu 93/94 -/6.06 Ubuntu

Libvirt distro map

Libvirt CIM ID 32/64 bit Version (OtherType)Description + (64-bit)
win7 1 7 Windows 7
vista 73/74 Windows Vista
winxp/winxp64 67/71 Windows XP
win2k 58 Windows 2000
win2k8 76/77 Microsoft Windows Server 2008
win2k3 69/70 Microsoft Windows Server 2003
openbsd4 65 4.x OpenBSD
freebsd8/7/6 42/78 8.x/7.x/6.x FreeBSD
solaris9/10 29/81 9/10 Solaris
opensolaris 1 Sun OpenSolaris
netware6/5/4 21 6/5/4 Netware
msdos 14 MSDOS
generic 36/101 Linux
debiansqueeze 95/96 Squeeze Debian
debianlenny 95/96 Lenny Debian
debianetch 95/96 Etch Debian
fedora16-5 1 16-5 Fedora
mes5/5.1 1 5/5.1 Mandriva Enterprise Server
mandriva2010/2009 89/90 2010/2009 Mandriva
rhel7/6/5/4 78/80 7/6/5/4 RedHat Enterprise Linux
sles11/10 84/85 11/10 SLES
ubuntuoneiric 93/94 11.10 Ubuntu
ubuntunatty 93/94 11.04 Ubuntu
ubuntumaverick 93/94 10.10 Ubuntu
ubuntulucid 93/94 10.04 Ubuntu
ubuntukarmic 93/94 9.10 Ubuntu
ubuntujaunty 93/94 9.04 Ubuntu
ubuntuintrepid 93/94 8.10 Ubuntu
ubuntuhardy 93/94 8.04 Ubuntu
virtio26 99/100 virtio Linux
generic26 99/100 Linux 2.6.x
generic24 97/98 Linux 2.4.x

OperatingSystemSection examples

CIM supported Specifies the operating system installed RedHat Enterprise Linux 64-Bit 6.4

CIM Other Specifies the operating system installed CentOS 64-bit 6.4


Element Attributes Value / Description
Info required OpenNode QEMU/KVM VM Template / OpenNode OpenVZ CT Template
Product required Name of product
Icon +
required fileRef URL of the icon file
optional mimeType jpeg, png or gif
optional width in pixels
optional height in pixels
Vendor optional Name of product vendor
Version optional Product version, short form
FullVersion optional Product version, long form
ProductUrl optional URL resolving to product description
VendorUrl optional URL resolving to vendor description
AppUrl optional Experimental: URL resolving to deployed product instance
Category optional Property grouping delimiter
Property + Property element
key required Property identifier
type required Propery type
qualifiers optional A comma-separated set of type qualifiers
userConfigurable optional boolean, defaults to false. Determines whether the property value is configurable during installation.
value optional Default value for property
password optional boolean, defaults to false. Determines whether the property value should be obscured during deployment.
configuration optional ?

ProductSection example

    <Info>OpenNode OpenVZ CT Template</Info>
    <Product>CentOS 6 Appliance</Product>
    <Icon ovf:fileRef="" ovf:mimeType="image/png" ovf:width="32" ovf:height="32" />
    <Category>OS properties</Category>
    <Property ovf:key="" ovf:type="string" ovf:userConfigurable="true">
        <Label>Admin email</Label>
        <Description>Email address of administrator</Description>
    <Category>Admin properties</Category>
    <Property ovf:key="app_ip" ovf:type="string" ovf:value="${appserver-vm}">
        <Description>IP address of the application server VM</Description>


Contains all the information about the hardware resources needed to run the virtual appliance. The System section is followed by various Items. In VirtualHardwareSection, virtual disk devices may have a rasd:HostResource element referring to a Disk element in DiskSection.

Element Attributes Value / Description
System required openvz / qemu (libvirt hypervisor naming)
Item required virtual device (cpu, mem)

VirtualHardWareSection example



In the System section, an Item specifies a virtual device by describing the resources to allocate on the virtual system. Resources are described using using Resource Allocation Setting Data (RASD) elements.

Required Items:

  • Virtual CPU
  • Virtual Memory
  • Hard Disk

Optional Items:

  • Disk Controller
  • Ethernet Adapter(s)

Common Item RASD Fields

These RASD fields are found in all items:

  • rasd:Caption: Brief description to make the OVF more readable.
  • rasd:InstanceID: A unique ID for the Item.

Min/max items

Items boundaries can be specified by giving ovf:bound argument to Item element. ovf:bound could be: normal, min, max

CIM ResourceType ValueMap

ID Value ID Value ID Value
1 Other 2 Computer System 3 Processor
4 Memory 5 IDE Controller 6 Parallel SCSI HBA
10 Ethernet Adapter 11 Other Network Adapter 12 I/O Slot
13 I/O Device 14 Floppy Drive 15 CD Drive
16 DVD drive 17 Disk Drive 18 Tape Drive
19 Storage Extent 20 Other storage device 21 Serial port
22 Parallel port 23 USB Controller 24 Graphics controller
25 IEEE 1394 Controller 26 Partitionable Unit 27 Base Partitionable Unit
28 Power 29 Cooling Capacity 30 Ethernet Switch Port
31 Logical Disk 32 Storage Volume 33 Ethernet Connection
.. DMTF reserved 0x8000..0xFFFF Vendor Reserved

Virtual CPU

Reference information for completing the Virtual CPU Item:

  • rasd:ResourceType: Set to "3" to indicate this is a CPU.
  • rasd:VirtualQuantity: The number of virtual CPUs allocated.
<Item ovf:bound="normal">
    <rasd:Caption>1 virtual CPUs</rasd:Caption>
    <rasd:Description>Number of virtual CPUs</rasd:Description>
<Item ovf:bound="min">
    <rasd:Caption>1 virtual CPUs</rasd:Caption>
    <rasd:Description>Number of virtual CPUs</rasd:Description>

Virtual Memory

Reference information for completing the RAM Item:

  • rasd:ResourceType: Set to "4" to indicate this is RAM.
  • rasd:AllocationUnits: Default is "bytes". Other options are:
    • "KB", "KILOBYTE" or "byte * 2^10"
    • "MB", "MEGABYTE" or "byte * 2^20"
    • "GB", "GIGABYTE" or "byte * 2^30"
    • "TB", "TERABYTE" or "byte * 2^40"
  • rasd:VirtualQuantity: The number of units of RAM allocated.
<Item ovf:bound="normal">
     <rasd:Caption>0.5 GB of memory</rasd:Caption>
     <rasd:Description>Memory Size</rasd:Description>
     <rasd:ElementName>0.5 GB of memory</rasd:ElementName>
<Item ovf:bound="min">
     <rasd:Caption>0.25 GB of memory</rasd:Caption>
     <rasd:Description>Memory Size</rasd:Description>
     <rasd:ElementName>0.25 GB of memory</rasd:ElementName>

Disk Controller

Supported controllers are IDE or SCSI/VirtIO. If the inserted virtual machine template has an DiskController it will be used, otherwise check the property to determine the default value.


    <rasd:Description>SCSI Controller</rasd:Description>
    <rasd:ElementName>SCSI controller 0</rasd:ElementName>


    <rasd:Description>SCSI Controller</rasd:Description>
    <rasd:ElementName>SCSI controller 0</rasd:ElementName>


    <rasd:Description>IDE Controller</rasd:Description>
    <rasd:ElementName>IDE controller 0</rasd:ElementName>

Hard Disk

A hard disk that is appropriate for your hypervisor and virtual machine. Reference information for completing the Hard Disk Item:

  • rasd:HostResource: Reference to the disk ID of a disk defined in the DiskSection above (ovf:/disk/).

  • rasd:ResourceType: Set ResourceType to 17 to indicate a hard disk

  • rasd:Parent: Reference (parent) Disk Controller InstanceID (if any)

    <rasd:Caption>Harddisk 0</rasd:Caption>

Ethernet Adapter

  • The QEMU/KVM supported drivers are: rtl8139 (100Mbit), e1000 (1Gbit) and virtio (10Gbit)

  • The OpenVZ supported drivers are: venet (routed), veth (bridged)

  • Drivers are specified as ResourceSubType strings


    <rasd:Caption>vNic Driver</rasd:Caption>
    <rasd:Description>Ethernet Adapter</rasd:Description>


    <rasd:Caption>vNic Driver</rasd:Caption>
    <rasd:Description>Ethernet Adapter</rasd:Description>


    <rasd:Caption>vNic Driver</rasd:Caption>
    <rasd:Description>Ethernet Adapter</rasd:Description>

QEMU/OpenVZ - alias

<!-- ElementName: Alias ID (0,1,etc - eg eth0:0, venet0:1, etc) -->
<!-- Interface name coming from Parent->ElementName -->
<!-- Parent: Ethernet Adapter InstanceID -->
<!-- NB! venet aliases must start from '1' as venet0:0 already exists for default ip -->
    <rasd:Caption>vNic Alias</rasd:Caption>
    <rasd:Description>Ethernet Adapter Alias</rasd:Description>


Not used by OpenNode templates currently.

OpenNode OVF mapped objects

OpenVZ Linux Containers

Group ON property Value(s) example OVF mapping
Template info
Template name CentOS 6 Appliance (64bit) VirtualSystem->Name, VirtualSystem->ProductSection->Product
Template OS distro redhat VirtualSystem->OperatingSystemSection->ovf:id + Description + OtherTypeDescription -> OpenVZ distro map
Template icon Icon URL VirtualSystem->ProductSection->Icon->fileRef
Template description OpenNode OpenVZ CT Template VirtualSystem->ProductSection->Info
VM disk(s)
Format (layout) simfs / ploop DiskSection->Disk->format
min Size 2 GB DiskSection->Disk->capacity
def Size 10 GB VirtualSystem->VirtualHardwareSection->Item-> ResourceType=17->Reservation
used Size space used by CT files DiskSection->Disk->populatedSize
min vCPUs 1 VirtualSystem->VirtualHardwareSection->Item bound=min -> ResourceType=3->VirtualQuantity
def vCPUs 1 VirtualSystem->VirtualHardwareSection->Item bound=normal -> ResourceType=3->VirtualQuantity
vCPU limit 100% default, no mapping
min Mem 0.25 GB VirtualSystem->VirtualHardwareSection->Item bound=min -> ResourceType=4->VirtualQuantity
def Mem 0.5 GB VirtualSystem->VirtualHardwareSection->Item bound=normal -> ResourceType=4->VirtualQuantity
min Swap 0.25 GB Calculate from min Mem
def Swap 0.5 GB Calculate from def Mem
Network device(s)
Device type venet / veth / alias VirtualSystem->VirtualHardwareSection->Item-> ResourceType=10->ResourceSubType
Device name eth0 VirtualSystem->VirtualHardwareSection->Item-> ResourceType=10->ElementName


Group ON property Value(s) example OVF mapping
Template info
Template name CentOS 6 Appliance (64bit) VirtualSystem→Name, VirtualSystem→ProductSection→Product
Template OS distro rhel6 VirtualSystem->OperatingSystemSection->ovf:id + Description + OtherTypeDescription -> Libvirt distro map
Template icon Icon URL VirtualSystem→ProductSection→Icon→fileRef
Template description OpenNode QEMU/KVM VM Template VirtualSystem→ProductSection→Info
VM disk(s)
Format raw / qcow2 DiskSection→Disk→format
min Size 2 GB DiskSection→Disk→capacity
def Size 10 GB VirtualSystem→VirtualHardwareSection→Item→ ResourceType=17→Reservation
used Size space used by VM files DiskSection->Disk->populatedSize
Bus type ide / scsi / virtio VirtualSystem→VirtualHardwareSection→Item→ ResourceType=6->ResourceSubType
min vCPUs 1 VirtualSystem→VirtualHardwareSection→Item bound=min → ResourceType=3→VirtualQuantity
def vCPUs 1 VirtualSystem→VirtualHardwareSection→Item bound=normal → ResourceType=3→VirtualQuantity
min Mem 0.25 GB VirtualSystem→VirtualHardwareSection→Item bound=min → ResourceType=4→VirtualQuantity
def Mem 0.5 GB VirtualSystem→VirtualHardwareSection→Item bound=normal → ResourceType=4→VirtualQuantity
Network device(s)
Device type rtl8139 / e1000 / virtio / alias VirtualSystem→VirtualHardwareSection→Item→ ResourceType=10→ResourceSubType
Device name eth0 VirtualSystem→VirtualHardwareSection→Item→ ResourceType=10→ElementName