1use anyhow::Result;
2use clap::{CommandFactory, Parser};
3use krata::dial::ControlDialAddress;
4use std::str::FromStr;
5
6use crate::Daemon;
7
8#[derive(Parser)]
9#[command(version, about = "krata isolation engine daemon")]
10pub struct DaemonCommand {
11 #[arg(
12 short,
13 long,
14 default_value = "unix:///var/lib/krata/daemon.socket",
15 help = "Listen address"
16 )]
17 listen: String,
18 #[arg(short, long, default_value = "/var/lib/krata", help = "Storage path")]
19 store: String,
20}
21
22impl DaemonCommand {
23 pub async fn run(self) -> Result<()> {
24 let addr = ControlDialAddress::from_str(&self.listen)?;
25 let mut daemon = Daemon::new(self.store.clone()).await?;
26 daemon.listen(addr).await?;
27 Ok(())
28 }
29
30 pub fn version() -> String {
31 DaemonCommand::command()
32 .get_version()
33 .unwrap_or("unknown")
34 .to_string()
35 }
36}