kratactl/cli/host/
mod.rs

1use anyhow::Result;
2use clap::{Parser, Subcommand};
3use tonic::transport::Channel;
4
5use krata::events::EventStream;
6use krata::v1::control::control_service_client::ControlServiceClient;
7
8use crate::cli::host::cpu_topology::HostCpuTopologyCommand;
9use crate::cli::host::hv_console::HostHvConsoleCommand;
10use crate::cli::host::idm_snoop::HostIdmSnoopCommand;
11use crate::cli::host::status::HostStatusCommand;
12
13pub mod cpu_topology;
14pub mod hv_console;
15pub mod idm_snoop;
16pub mod status;
17
18#[derive(Parser)]
19#[command(about = "Manage the host of the isolation engine")]
20pub struct HostCommand {
21    #[command(subcommand)]
22    subcommand: HostCommands,
23}
24
25impl HostCommand {
26    pub async fn run(
27        self,
28        client: ControlServiceClient<Channel>,
29        events: EventStream,
30    ) -> Result<()> {
31        self.subcommand.run(client, events).await
32    }
33}
34
35#[derive(Subcommand)]
36pub enum HostCommands {
37    CpuTopology(HostCpuTopologyCommand),
38    Status(HostStatusCommand),
39    IdmSnoop(HostIdmSnoopCommand),
40    HvConsole(HostHvConsoleCommand),
41}
42
43impl HostCommands {
44    pub async fn run(
45        self,
46        client: ControlServiceClient<Channel>,
47        events: EventStream,
48    ) -> Result<()> {
49        match self {
50            HostCommands::CpuTopology(cpu_topology) => cpu_topology.run(client).await,
51
52            HostCommands::Status(status) => status.run(client).await,
53
54            HostCommands::IdmSnoop(snoop) => snoop.run(client, events).await,
55
56            HostCommands::HvConsole(hvconsole) => hvconsole.run(client).await,
57        }
58    }
59}