From 487b41747d1822db343b7226aaf2bca6228e0610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Mon, 10 Nov 2025 13:55:14 +0100 Subject: [PATCH] bootstrap: add UdevFilter --- src/bin/dls.rs | 2 +- src/bootstrap.rs | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/bin/dls.rs b/src/bin/dls.rs index 37482a5..140d610 100644 --- a/src/bin/dls.rs +++ b/src/bin/dls.rs @@ -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)] diff --git a/src/bootstrap.rs b/src/bootstrap.rs index 46abf30..fdcd98a 100644 --- a/src/bootstrap.rs +++ b/src/bootstrap.rs @@ -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, + #[serde(skip_serializing_if = "Option::is_none")] + pub filter: Option, } #[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(String), } impl DevFilter { pub fn is_dev(&self) -> bool { @@ -179,6 +187,16 @@ impl DevFilter { } } +#[derive(Debug, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "snake_case")] +pub enum UdevFilter { + Eq(String, String), + Glob(String, String), + And(Vec), + Or(Vec), + Not(Box), +} + #[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)] pub struct Raid { pub mirrors: Option,