Feature pages are design documents that developers have created while collaborating on oVirt.

Most of them are outdated, but provide historical design context.

They are not user documentation and should not be treated as such.

Documentation is available here.

Python-SDK (API v3)

The oVirt Python-SDK is an automatically generated software development kit for the oVirt engine API. This software development kit allows you to develop Python-based applications for automating a variety of complex administrative tasks in oVirt.

Note: please note that in this page examples refers to the version 3 of the API.

Note: if you’re looking for the version 4 of the API please refer to the oVirt Engine API Python SDK Documentation.



  • Complete protocol abstraction.
  • Full compliance with the oVirt api architecture.
  • Auto-completion.
  • Self descriptive.
  • Auto-Generated
  • Intuitive and easy to use.

IDE Examples

Creating the proxy and listing all collections:

Listing the methods of a collection:

Querying a collection using the oVirt search engine query and custom constraints:

Accessing resource methods and properties:

Creating a resource:

Accessing resource properties and sub-collections:

Accessing sub-collection methods:

Querying a sub-collection using a custom constraint:

Retrieving a sub-collection resource:

Accessing sub-collection resource properties and methods:


from ovirtsdk.xml import params

from ovirtsdk.api import API
  • create proxy
api = API(url='[http://host:port/api](http://host:port/api)', username='user@domain', password='password')
  • list entities
vms1 = api.vms.list()
  • list entities using query
vms2 = api.vms.list(query='name=python_vm')
  • search vms by property constraint
vms3 = api.vms.list(memory=1073741824)
  • update resource
vm1 = api.vms.get(name='python_vm')

vm1.description = 'updated_desc'

vm2 = vm1.update()
  • list by constraints
vms4 = api.vms.list(name='pythond_sdk_poc2')
  • get by name
vm4 = api.vms.get(name='pythond_sdk_poc2')
  • get by constraints
vm5 = api.vms.get(id='02f0f4a4-9738-4731-83c4-293f3f734782')
  • add resource
param = params.VM(name='my_vm',

my_vm = api.vms.add(param)
  • add sub-resource to resource
network = params.Network(name='rhevm')

nic = params.NIC(name='eth0', network=network, interface='e1000')

  • add sub-resource to resource where one of the parameters is collection
sd = api.storagedomains.get('nfs_data')
diskParam = params.Disk(storage_domains=params.StorageDomains(storage_domain=[sd]), 

myVm = api.vms.get(name='nfs_desktop')
neDisk = myVm.disks.add(diskParam)
  • note: params.Disk(storage_domains=…, => this is means that Disk constructor should receive collection (params.StorageDomains()) as parameter
  • list sub-resources
nics1 = vm6.nics.list()
  • list sub-resources using constraint/s
nics2 = vm6.nics.list(name='eth0')

nics3 = vm6.nics.list(interface='e1000')
  • get sub-resource
nic1 = vm6.nics.get(name='eth0')
  • update sub-resource = 'eth01'
nic2 = nic1.update()

nic3 = vm6.nics.get(name='eth01')

nic4 = vm6.nics.get(name='eth0')

Development tips

Parameters holder type location

If you find difficult locating appropriate type while constructing

parameter environment, like in [1] for instance, you can reuse internal

params lookup as shown in [2].

VMs.add(self, vm, ...):[@param vm.cpu.topology.cores: int]

topology = params.findRootClass("topology")
#in this case will be returned CpuTopology type.

Releasing resources when SDK proxy is no longer needed

    api = API(url='...', username='...', password='...')



easy_install ovirt-engine-sdk-python


To build rpm and install it, from ovirt-engine-sdk repo:

yum install -y rpm-build python-devel python-setuptools

make rpm

yum install rpmtop/RPMS/noarch/ovirt-engine-sdk-x.y-z.noarch.rpm

development deployment (using distro package manager)

For local install in site-packages, from ovirt-engine-sdk repo:

  • Fedora

    yum install python-lxml
    cd ovirt-engine-sdk
    python install
  • Debian/Ubuntu

    apt-get install python-lxml
    cd ovirt-engine-sdk
    python install
  • Arch linux

    pacman -S python2
    cd ovirt-engine-sdk
    python2 install
  • note: both deployment procedures require super-user permissions.

development deployment (using pip and virtualenvwrapper package manager)

  • Fedora

    yum install python-pip
  • Debian/Ubuntu

    apt-get install python-pip libxml2-dev libxslt1-dev build-essential
  • Arch linux

    pacman -S python 2 python-pip
  • Common among the previous distributions

    pip install virtualenvwrapper
    cat >> ~/.bashrc << EOF
    export WORKON_HOME=$HOME/.virtualenvs
    export WORKON_HOME=$HOME/yourprojectdir
    source /usr/local/bin/ # omit the local part for Arch Linux
    mkvirtualenv -p /usr/bin/python2.7 ovirt
    cd ovirt-engine-sdk
    python install

Then, every time you want to use it:

workon ovirt

will make ovirt and its dependencies available to your python execution environment.


install generateDS

easy_install generateDS

note: currently we support only 2.9a


  1. compile + deploy new ovirt-engine
  2. run jboss
  3. run

Known issues

TODO list




  • interface for task polling
  • supporting off-line codegen mode


  • supporting several proxy instances in application (done)
  • refactor caching mechanism
  • implement exit in proxy
  • refactoring internal exceptions for better error handling on client side


Michael Pasternak:, Juan Hernandez: