Vagrant 是否有任何方法可以在脚本中向前获取流浪自动更正端口的值?
我正在使用Vagrant和Chef zero部署测试服务器,我正在测试的程序需要的一个属性是它的服务URL。 在我的流浪者档案中有以下几行:Vagrant 是否有任何方法可以在脚本中向前获取流浪自动更正端口的值?,vagrant,chef-infra,vagrantfile,chef-solo,Vagrant,Chef Infra,Vagrantfile,Chef Solo,我正在使用Vagrant和Chef zero部署测试服务器,我正在测试的程序需要的一个属性是它的服务URL。 在我的流浪者档案中有以下几行: config.vm.network :forwarded_port, guest: 80, host: 8000, auto_correct: true ... chef.json = { 'pywps' => { :serverurl => 'http://localhost:8000/cgi-bin/wps.py',
config.vm.network :forwarded_port, guest: 80, host: 8000, auto_correct: true
...
chef.json = {
'pywps' => {
:serverurl => 'http://localhost:8000/cgi-bin/wps.py',
...
}
}
对于我启动的第一个VM,一切正常,但是如果我需要第二个VM,或者某个VM已经在使用端口8000,那么Vagrant会自动更正我的端口,但我需要某种方法将该端口号放入serverurl变量中
这是可能的吗?可能不是现成的。您可以制作一个Vagrant插件来连接到配置过程中并重写数据,但这可能有些过分。来自shell: vagrant port命令可以提供此信息,例如:
vagrant port --guest 80
在您的情况下,默认情况下会打印出8000个,或者如果必须自动更正,主机端口最终会是什么
我尝试过但不起作用的事情:
未来答案的改进空间
从零号厨师:
我还没有用过Chef zero+Vagrant,所以我把它作为练习留给阅读本文的人。不过,我要说的是,您不希望从Vagrantfile内部运行这个shell命令,因为当运行这个命令读取Vagrantfile时,这会产生递归的污点
从文件中:
我怀疑在Vagrant文件中有或者可能有一种从ruby内部获取信息的方法,但我不确定如何做到这一点。可悲的是,类似于以下的东西不起作用:
port=config.vm.networks.select do | type,options|
类型==:转发的\u端口和选项[:来宾]==80
end.map do |类型、选项|
选项[:主机]
完
。。。因为在进行冲突检测和纠正之前,端口只获取来宾端口80的主机端口。我不知道在选择此选项之前是否或如何强制运行检测/纠正代码,和/或如何以不同的方式访问它,从而获得如此知情的数据。但是,如果您可以独立于vagrant文件运行某些内容,那么对于可能使用的其他端口,vagrant端口-guest 80技巧或其他技巧应该可以从这个线程获得正确的stdout信息。,你可以看到一个潜在的插件:一个后触发器可以用来执行ruby代码并将端口写入一个文件有趣的是,这出现在流浪版本2.1.0中,它显然是在我发布这个答案的前两天发布的我当时不知道他们。