检查是否已完成Vagrant配置

Mos*_*atz 9 vagrant

我正在使用Vagrant来部署VM以进行开发.其中一个要求是vagrant provision创建一个新用户(在我编写的配置脚本中完成),然后vagrant ssh以该用户身份连接到该框.

我无法弄清楚如何判断盒子是否已经配置.

我看到Vagrant配置代码设置了env[:provision_enabled]这个运行是否应该进行配置,所以我想我可以做这样的事情:

if env[:provision_enabled]
  config.ssh.username = "#{data['ssh']['provision_username']}"
else
  config.ssh.username = "#{data['ssh']['username']}"
end
Run Code Online (Sandbox Code Playgroud)

这个想法是供应的SSH连接将使用一个连接和SSH连接,其他一切将使用另一个.

但是,env[:provision_enabled]似乎无法访问Vagrantfile.

有没有办法做到这一点?

arm*_*rma 12

因此,对于那些正在寻找准备使用Vagrantfile代码指令的人来说,这是一个检查VM是否已配置的功能和用法示例:

# Function to check whether VM was already provisioned
def provisioned?(vm_name='default', provider='virtualbox')
  File.exist?(".vagrant/machines/#{vm_name}/#{provider}/action_provision")
end

Vagrant.configure("2") do |config|
  # do something special if VM was provisioned
  config.ssh.username = 'custom_username' if provisioned?

  [...]
end
Run Code Online (Sandbox Code Playgroud)

警告!这是检查action_provision文件存在的hackery方法.但它有效,在发布的那一刻,没有其他好的方法.


小智 8

这似乎是由action_provisionVagrant数据dir(.vagrant/)中的文件决定的.它通常与您的文件夹位于同一文件夹中Vagrantfile.

因此,原始的解决方法是在Vagrantfile中设置ssh用户名,具体取决于文件是否存在.我虽然无法对此进行测试,但如果您只是重命名或删除该action_provision文件并且vagrant reload应该再次进行配置.