从 Ping 到供电:用 Ansible 和 Semaphore 管理 UPS
当你想在不安装代理的情况下稳定、可重复地变更基础设施时,Ansible 最能发挥威力。你用 playbook 描述期望状态,Ansible 通过 SSH 处理其余一切。这非常适合家庭实验室:硬件多样、团队很小(通常只有你自己),而且服务经常需要在重装后快速恢复。
下面是我在自己的 homelab 中使用的完整流程:在树莓派主机上备份 NUT(Network UPS Tools)配置、将凭据隔离、再用干净的 playbook 还原。随后我用 Ansible Semaphore 执行同样的 playbook,这样可以从简单的 UI 触发变更。
为什么用 Ansible 管理 UPS 栈
NUT 配置一次容易,日后重建却很麻烦。你需要:
- 每台树莓派都保持一致的 NUT 配置
- 不泄漏凭据的干净备份
- 新硬件也能重复执行的还原流程
- 既能本地运行,也能通过调度器/GUI 运行 playbook
Ansible 能一站式满足这些需求,并且 playbook 可版本控制。
我的 homelab 示例:NUT + PeaNUT
我按主机类型分组 inventory(rpi、lxcs、proxmox)。在 UPS 栈里:
rpi3b和rpi4b运行 NUT- PeaNUT 以 Docker 容器运行在 LXC 主机(
sysdocker)上 - NUT 的密钥存放在 group vault vars,不放进备份
关键点:
playbooks/nut-backup.yml备份 NUT 配置并清理敏感信息playbooks/nut-restore.yml从模板安装/配置 NUT- 从
/opt/stacks/peanut备份 PeaNUT 的compose.yaml、settings.yml和.env - PeaNUT 的配置通过模板填充 NUT 服务器占位符,确保还原时与树莓派配置一致
本地测试流程
我总是先 dry-run:
1ansible -i inventory/hosts.yml rpi -m ping
2ansible-playbook -i inventory/hosts.yml playbooks/nut-backup.yml --limit rpi --check
然后执行实际备份:
1ansible-playbook -i inventory/hosts.yml playbooks/nut-backup.yml --limit rpi
该 playbook 会:
- 拉取不含秘密的 NUT 配置文件
- 读取
upsmon.conf和upsd.users,再写出脱敏版本到本地 - 从
sysdocker备份 PeaNUT 的compose.yaml、settings.yml和.env
干净还原 NUT(以及 PeaNUT)
还原流程相反:在树莓派上安装 NUT 并部署模板。PeaNUT 则通过模板重建,凭据来自 vault 文件。
1ansible-playbook -i inventory/hosts.yml playbooks/nut-restore.yml --limit rpi,sysdocker --check
2ansible-playbook -i inventory/hosts.yml playbooks/nut-restore.yml --limit rpi,sysdocker
由于 PeaNUT 的 settings.yml 是模板,NUT 服务器列表由 inventory 变量生成,而不是写死 IP 或密码。这样可以确保 UI 与每台树莓派上的实际 NUT 配置保持一致。
用 Semaphore 运行同一套 playbook
Semaphore 提供了干净的 UI 和定时任务,而无需改动 playbook。我常用的配置步骤:
- 在 Semaphore 中创建新 Project。
- 添加 Git 仓库作为 Repository。
- 添加 Inventory(
inventory/hosts.yml)。 - 添加凭据(SSH key + Ansible Vault 密码)。
- 创建 Template,执行
playbooks/nut-backup.yml或playbooks/nut-restore.yml。 - 按需执行,或为备份设置定时任务。
好处很简单:playbook 不变,但可以随时随地运行。
小结
- Ansible 把脆弱的手工 NUT 配置变成可重复的自动化流程。
- 脱敏备份让你在分享日志或提交产物时更安全。
- Vault 文件让密钥远离仓库历史和备份。
- Semaphore 是运行同一套 playbook 的方便前端。
如果你在搭建 homelab UPS 栈,这是一个很好的入门自动化项目:输入清晰、输出关键,而且在重建时回报很大。
comments powered by Disqus