Crates.io | virt |
lib.rs | virt |
version | 0.4.1 |
source | src |
created_at | 2017-04-18 10:11:38.188999 |
updated_at | 2024-09-12 12:27:07.408491 |
description | Rust bindings to the libvirt C library |
homepage | https://libvirt.org/ |
repository | https://gitlab.com/libvirt/libvirt-rust |
max_upload_size | |
id | 11080 |
size | 438,648 |
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
.
qemu
allows using libvirt-qemu
functions, such as qemu_monitor_command
.
bindgen_regenerate
uses the bindgen
crate 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'}
...