如何通过Ansible Playbook在Vagrant虚拟机内启动Vault服务器
问题根因
两个异常的触发逻辑非常明确:
- 启动任务卡死是因为
vault server -dev属于前台常驻进程,Ansible执行命令时默认会等待命令完全退出才会标记任务执行完成,服务进程持续运行就会导致任务一直挂起直到超时。 - 执行
vagrant ssh返回127错误是因为Ansible本身已经通过SSH直连到Vagrant虚拟机内部执行操作,虚拟机内部默认没有安装Vagrant程序,自然找不到对应命令,Playbook流程里完全不需要额外执行vagrant ssh步骤。
可行方案
方案1:异步后台启动(适合快速测试场景)
直接调整启动任务的执行逻辑,通过Ansible异步参数将Vault进程放到后台运行,不阻塞Playbook执行,同时追加端口检测确认服务就绪:
- name: Launch vault dev server in background become: true become_user: vagrant shell: | nohup vault server -dev -dev-listen-address=0.0.0.0:8200 > /home/vagrant/vault.log 2>&1 & async: 10 poll: 0 - name: Verify vault service is reachable wait_for: port: 8200 delay: 3 timeout: 10
参数说明:async: 10搭配poll: 0会让Ansible把任务提交到后台后直接返回,不等待进程运行结果;服务启动日志和dev模式自动生成的root token都可以在/home/vagrant/vault.log文件中查看。
方案2:systemd托管服务(稳定场景推荐)
将Vault dev服务交给systemd托管,支持虚机重启后自动拉起,比手动后台启动更易维护:
- 首先下发systemd服务配置文件
- name: Deploy vault dev service config become: true copy: content: | [Unit] Description=HashiCorp Vault Dev Server After=network.target [Service] User=vagrant Group=vagrant ExecStart=/usr/bin/vault server -dev -dev-listen-address=0.0.0.0:8200 Restart=on-failure StandardOutput=append:/home/vagrant/vault.log StandardError=append:/home/vagrant/vault.log [Install] WantedBy=multi-user.target dest: /etc/systemd/system/vault-dev.service mode: '0644'
- 重载系统服务配置并启动Vault
- name: Reload systemd configs become: true systemd: daemon_reload: true - name: Start vault dev service and set auto-start become: true systemd: name: vault-dev.service state: started enabled: true - name: Wait for vault port to be online wait_for: port: 8200 host: 0.0.0.0 delay: 2 timeout: 15
注意事项
- Vagrant的8200端口转发规则配置正确的前提下,服务启动后直接在宿主机访问
http://127.0.0.1:8200即可打开Vault UI。 - Vault dev模式所有数据存储在内存中,服务或虚机重启后所有数据会被清空,仅适用于开发测试场景,禁止用于生产环境。
- 执行Playbook前可以通过
vagrant ssh-config生成Ansible所需的inventory连接配置,避免连接权限问题。
内容的提问来源于stack exchange,提问作者dish
相关产品推荐
相关产品推荐

