有什么方法可以在脚本中获取 vagrant autocorrect port forward 的值吗?
is there any way to get value of a vagrant autocorrect port forward in a script?
我正在使用 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 变量.
这可能吗?
AFAIK 不是现成的。您可以制作一个 Vagrant 插件来连接到配置过程并重写数据,但这可能有点过头了。
来自shell:
vagrant port
命令可以为您提供此信息,例如与:
vagrant port --guest 80
在您的情况下,默认情况下会打印出 8000
——或者如果必须自动更正主机端口最终会是什么。
我试过但没有用的东西:
(未来答案的改进空间...)
来自 Chef-zero:
我对 Chef-zero + Vagrant 的使用还不够了解如何将其插入其中,因此我将其作为练习留给阅读本文的人。不过,我要说的是,你不想从 Vagrantfile 中 运行 这个 shell 命令,因为这会产生递归的污秽(因为 运行 反过来,读取 Vagrantfile)。
来自 Vagrantfile:
我怀疑有或可能有一种方法可以从 Vagrantfile 中的 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 的主机端口 会 是什么,然后再执行碰撞检测和校正。我不知道在选择这个之前是否或如何将 detection/correction 代码强制为 运行,and/or 如何以不同的方式访问它以获得如此知情的数据。但是,如果你可以 运行 一些与 Vagrantfile 分开的东西,vagrant port --guest 80
技巧(或任何其他可能使用的端口)应该在 stdout 上获得正确的信息。
我正在使用 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 变量.
这可能吗?
AFAIK 不是现成的。您可以制作一个 Vagrant 插件来连接到配置过程并重写数据,但这可能有点过头了。
来自shell:
vagrant port
命令可以为您提供此信息,例如与:
vagrant port --guest 80
在您的情况下,默认情况下会打印出 8000
——或者如果必须自动更正主机端口最终会是什么。
我试过但没有用的东西:
(未来答案的改进空间...)
来自 Chef-zero:
我对 Chef-zero + Vagrant 的使用还不够了解如何将其插入其中,因此我将其作为练习留给阅读本文的人。不过,我要说的是,你不想从 Vagrantfile 中 运行 这个 shell 命令,因为这会产生递归的污秽(因为 运行 反过来,读取 Vagrantfile)。
来自 Vagrantfile:
我怀疑有或可能有一种方法可以从 Vagrantfile 中的 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 的主机端口 会 是什么,然后再执行碰撞检测和校正。我不知道在选择这个之前是否或如何将 detection/correction 代码强制为 运行,and/or 如何以不同的方式访问它以获得如此知情的数据。但是,如果你可以 运行 一些与 Vagrantfile 分开的东西,vagrant port --guest 80
技巧(或任何其他可能使用的端口)应该在 stdout 上获得正确的信息。