You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多机Vagrant环境中,预配测试通过后如何立即停机?

解决方案:多机Vagrant环境预配完成后自动停机

针对你的需求——在tests.yml执行无错误后立即停机对应机器,这里有两种实用方案,你可以根据场景选择:

方案一:在Ansible Playbook中添加停机任务

这种方法不需要额外安装Vagrant插件,直接在你的tests.yml末尾添加条件任务,只有当所有测试任务成功完成时才执行停机操作。

修改tests.yml:

在Playbook的最后添加以下任务:

- name: Power off the machine if all tests pass
  ansible.builtin.command: systemctl poweroff
  become: true
  # 仅当当前Play的所有任务都未失败时执行
  when: ansible_failed_result is not defined
  • systemctl poweroff是跨Ubuntu/Fedora的通用停机命令(两者都使用systemd)
  • become: true确保以root权限执行停机操作
  • when条件保证只有前面的测试任务全部成功时,才触发停机

方案二:使用Vagrant Trigger插件统一控制

如果你希望在Vagrant层面统一管理停机逻辑,而不是修改Ansible Playbook,可以使用Vagrant的vagrant-triggers插件。

步骤1:安装插件

首先在终端执行以下命令安装插件:

vagrant plugin install vagrant-triggers

步骤2:修改Vagrantfile

在现有配置的末尾添加trigger规则,指定在provision成功后执行停机:

config.trigger.after :provision do |trigger|
  # 对每台机器执行halt命令
  trigger.run = { inline: "vagrant halt {vm.name}" }
  # 仅当provision状态为成功时触发
  trigger.only = { status: :ok }
end

这个配置会在每台机器的所有预配任务(包括你的setup.yml和tests.yml)执行成功后,自动调用vagrant halt命令停机。

方案对比

  • 方案一:无需额外插件,灵活度高,可以针对不同机器或测试结果设置不同的停机逻辑,适合需要精细控制的场景。
  • 方案二:在Vagrant层面统一管理,不需要修改Ansible代码,适合所有机器都需要统一执行停机操作的场景。

内容的提问来源于stack exchange,提问作者ipaleka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:03