GitHub

介绍与安装

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 等内置变量)
  • --check dry-run 模式
  • bastion / jump host 支持