kratad/
command.rs

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}