介绍与安装
anx (ansible-next) 是一个轻量级、无 Agent、声明式的 Rust 运维工具, 面向多主机配置管理与应用部署。
设计目标
- 控制端跨平台:Linux / macOS / Windows 单二进制分发。SSH 协议为纯 Rust 实现(russh),不依赖 OpenSSL、libssh 等 C 库。
- 受控端零安装:目标机器只需要 sshd(Linux / macOS / Windows OpenSSH 均可),不需要 Python、不需要 Agent。
- 声明式编排:YAML playbook + inventory,内置
shell/copy/template/file/fetch/debug模块。 - 配置加密:类 ansible-vault,Argon2id 密钥派生 + AES-256-GCM 认证加密。
- 多主机并行:tokio 异步并发,任务按序 lockstep 推进(与 Ansible 一致的语义)。
从源码构建
需要 Rust 工具链(rustup)。构建产物是单个可执行文件:
cargo build --release
# 产物: target/release/anx(单文件,可直接拷贝分发)交叉编译
控制端三平台的交叉编译示例:
cargo build --release --target x86_64-unknown-linux-musl # Linux 静态链接
cargo build --release --target x86_64-pc-windows-gnu # Windows
cargo build --release --target aarch64-apple-darwin # macOS (Apple Silicon)受控端不需要安装任何东西——确认目标机器的 sshd 可达即可。可以用
anx ping -i inventory.yml 验证连通性。项目结构
src/
├── main.rs # CLI(run / ping / exec / vault)
├── inventory.rs # 主机清单解析与主机选择
├── playbook.rs # 声明式 playbook 模型
├── executor.rs # 多主机并行、任务 lockstep 推进
├── modules.rs # 内置模块实现
├── ssh.rs # SSH 连接 / 认证 / SFTP(russh)
├── template.rs # minijinja 插值与表达式求值
├── vault.rs # Argon2id + AES-256-GCM 文件加密
└── output.rs # 终端彩色输出
examples/ # inventory 与 playbook 示例Roadmap
- 行内加密变量(
!vault标签,单值加密) - handlers / notify
- loop(
with_items) - facts 采集(os family 等内置变量)
--checkdry-run 模式- bastion / jump host 支持