Files
AWG2_harness/traffic_core/src/main.rs
T

78 lines
2.0 KiB
Rust

mod cli;
mod config;
mod daemon;
mod docker;
mod error;
mod firewall;
mod iface;
mod lock;
mod netns;
mod status;
mod swap;
mod traffic;
mod wg;
use std::path::PathBuf;
use clap::Parser;
use tracing_subscriber::EnvFilter;
use crate::cli::{Cli, Command};
use crate::config::Config;
fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt()
.with_env_filter(
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")),
)
.init();
let cli = Cli::parse();
let config_path = cli
.config
.unwrap_or_else(|| PathBuf::from("/etc/awg2-harness/config.toml"));
match cli.command {
Command::ValidateConfig => {
let cfg = Config::load(&config_path)?;
cfg.validate_config()?;
println!("config valid: {}", config_path.display());
}
Command::ValidateRuntime => {
let cfg = Config::load(&config_path)?;
cfg.validate_runtime()?;
println!("runtime valid");
}
Command::ApplyLimits => {
let cfg = Config::load(&config_path)?;
cfg.validate_all()?;
traffic::reconcile_traffic(&cfg)?;
println!("traffic limits reconciled");
}
Command::ApplyFirewall => {
let cfg = Config::load(&config_path)?;
cfg.validate_all()?;
firewall::apply_firewall(&cfg)?;
println!("firewall reconciled");
}
Command::Status => {
let cfg = Config::load(&config_path)?;
cfg.validate_config()?;
status::print_status(&cfg)?;
}
Command::EnsureSwap => {
let cfg = Config::load(&config_path)?;
cfg.validate_all()?;
swap::ensure_swap(&cfg)?;
println!("swap ensured");
}
Command::Daemon => {
let cfg = Config::load(&config_path)?;
cfg.validate_all()?;
daemon::run(cfg)?;
}
}
Ok(())
}