我正在使用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应该再次进行配置.
| 归档时间: |
|
| 查看次数: |
5029 次 |
| 最近记录: |