bootstrap: add UdevFilter
This commit is contained in:
@ -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)]
|
||||
|
||||
@ -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>,
|
||||
|
||||
Reference in New Issue
Block a user