[libvirt] Using libvirt from PHP

Daniel P. Berrange berrange at redhat.com
Thu Mar 26 13:10:12 UTC 2009

On Wed, Mar 25, 2009 at 10:01:22PM +0100, Radek Hladik wrote:
> Hi,
> 	I am developing wimple web application in PHP to monitor and control 
> VMs using libvirt. I hope it could become simple library for doing basic 
> things with VMs. And I would like to ask for your opinion about 
> different possibilities of calling libvirt.
> Option 1) I am calling virsh via exec command now (one virsh for every 
> libvirt command). This can be used for local libvirt but it is very 
> inefficient. The overhead for remote libvirt would be unbearable. I 
> could run one virsh per page and use it "interactively" so the overhead 
> gets lower.

Particularly if you used the encryption & authentication for remote
connections, the overhead of running new virsh commands for every web
page would be prohibitive for this to work.

> Option 2) The other option is to create Zend extension which should be 
> able to call libvirt directly from C. However I've never done anything 
> like that so I do not know, whether it is reasonable or not.

This is the option we'd recommend. A few people have expressed interest in
this idea in the past, but unforatuntely I'm not aware of anyone having
written any code for this yet. We'd very much like to see a PHP binding
for libvirt developed & happy to give advice/support to anyone attempting
this. It is definitely doable, but I don't know how much of a hard learning
curve PHP C extensions have...

The libvirt API is quite large, but of course you would not need to suport
every single API in PHP. You could build it up incrementally focusing on
the APIs that you actually need in your applicaiton.

> Option 3) I could also create some "wrapper daemon" in C or other 
> language with libvirt binding. But I think that this is an ugly way :-)

Yeah, if you're going to write C, then you're better off doing a real
PHP binding to libvirt C API as per Option 2.

> Option 4) I could "talk" directly to the libvirt socket. But I am not 
> sure how the communication goes there and whether it is stable or 
> changes with every version. And I consider the socket to be internal 
> thing of libvirt...

Recommend against this option. We consider the wire RPC protocol  to be
a private implementation detail. The C library is the only place where 
we provide a guarentee of long term compatability. Or one of the language 
bindings ontop of the C library (Perl, Python, OCaml, Ruby, Java, etc)

|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

More information about the libvir-list mailing list