use ansible::{PlatformValidator, get_system_info, validate_system, Result};
fn main() -> Result<()> {
println!("🔍 Ansible-rs 系统要求检查");
println!("============================\n");
println!("1. 📱 平台兼容性检查");
println!("--------------------");
match PlatformValidator::check_platform() {
Ok(()) => {
println!("✅ 平台支持: {} 是受支持的平台", std::env::consts::OS);
}
Err(e) => {
println!("❌ 平台不支持: {}", e);
println!(" 支持的平台: {:?}", PlatformValidator::supported_platforms());
return Err(e);
}
}
println!(" 当前平台: {} ({})", std::env::consts::OS, std::env::consts::ARCH);
println!(" 支持的平台: {:?}", PlatformValidator::supported_platforms());
println!(" 最低 Ansible 版本要求: {}", PlatformValidator::minimum_ansible_version());
println!();
println!("2. ⚡ 快速系统验证");
println!("------------------");
match validate_system() {
Ok(()) => {
println!("✅ 基本系统要求满足");
}
Err(e) => {
println!("❌ 系统要求不满足: {}", e);
println!(" 请确保已安装 Ansible 并且可以在命令行中访问");
}
}
println!();
println!("3. 📋 详细系统信息");
println!("------------------");
match get_system_info() {
Ok(info) => {
println!("{}", info);
if info.is_fully_supported() {
println!("🎉 所有功能都可用!ansible-rs 可以完全正常工作。");
} else {
println!("⚠️ 部分功能不可用。缺失的功能:");
for feature in info.missing_features() {
println!(" - {}", feature);
}
println!("\n💡 建议:");
println!(" - 确保安装了完整的 Ansible 包");
println!(" - 检查 PATH 环境变量是否包含 Ansible 命令");
println!(" - 运行 'ansible --version' 验证安装");
}
}
Err(e) => {
println!("❌ 无法获取系统信息: {}", e);
println!("\n🔧 故障排除:");
println!(" 1. 检查是否安装了 Ansible:");
println!(" - Ubuntu/Debian: sudo apt install ansible");
println!(" - CentOS/RHEL: sudo yum install ansible");
println!(" - macOS: brew install ansible");
println!(" - pip: pip install ansible");
println!(" 2. 验证安装: ansible --version");
println!(" 3. 检查 PATH: echo $PATH");
}
}
println!();
println!("4. 🔧 组件可用性检查");
println!("--------------------");
let components: [(&str, fn() -> Result<String>); 5] = [
("ansible", PlatformValidator::check_ansible_installation as fn() -> Result<String>),
("ansible-playbook", PlatformValidator::check_ansible_playbook as fn() -> Result<String>),
("ansible-vault", PlatformValidator::check_ansible_vault as fn() -> Result<String>),
("ansible-config", PlatformValidator::check_ansible_config as fn() -> Result<String>),
("ansible-inventory", PlatformValidator::check_ansible_inventory as fn() -> Result<String>),
];
for (name, check_fn) in components {
match check_fn() {
Ok(info) => {
println!("✅ {}: 可用", name);
if name == "ansible" {
let version_line = info.lines().next().unwrap_or("未知版本");
println!(" 版本: {}", version_line.trim());
}
}
Err(e) => {
println!("❌ {}: 不可用 - {}", name, e);
}
}
}
println!();
println!("5. 💡 安装建议");
println!("-------------");
println!("如果某些组件不可用,请尝试以下安装方法:");
println!();
println!("📦 包管理器安装:");
println!(" Ubuntu/Debian: sudo apt update && sudo apt install ansible");
println!(" CentOS/RHEL: sudo yum install epel-release && sudo yum install ansible");
println!(" Fedora: sudo dnf install ansible");
println!(" macOS: brew install ansible");
println!();
println!("🐍 Python pip 安装:");
println!(" pip install ansible");
println!(" pip3 install ansible # 如果使用 Python 3");
println!();
println!("🔗 从源码安装:");
println!(" git clone https://github.com/ansible/ansible.git");
println!(" cd ansible");
println!(" python setup.py install");
println!();
println!("📚 更多信息:");
println!(" 官方文档: https://docs.ansible.com/ansible/latest/installation_guide/");
println!(" 中文文档: https://ansible-tran.readthedocs.io/en/latest/");
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use ansible::*;
#[test]
fn test_system_check_example() {
let _platforms = PlatformValidator::supported_platforms();
let _min_version = PlatformValidator::minimum_ansible_version();
let _is_supported = PlatformValidator::is_platform_supported();
let _platform_check = PlatformValidator::check_platform();
let _validate_result = validate_system();
let _system_info_result = get_system_info();
}
#[test]
fn test_component_check_functions_exist() {
let _: fn() -> Result<String> = PlatformValidator::check_ansible_installation;
let _: fn() -> Result<String> = PlatformValidator::check_ansible_playbook;
let _: fn() -> Result<String> = PlatformValidator::check_ansible_vault;
let _: fn() -> Result<String> = PlatformValidator::check_ansible_config;
let _: fn() -> Result<String> = PlatformValidator::check_ansible_inventory;
}
#[test]
fn test_error_handling() {
let platform_error = AnsibleError::unsupported_platform("test platform");
assert!(format!("{}", platform_error).contains("Unsupported platform"));
let command_error = AnsibleError::command_not_found("test command");
assert!(format!("{}", command_error).contains("Command not found"));
let system_error = AnsibleError::system_requirement("test requirement");
assert!(format!("{}", system_error).contains("System requirement not met"));
}
#[test]
fn test_platform_constants() {
let _os = std::env::consts::OS;
let _arch = std::env::consts::ARCH;
let platforms = PlatformValidator::supported_platforms();
assert!(!platforms.is_empty());
assert!(platforms.len() >= 5); }
#[test]
fn test_minimum_version_format() {
let min_version = PlatformValidator::minimum_ansible_version();
assert_eq!(min_version, "2.9");
assert!(min_version.chars().any(|c| c.is_ascii_digit()));
assert!(min_version.contains('.'));
}
}