use clap::{Parser, Subcommand};
use serde::{Deserialize, Serialize};
#[derive(Parser)]
#[command(
name = "cisak",
version,
about = "Container Installation - Swiss Army Knife"
)]
pub struct Cli {
#[arg(short = 'y', long = "assume-yes", global = true)]
pub assume_yes: bool,
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand)]
pub enum Command {
Generate,
Install {
#[arg(long)]
default: bool,
},
Outdated,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Config {
pub runtime: RuntimeConfig,
pub cni: Option<CniConfig>,
pub containerd: Option<ContainerdConfig>,
pub network: Option<NetworkConfig>,
pub kubernetes: Option<KubernetesConfig>,
pub cilium: Option<CiliumConfig>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct RuntimeConfig {
#[allow(dead_code)]
pub name: String,
pub version: String,
pub binary: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CniConfig {
pub version: String,
pub install_dir: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ContainerdConfig {
pub version: String,
pub install_dir: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct NetworkConfig {
pub ipv4_forward: Option<bool>,
pub sysctl_conf_path: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct KubernetesConfig {
pub version: String,
pub install_dir: Option<String>,
pub kubelet_install_dir: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CiliumConfig {
pub version: String,
pub install_dir: Option<String>,
}