use super::CompletionShell;
use std::path::PathBuf;
#[derive(clap::Args, Debug)]
pub struct DoctorArgs {
#[arg(short, long)]
pub file: Option<PathBuf>,
#[arg(long)]
pub json: bool,
#[arg(long)]
pub fix: bool,
#[arg(long)]
pub network: bool,
}
#[derive(clap::Args, Debug)]
pub struct CompletionArgs {
#[arg(value_enum)]
pub shell: CompletionShell,
}
#[derive(clap::Args, Debug)]
pub struct WatchArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(long, default_value = "2")]
pub interval: u64,
#[arg(long)]
pub apply: bool,
#[arg(long)]
pub yes: bool,
}
#[derive(clap::Args, Debug)]
pub struct ExplainArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
pub resource: String,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct EnvArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct TestArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(short, long)]
pub machine: Option<String>,
#[arg(short, long)]
pub resource: Option<String>,
#[arg(short, long)]
pub tag: Option<String>,
#[arg(short, long)]
pub group: Option<String>,
#[arg(long)]
pub json: bool,
#[arg(long, default_value = "pepita")]
pub sandbox: String,
#[arg(long, default_value = "4")]
pub parallel: usize,
#[arg(long)]
pub pairs: bool,
#[arg(long, default_value = "50")]
pub mutations: usize,
}
#[derive(clap::Args, Debug)]
pub struct InventoryArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct RetryFailedArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(long = "param", value_name = "KEY=VALUE")]
pub params: Vec<String>,
#[arg(long)]
pub timeout: Option<u64>,
}
#[derive(clap::Args, Debug)]
pub struct RollingArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(long, default_value = "1")]
pub batch_size: usize,
#[arg(long = "param", value_name = "KEY=VALUE")]
pub params: Vec<String>,
#[arg(long)]
pub timeout: Option<u64>,
}
#[derive(clap::Args, Debug)]
pub struct CanaryArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(short, long)]
pub machine: String,
#[arg(long)]
pub auto_proceed: bool,
#[arg(long = "param", value_name = "KEY=VALUE")]
pub params: Vec<String>,
#[arg(long)]
pub timeout: Option<u64>,
}
#[derive(clap::Args, Debug)]
pub struct AuditArgs {
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(short, long)]
pub machine: Option<String>,
#[arg(short = 'n', long, default_value = "20")]
pub limit: usize,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct ComplianceArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct ExportArgs {
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(long, default_value = "csv")]
pub format: String,
#[arg(short, long)]
pub machine: Option<String>,
#[arg(short, long)]
pub output: Option<PathBuf>,
}
#[derive(clap::Args, Debug)]
pub struct SuggestArgs {
#[arg(short, long, default_value = "forjar.yaml")]
pub file: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct CompareArgs {
pub file1: PathBuf,
pub file2: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct EnvDiffArgs {
pub env1: String,
pub env2: String,
#[arg(long, default_value = "state")]
pub state_dir: PathBuf,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct TemplateArgs {
pub recipe: PathBuf,
#[arg(short = 'V', long = "var", value_name = "KEY=VALUE")]
pub vars: Vec<String>,
#[arg(long)]
pub json: bool,
}
#[derive(clap::Args, Debug)]
pub struct BootstrapArgs {
#[arg(long)]
pub addr: String,
#[arg(long, default_value = "root")]
pub user: String,
#[arg(long)]
pub password_stdin: bool,
#[arg(long)]
pub ssh_key: Option<String>,
#[arg(long)]
pub hostname: Option<String>,
#[arg(long)]
pub skip_key_if_working: bool,
}
#[derive(clap::Args, Debug)]
pub struct TriggerArgs {
pub rulebook: String,
#[arg(short, long, default_value = "forjar-rules.yaml")]
pub file: PathBuf,
#[arg(long, value_parser = parse_kv)]
pub payload: Vec<(String, String)>,
#[arg(long)]
pub dry_run: bool,
#[arg(long)]
pub json: bool,
}
fn parse_kv(s: &str) -> Result<(String, String), String> {
let (k, v) = s
.split_once('=')
.ok_or_else(|| format!("invalid key=value: {s}"))?;
Ok((k.to_string(), v.to_string()))
}