Barn 可以向 Vagrant 学什么
Barn 已经能从兼容 Pigsty 的主机清单创建多节点 Linux 实验环境,管理生命周期,并提供 SSH 与结构化输出。Vagrant 值得借鉴的是从“建好虚拟机”到“重复一次实验”之间的工作:执行配置步骤、搬运源码与构建产物、记录环境,以及回到已知状态。
本文是基于 2026-11-08 Barn 源码核查形成的设计提案。以下优先级是待实现候选,没有指定发布版本或交付日期。当前可用命令见 CLI 参考。
已有能力与实际缺口
| 工作流 | Barn 当前能力 | 可改进的方向 |
|---|---|---|
| 定义实验环境 | 静态清单、分组变量继承、逐节点镜像/资源/磁盘、节点选择 | 可复用环境配方;分组选择需要单独定义契约 |
| 收敛节点 | plan、up,以及显式 resize、recreate、destroy |
保留“节点缺席不能授权删除”的原则 |
| 配置客机 | 可手动重跑的 Bash provision,支持 sudo、超时、并发与脚本摘要 |
与生命周期关联的具名步骤和执行策略 |
| 搬运文件 | Virtio-9p 宿主共享与 OpenSSH 连接配置导出 | 内置上传/下载及可选的单向 rsync |
| 恢复实验 | 持久数据盘在普通销毁/重建时保留 | 覆盖相关状态的具名冷快照 |
| 复现镜像 | 签名目录、完整版本选择、导入、缓存和静态仓库工具 | 可携带的环境记录,以及已配置 VM 的导出 |
| 访问服务 | 固定私网地址与 loopback 管理 SSH | 用户声明服务端口及显式绑定地址 |
barn provision 已能按需重跑脚本;摘要记录执行内容,不会让脚本自动幂等,也不会跳过相同脚本。清单分组已经支持变量继承,操作选择器则按节点选择。持久盘能跨生命周期操作保留数据,但不能恢复到某个时间点。
这些区别可以从命令定义、清单解析器与 provision 执行器核对。内部端口转发结构,以及名称中含有 “snapshot” 或 “commit” 的函数,都要按实际暴露的行为判断,才能算作产品功能。
保持 Pigsty 接入简单
Pigsty 需要稳定的节点私网地址、数据盘、管理员账户、SSH 访问和部署代码的交付方式。Barn 提供虚拟机这一层,数据库与服务配置继续由 Pigsty 和 Ansible 负责。
第一步应复用 barn ssh-config,保留其中的连接地址、密钥、known-hosts 文件与 VM 身份。客机私网 IP 和宿主侧的 loopback SSH 地址用途不同;使用 scp、rsync 或 Ansible 的脚本除了清单地址,还需要实际连接参数。替换 Vagrant 生成的 SSH 片段时,应明确每个片段由哪个工具维护,避免旧 OpenSSH 条目优先匹配。
Vagrant box 名称也需要显式映射到 Barn 镜像引用,两种格式携带的元数据不同。同一份 Barn 清单可以混用多个发行版,但客机架构作用于整套部署;架构构建矩阵应在当前单部署模型下作为独立实验任务运行。
这样可以继续使用固定 IP 网络与单部署模型,并让服务编排保持在已有工具中。
建议的实现顺序
| 优先级 | 最小范围 | 验收条件 |
|---|---|---|
| P0:具名配置步骤 | 有序 shell 步骤、首次/每次执行策略、显式选择与重试;外部 Ansible 调用 | 单独重试失败步骤,不重跑成功步骤;报告节点、步骤、退出码与脚本摘要 |
| P0:环境记录 | 精确镜像版本/摘要/架构、目录 revision、解析后的 VM 规格与脚本摘要 | 用保留的制品在全新临时 BARN_HOME 重建拓扑,镜像身份一致且 plan 无漂移 |
| P1:文件传输 | 沿用 SSH 契约上传/下载,再补可选单向 rsync | 在客机本地盘构建,取回产物并核对摘要 |
| P1:冷快照 | 从已停机的 Linux VM 开始,一并定义根盘/数据盘、backing 链、NVRAM、规格与身份 | 文件、挂载和客机身份回到保存状态,不影响未选节点 |
| P1:服务端口 | 显式绑定地址、宿主/客机端口、冲突处理与结构化结果 | 重启后服务仍可达;向局域网开放需要显式地址 |
| P1:VM 导出 | 停机、展开 backing 依赖、清理机器/SSH 凭据,输出 qcow2 与元数据 | 导入全新实验环境后以新身份达到 SSH 就绪 |
Vagrant 的具名配置与运行策略、内置上传与单向 rsync提供了可参考的行为。它的快照依赖 provider 支持,package则列明了 VirtualBox 与 Hyper-V 支持。Barn 应为自己的后端定义具体保证。
环境记录必须保留对精确镜像字节的访问。数字版本前缀可能在目录更新后解析到不同版本;即使锁定完整版本,也无法恢复已下线的制品。VM 磁盘和导出镜像应存放在制品位置,配方、manifest 与摘要可以提交到 Git。
需要另行决定的产品范围
不同 BARN_HOME 已能隔离持久状态与运行时套接字。完整的并发项目支持还需要网络、端口和 SSH 归属,因为这些宿主集成仍共享资源;增加网卡或子网则会扩大网络验收矩阵。这两类能力应由具体实验需求推动,作为后续候选。Windows 后端、通用 provider/plugin API 和内存态挂起恢复,也各自需要独立设计与维护投入。
第一批改进应以三个流程验收:Pigsty 多节点 PostgreSQL 实验、按发行版和架构组织的扩展构建矩阵,以及源码上传和产物取回的单机开发。改动应减少这些流程中的手工步骤,同时保留显式销毁、镜像输入校验和稳定的机器可读输出。