The bindings try to be a direct mapping of the underling C API with some differences to match Rust conventions.
Make sure the libvirt-dev or libvirt-devel package is installed
(or that the development files are in your include path).
The bindings do not implement all of what the C library is providing but we do consider the current API quite stable.
The bindings use standard errors handling from Rust. Each method
(there are some exceptions) returns a type Option or Result.
-
qemuallows usinglibvirt-qemufunctions, such asqemu_monitor_command. -
bindgen_regenerateuses thebindgencrate to generate a Rust-compatible representation of the C API. The output for a recent version of libvirt is already included in the repository, so only maintainers should ever need to use this feature.
cargo fmt -v -- --check
The code is formatted using rustfmt, you should ensure that the
check is passing before to submit your patch(es). It may be required
to execute rustup component add rustfmt in your environment.
cargo test --verbose
Integration tests use a real connection to libvirtd. For instance integration_qemu.rs uses a qemu:///system connection. They are all ignored by default.
cargo test --verbose -- --ignored
Similar to
libvirt-go-module,
the integration tests also require that libvirtd listens on localhost
with sasl auth. This can be setup by editing
/etc/libvirt/libvirtd.conf as follows:
listen_tls=0
listen_tcp=1
auth_tcp=sasl
listen_addr="127.0.0.1"
and starting 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.
# cargo run --example hello
# cargo run --example migrate -- qemu:///system tcp+qemu://192.168.0.1/system myguest
# cargo run -F qemu --example guest_agent -- qemu:///system myguest
The libvirt project aims to add support for new APIs to libvirt-rs 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-rs change at the same time.
For more information, see the CONTRIBUTING file.
The list of missing methods can be displayed with:
$ python tools/api_tests.py virDomain
{'file': 'libvirt-domain', 'name': 'virDomainMigrateSetMaxSpeed', 'module': 'libvirt-domain'}
{'file': 'libvirt-domain', 'name': 'virDomainRef', 'module': 'libvirt-domain'}
{'file': 'libvirt-domain', 'name': 'virDomainGetMemoryParameters', 'module': 'libvirt-domain'}
...