从 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(rpilxcsproxmox)。在 UPS 栈里:

  • rpi3brpi4b 运行 NUT
  • PeaNUT 以 Docker 容器运行在 LXC 主机(sysdocker)上
  • NUT 的密钥存放在 group vault vars,不放进备份

关键点:

  • playbooks/nut-backup.yml 备份 NUT 配置并清理敏感信息
  • playbooks/nut-restore.yml 从模板安装/配置 NUT
  • /opt/stacks/peanut 备份 PeaNUT 的 compose.yamlsettings.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.confupsd.users,再写出脱敏版本到本地
  • sysdocker 备份 PeaNUT 的 compose.yamlsettings.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。我常用的配置步骤:

  1. 在 Semaphore 中创建新 Project。
  2. 添加 Git 仓库作为 Repository。
  3. 添加 Inventory(inventory/hosts.yml)。
  4. 添加凭据(SSH key + Ansible Vault 密码)。
  5. 创建 Template,执行 playbooks/nut-backup.ymlplaybooks/nut-restore.yml
  6. 按需执行,或为备份设置定时任务。

好处很简单:playbook 不变,但可以随时随地运行。

小结

  • Ansible 把脆弱的手工 NUT 配置变成可重复的自动化流程。
  • 脱敏备份让你在分享日志或提交产物时更安全。
  • Vault 文件让密钥远离仓库历史和备份。
  • Semaphore 是运行同一套 playbook 的方便前端。

如果你在搭建 homelab UPS 栈,这是一个很好的入门自动化项目:输入清晰、输出关键,而且在重建时回报很大。

comments powered by Disqus

翻译: