我使用Vagrant和Chef-zero来部署测试服务器,我测试的程序需要的一个属性是它的服务URL。 在我的Vagrant文件中包含以下行:
config.vm.network :forwarded_port, guest: 80, host: 8000, auto_correct: true
...
chef.json = {
'pywps' => {
:serverurl => 'http://localhost:8000/cgi-bin/wps.py',
...
}
}
对于我启动的第一个VM,一切正常但如果我需要一秒(或者某些东西已经在使用端口8000),那么Vagrant会自动更正我的端口,但我需要一些方法将该端口号放入serverurl变量。< / p>
这可能吗?
答案 0 :(得分:1)
AFAIK不是现成的。你可以制作一个Vagrant插件来挂钩配置过程并重写数据,但这可能有点过头了。
答案 1 :(得分:1)
vagrant port
命令可以为您提供此信息,例如用:
vagrant port --guest 80
默认情况下会打印8000
- 或者无论主机端口是什么,如果它必须自动更正它。
(未来答案的改进空间......)
我没有使用Chef-zero + Vagrant足以知道如何将其插入那里,所以我将其作为练习留给读者阅读。但是,我会说,你不想在Vagrantfile中运行这个shell命令,因为这会产生递归的恶意(因为运行这个命令反过来会读取Vagrantfile)。
我怀疑在Vagrant文件中是否有或者可以成为从ruby内部获取信息的方法,但我不知道该怎么做。可悲的是,类似下面的内容不起作用:
theport = config.vm.networks.select do |type,options|
type == :forwarded_port and options[:guest] == 80
end.map do |type, options|
options[:host]
end.first
...因为theport
只是在进行冲突检测和纠正之前得到了访客端口80 的主机端口。我不知道是否或如何在选择此之前强制检测/更正代码运行,和/或如何以不同方式访问它以获得如此通知的数据。但是如果你可以从Vagrant文件中单独运行某些东西,那么vagrant port --guest 80
技巧(或者其他可能使用的其他端口)应该在stdout上获得正确的信息。