vsock: Replace the config Crate with figment

The config crate, which was previously used in vsock is no longer
maintained. To ensure continued support and improvement, the
figment crate is used as a replacement for configuration management.

Closes #639

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
This commit is contained in:
Dorinda Bassey 2024-07-22 10:51:56 +02:00 committed by Stefano Garzarella
parent b7f15e31e7
commit d6a10d7565
4 changed files with 49 additions and 114 deletions

135
Cargo.lock generated
View file

@ -2,18 +2,6 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
name = "aho-corasick"
version = "1.1.3"
@ -23,12 +11,6 @@ dependencies = [
"memchr",
]
[[package]]
name = "allocator-api2"
version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
[[package]]
name = "alsa"
version = "0.9.0"
@ -121,18 +103,21 @@ version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
[[package]]
name = "arraydeque"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
[[package]]
name = "assert_matches"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
[[package]]
name = "atomic"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
dependencies = [
"bytemuck",
]
[[package]]
name = "autocfg"
version = "1.3.0"
@ -206,6 +191,12 @@ dependencies = [
"wyz",
]
[[package]]
name = "bytemuck"
version = "1.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e"
[[package]]
name = "byteorder"
version = "1.5.0"
@ -306,18 +297,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422"
[[package]]
name = "config"
version = "0.14.0"
source = "git+https://github.com/mehcode/config-rs?rev=e3c1d0b452639478662a44f15ef6d5b6d969bf9b#e3c1d0b452639478662a44f15ef6d5b6d969bf9b"
dependencies = [
"lazy_static",
"nom",
"pathdiff",
"serde",
"yaml-rust2",
]
[[package]]
name = "convert_case"
version = "0.6.0"
@ -342,15 +321,6 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "encoding_rs"
version = "0.8.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
dependencies = [
"cfg-if",
]
[[package]]
name = "env_filter"
version = "0.1.0"
@ -440,6 +410,19 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
[[package]]
name = "figment"
version = "0.10.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3"
dependencies = [
"atomic",
"serde",
"serde_yaml",
"uncased",
"version_check",
]
[[package]]
name = "funty"
version = "2.0.0"
@ -563,19 +546,6 @@ name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash",
"allocator-api2",
]
[[package]]
name = "hashlink"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
"hashbrown",
]
[[package]]
name = "heck"
@ -844,12 +814,6 @@ version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "pathdiff"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]]
name = "peeking_take_while"
version = "0.1.2"
@ -1300,6 +1264,15 @@ dependencies = [
"winnow",
]
[[package]]
name = "uncased"
version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697"
dependencies = [
"version_check",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
@ -1524,12 +1497,11 @@ dependencies = [
"assert_matches",
"byteorder",
"clap",
"config",
"env_logger",
"epoll",
"figment",
"log",
"serde",
"serde_yaml",
"tempfile",
"thiserror",
"vhost",
@ -1740,17 +1712,6 @@ dependencies = [
"tap",
]
[[package]]
name = "yaml-rust2"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8"
dependencies = [
"arraydeque",
"encoding_rs",
"hashlink",
]
[[package]]
name = "yansi-term"
version = "0.1.2"
@ -1759,23 +1720,3 @@ checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1"
dependencies = [
"winapi",
]
[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.46",
]

View file

@ -12,13 +12,3 @@ members = [
"vhost-device-template",
"vhost-device-vsock",
]
# In vhost-device-vsock we use the `config` crate which now has the `yaml-rust`
# dependency that is unmaintained as cargo audit is reporting.
# See https://github.com/rust-vmm/vhost-device/issues/639
#
# They merged the fix, but for now they don't do a release because they don't
# have a maintainer. To get the CI green, let's do this workaround, but before
# the next release we have to find a solution.
[patch.crates-io]
config = { git = "https://github.com/mehcode/config-rs", rev = "e3c1d0b452639478662a44f15ef6d5b6d969bf9b" }

View file

@ -26,9 +26,8 @@ virtio-queue = "0.12"
virtio-vsock = "0.6"
vm-memory = "0.14.1"
vmm-sys-util = "0.12"
config = { version = "0.14", default-features = false, features = ["yaml"] }
figment = { version = "0.10.19", features = ["yaml"] }
serde = { version = "1", features = ["derive"] }
serde_yaml = "0.9"
[dev-dependencies]
assert_matches = "1.5"

View file

@ -19,6 +19,10 @@ use std::{
use crate::vhu_vsock::{CidMap, VhostUserVsockBackend, VsockConfig};
use clap::{Args, Parser};
use figment::{
providers::{Format, Yaml},
Figment,
};
use log::error;
use serde::Deserialize;
use thiserror::Error as ThisError;
@ -173,11 +177,12 @@ fn parse_vm_params(s: &str) -> Result<VsockConfig, VmArgsParseError> {
impl VsockArgs {
pub fn parse_config(&self) -> Option<Result<Vec<VsockConfig>, CliError>> {
if let Some(c) = &self.config {
let b = config::Config::builder()
.add_source(config::File::new(c.as_str(), config::FileFormat::Yaml))
.build();
if let Ok(s) = b {
let mut vms_param = s.get::<Vec<ConfigFileVsockParam>>("vms").unwrap();
let figment = Figment::new().merge(Yaml::file(c.as_str()));
if let Ok(mut config_map) =
figment.extract::<HashMap<String, Vec<ConfigFileVsockParam>>>()
{
let vms_param = config_map.get_mut("vms").unwrap();
if !vms_param.is_empty() {
let parsed: Vec<VsockConfig> = vms_param
.drain(..)