bootstrap: add UdevFilter

This commit is contained in:
Mikaël Cluseau
2025-11-10 13:55:14 +01:00
parent 1e047afac3
commit 1c23906aa3
2 changed files with 20 additions and 2 deletions

View File

@ -12,7 +12,7 @@ use dkl::dls;
#[derive(Parser)]
#[command()]
struct Cli {
#[arg(long, default_value = "http://[::1]:7606")]
#[arg(long, default_value = "http://[::1]:7606", env = "DLS_URL")]
dls: String,
#[command(subcommand)]

View File

@ -57,7 +57,10 @@ pub struct Network {
pub struct NetworkInterface {
pub var: String,
pub n: i16,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub regexps: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<UdevFilter>,
}
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
@ -154,7 +157,11 @@ pub struct CryptDev {
}
impl CryptDev {
pub fn optional(&self) -> bool {
self.optional.unwrap_or_else(|| self.filter.is_prefix())
self.optional.unwrap_or_else(|| match self.filter {
DevFilter::Dev(_) => false,
DevFilter::Prefix(_) => true,
DevFilter::Udev(_) => true,
})
}
}
@ -163,6 +170,7 @@ impl CryptDev {
pub enum DevFilter {
Dev(String),
Prefix(String),
Udev(UdevFilter),
}
impl DevFilter {
pub fn is_dev(&self) -> bool {
@ -179,6 +187,16 @@ impl DevFilter {
}
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
#[serde(rename_all = "snake_case")]
pub enum UdevFilter {
Eq(String, String),
Glob(String, String),
And(Vec<UdevFilter>),
Or(Vec<UdevFilter>),
Not(Box<UdevFilter>),
}
#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
pub struct Raid {
pub mirrors: Option<u8>,