/*! # NAC智能部署工具 NAC区块链节点和服务的智能部署管理工具。 ## 功能特性 - ✅ 多环境部署(开发、测试、生产) - ✅ 配置模板管理 - ✅ 健康检查 - ✅ 回滚机制 - ✅ 日志收集 ## 使用示例 ```bash # 部署到开发环境 nac-deploy deploy --env dev # 部署到生产环境 nac-deploy deploy --env prod --config prod.toml # 检查部署状态 nac-deploy status # 回滚到上一个版本 nac-deploy rollback ``` */ mod config; mod deployer; mod health; mod rollback; use clap::{Parser, Subcommand}; use colored::*; use config::DeployConfig; use deployer::Deployer; use health::HealthChecker; use rollback::RollbackManager; #[derive(Parser)] #[command(name = "nac-deploy")] #[command(about = "NAC智能部署工具", long_about = None)] #[command(version)] struct Cli { #[command(subcommand)] command: Commands, } #[derive(Subcommand)] enum Commands { /// 部署NAC节点 Deploy { /// 目标环境(dev/test/prod) #[arg(short, long, default_value = "dev")] env: String, /// 配置文件路径 #[arg(short, long)] config: Option, }, /// 检查部署状态 Status { /// RPC端口 #[arg(short, long, default_value = "8545")] port: u16, }, /// 回滚到上一个版本 Rollback { /// 回滚到指定版本 #[arg(short, long)] version: Option, }, /// 生成配置模板 Init { /// 环境名称 #[arg(short, long, default_value = "dev")] env: String, /// 输出文件路径 #[arg(short, long)] output: Option, }, } fn main() { env_logger::init(); let cli = Cli::parse(); match cli.command { Commands::Deploy { env, config } => { println!("{}", "🚀 NAC智能部署工具".bright_cyan().bold()); println!("目标环境: {}", env.bright_yellow()); let deploy_config = if let Some(cfg_path) = config { println!("配置文件: {}", cfg_path.bright_yellow()); match DeployConfig::load(&cfg_path) { Ok(cfg) => cfg, Err(e) => { eprintln!("{} {}", "❌ 配置加载失败:".bright_red(), e); std::process::exit(1); } } } else { DeployConfig::for_env(&env) }; let deployer = Deployer::new(deploy_config); if let Err(e) = deployer.deploy() { eprintln!("{} {}", "❌ 部署失败:".bright_red(), e); std::process::exit(1); } } Commands::Status { port } => { println!("{}", "📊 NAC部署状态".bright_cyan().bold()); let checker = HealthChecker::new(port); match checker.check() { Ok(_status) => { println!("{}", "✅ 健康检查完成".bright_green()); } Err(e) => { eprintln!("{} {}", "❌ 健康检查失败:".bright_red(), e); std::process::exit(1); } } } Commands::Rollback { version } => { println!("{}", "⏮️ NAC版本回滚".bright_cyan().bold()); let manager = RollbackManager::new("./backups".to_string()); if let Err(e) = manager.rollback(version) { eprintln!("{} {}", "❌ 回滚失败:".bright_red(), e); std::process::exit(1); } } Commands::Init { env, output } => { println!("{}", "📝 生成配置模板".bright_cyan().bold()); println!("环境: {}", env.bright_yellow()); let config = DeployConfig::for_env(&env); let output_path = output.unwrap_or_else(|| format!("{}.toml", env)); match config.save(&output_path) { Ok(_) => { println!("{} {}", "✅ 配置已保存到:".bright_green(), output_path.bright_yellow()); } Err(e) => { eprintln!("{} {}", "❌ 配置保存失败:".bright_red(), e); std::process::exit(1); } } } } }