Ansible批量部署工具
基于 Go + Ansible 的批量运维部署系统,支持批量执行命令、Playbook管理、主机分组等功能。
功能特性
- 🌐 Web界面 - 简洁美观的Web管理界面
- 🖥️ 主机管理 - 支持添加、删除、编辑主机
- 📁 分组管理 - 灵活的主机组管理
- 💻 命令执行 - 批量并行/串行执行命令
- 📜 Playbook管理 - 预置Playbook模板,支持快速执行
- 📊 任务跟踪 - 实时任务进度监控
- 🔄 自动刷新 - 数据自动同步
快速开始
1. 安装依赖
# 安装Go
curl -fsSL https://go.dev/dl/go1.21.linux-amd64.tar.gz | tar -C /usr/local -xzf -
# 安装Ansible
pip install ansible
# 安装SSH
apt install openssh-client # Debian/Ubuntu
yum install openssh-clients # CentOS/RHEL
2. 构建项目
cd /root/ansible-deploy
go mod tidy
go build -o ansible-deploy cmd/main.go
3. 配置SSH免密登录
# 生成SSH密钥
ssh-keygen -t rsa
# 复制到目标主机
ssh-copy-id user@hostname
4. 启动服务
# 默认端口8080
./ansible-deploy
# 自定义端口
./ansible-deploy -port 9000
# 自定义配置
./ansible-deploy -config /path/to/config.yaml
5. 访问Web界面
打开浏览器访问: http://localhost:8080
配置说明
配置文件位于 config/config.yaml:
# Ansible路径
ansible_path: /usr/bin/ansible
# 资产清单目录
inventory_dir: ~/ansible-deploy/inventory
# Playbook目录
playbook_dir: ~/ansible-deploy/playbooks
# 日志目录
log_dir: ~/ansible-deploy/logs
# SSH超时(秒)
ssh_timeout: 30
# 最大并发数
max_parallelism: 10
API接口
主机管理
| 方法 |
路径 |
说明 |
| GET |
/api/hosts |
获取主机列表 |
| POST |
/api/hosts |
添加主机 |
| PUT |
/api/hosts/:id |
更新主机 |
| DELETE |
/api/hosts/:id |
删除主机 |
| POST |
/api/hosts/test/:id |
测试连接 |
主机组
| 方法 |
路径 |
说明 |
| GET |
/api/groups |
获取组列表 |
| POST |
/api/groups |
创建组 |
| PUT |
/api/groups/:name |
更新组 |
| DELETE |
/api/groups/:name |
删除组 |
命令执行
| 方法 |
路径 |
说明 |
| POST |
/api/command/execute |
执行命令 |
| POST |
/api/command/batch |
批量执行 |
Playbook
| 方法 |
路径 |
说明 |
| GET |
/api/playbooks |
列出Playbook |
| POST |
/api/playbooks/execute |
执行Playbook |
任务
| 方法 |
路径 |
说明 |
| GET |
/api/tasks |
获取任务列表 |
| GET |
/api/tasks/:id |
获取任务详情 |
| DELETE |
/api/tasks/:id |
取消任务 |
使用示例
添加主机
curl -X POST http://localhost:8080/api/hosts \
-H "Content-Type: application/json" \
-d '{
"name": "web-server-01",
"ip": "192.168.1.100",
"port": 22,
"username": "root",
"password": "your-password",
"groups": ["webservers"]
}'
批量执行命令
curl -X POST http://localhost:8080/api/command/batch \
-H "Content-Type: application/json" \
-d '{
"hosts": ["web1", "web2", "web3"],
"command": "df -h",
"parallel": true
}'
执行Playbook
curl -X POST http://localhost:8080/api/playbooks/execute \
-H "Content-Type: application/json" \
-d '{
"name": "update-packages",
"hosts": ["all"],
"extra_vars": {}
}'
预置Playbook
| 文件 |
说明 |
update-packages.yml |
更新系统包 |
deploy-docker.yml |
安装Docker |
deploy-nginx.yml |
部署Nginx |
check-system.yml |
系统信息检查 |
目录结构
ansible-deploy/
├── cmd/
│ └── main.go # 主程序入口
├── config/
│ └── config.yaml # 配置文件
├── internal/
│ ├── handlers/ # HTTP处理器
│ ├── models/ # 数据模型
│ └── services/ # 业务逻辑
├── web/
│ └── dist/
│ └── index.html # 前端页面
├── playbooks/ # Playbook目录
├── scripts/
│ └── install.sh # 安装脚本
└── README.md
注意事项
- SSH免密 - 建议配置SSH密钥对实现免密登录
- 权限 - 部分操作需要sudo权限,确保用户有sudo权限
- 防火墙 - 确保SSH端口开放
- Python - Ansible需要目标主机安装Python
License
MIT License