Go bindings for libvirt.
Make sure to have
libvirt-dev package (or the development files otherwise somewhere in your include path)
The libvirt go package provides API coverage for libvirt versions from 1.2.0 onwards, through conditional compilation of newer APIs.
The libvirt project aims to add support for new APIs to libvirt-go as soon as they are added to the main libvirt C library. If you are submitting changes to the libvirt C library API, please submit a libvirt-go change at the same time.
Bug fixes and other improvements to the libvirt-go library are welcome at any time. The preferred submission method is to use git send-email to submit patches to the email@example.com mailing list. eg. to send a single patch
git send-email --to firstname.lastname@example.org --subject-prefix "PATCH go" \ --smtp-server=$HOSTNAME -1
Or to send all patches on the current branch, against master
git send-email --to email@example.com --subject-prefix "PATCH go" \ --smtp-server=$HOSTNAME --no-chain-reply-to --cover-letter --annotate \ master..
Note the master GIT repository is at
The following automatic read-only mirrors are available as a convenience to allow contributors to "fork" the repository:
While you can send pull-requests to these mirrors, they will be re-submitted via emai to the mailing list for review before being merged, unless they are trivial/obvious bug fixes.
The core API unit tests are all written to use the built-in test driver (test:///default), so they have no interaction with the host OS environment.
Coverage of libvirt C library APIs / constants is verified using automated tests. These can be run by passing the 'api' build tag. eg go test -tags api
For areas where the test driver lacks functionality, it is possible to use the QEMU or LXC drivers to exercise code. Such tests must be part of the 'integration_test.go' file though, which is only run when passing the 'integration' build tag. eg go test -tags integration
In order to run the unit tests, libvirtd should be configured to allow your user account read-write access with no passwords. This can be easily done using polkit config files
# cat > /etc/polkit-1/localauthority/50-local.d/50-libvirt.pkla <<EOF [Passwordless libvirt access] Identity=unix-group:berrange Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes EOF
(Replace 'berrange' with your UNIX user name).
One of the integration tests also requires that libvirtd is listening for TCP connections on localhost, with sasl auth This can be setup by editing /etc/libvirt/libvirtd.conf to set
listen_tls=0 listen_tcp=1 auth_tcp=sasl listen_addr="127.0.0.1"
and then start libvirtd with the --listen flag (this can be set in /etc/sysconfig/libvirtd to make it persistent).
Then create a sasl user
saslpasswd2 -a libvirt user
and enter "pass" as the password.
Vagrantfile, requiring use of virtualbox,
is included to run the integration tests:
vagrant upto provision the virtual machine
vagrant sshto login to the virtual machine
sudo su - and
go test -tags integration libvirt.