The libvirt API concepts

This page describes the main principles and architecture choices behind the definition of the libvirt API:

Objects Exposed

As defined in the goals section, the libvirt API is designed to expose all the resources needed to manage the virtualization support of recent operating systems. The first object manipulated through the API is the virConnectPtr, which represents the connection to a hypervisor. Any application using libvirt is likely to start using the API by calling one of the virConnectOpen functions. You will note that those functions take a name argument which is actually a connection URI to select the right hypervisor to open. A URI is needed to allow remote connections and also select between different possible hypervisors. For example, on a Linux system it may be possible to use both KVM and LinuxContainers on the same node. A NULL name will default to a preselected hypervisor, but it's probably not a wise thing to do in most cases. See the connection URI page for a full descriptions of the values allowed.

Once the application obtains a virConnectPtr connection to the hypervisor it can then use it to manage the hypervisor's available domains and related virtualization resources, such as storage and networking. All those are exposed as first class objects and connected to the hypervisor connection (and the node or cluster where it is available).

first class objects exposed by the API

The figure above shows the five main objects exported by the API:

Most objects manipulated by the library can also be represented using XML descriptions. This is used primarily to create those object, but is also helpful to modify or save their description back.

Domains, networks, and storage pools can be either active i.e. either running or available for immediate use, or defined in which case they are inactive but there is a permanent definition available in the system for them. Based on this they can be activated dynamically in order to be used.

Most objects can also be named in various ways:

Functions and naming conventions

The naming of the functions present in the library is usually made of a prefix describing the object associated to the function and a verb describing the action on that object.

For each first class object you will find apis for the following actions:

For more in-depth details of the storage related APIs see the storage management page.

The libvirt drivers

The libvirt driver architecture

Daemon and remote access

The libvirt daemon and remote architecture