-
Notifications
You must be signed in to change notification settings - Fork 124
Expand file tree
/
Copy pathexp.rs
More file actions
52 lines (45 loc) · 1.48 KB
/
exp.rs
File metadata and controls
52 lines (45 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//! `exp` CLI sub-command.
use crate::{initrd, util};
use anyhow::Result;
use clap::{ArgGroup, Parser};
/// Experimental subcommands
#[derive(Debug, Parser)]
pub enum CliExp {
RdNetworkKargs(CliRdNetworkKargs),
}
impl CliExp {
// Run sub-command.
pub(crate) fn run(&self) -> Result<()> {
match self {
CliExp::RdNetworkKargs(cmd) => cmd.run()?,
};
Ok(())
}
}
/// Supplement initrd with network configuration kargs
#[derive(Debug, Parser)]
#[command(group(ArgGroup::new("provider-group").args(["cmdline", "provider"]).required(true)))]
pub struct CliRdNetworkKargs {
/// Read the cloud provider from the kernel cmdline
#[arg(long)]
cmdline: bool,
/// The name of the cloud provider
#[arg(long, value_name = "name")]
provider: Option<String>,
/// Default value for network kargs fallback
#[arg(long = "default-value", value_name = "args")]
default_kargs: String,
}
impl CliRdNetworkKargs {
/// Run the sub-command.
pub(crate) fn run(&self) -> Result<()> {
let provider = super::get_provider(self.provider.as_deref())?;
if util::has_network_kargs(super::CMDLINE_PATH)? {
slog_scope::warn!("kernel cmdline already specifies network arguments, skipping");
return Ok(());
};
let provider_kargs = initrd::fetch_network_kargs(&provider)?;
let kargs = provider_kargs.as_ref().unwrap_or(&self.default_kargs);
initrd::write_network_kargs(kargs)
}
}