krata-daemon 0.0.21

Daemon for the krata isolation engine
Documentation
use anyhow::Result;
use clap::{CommandFactory, Parser};
use krata::dial::ControlDialAddress;
use std::str::FromStr;

use crate::Daemon;

#[derive(Parser)]
#[command(version, about = "krata isolation engine daemon")]
pub struct DaemonCommand {
    #[arg(
        short,
        long,
        default_value = "unix:///var/lib/krata/daemon.socket",
        help = "Listen address"
    )]
    listen: String,
    #[arg(short, long, default_value = "/var/lib/krata", help = "Storage path")]
    store: String,
}

impl DaemonCommand {
    pub async fn run(self) -> Result<()> {
        let addr = ControlDialAddress::from_str(&self.listen)?;
        let mut daemon = Daemon::new(self.store.clone()).await?;
        daemon.listen(addr).await?;
        Ok(())
    }

    pub fn version() -> String {
        DaemonCommand::command()
            .get_version()
            .unwrap_or("unknown")
            .to_string()
    }
}