Vagrant: 获取主机操作系统的名称

9
我们团队使用 Vagrant 在 Windows 7 或 8 主机上运行 Ubuntu 12.04 作为客户操作系统。现在,我想在设置过程中得到 Windows 主机机器的主机名,并将其添加到 Vagrant 的主机名中,例如:
config.vm.hostname = <windows hostname>-web

这是因为我们有多个开发人员从本地开发机连接到外部服务,如果我们都设置相同的主机名(因为Vagrant文件受源代码控制,对于每个人都是相同的),那么在这些外部服务的日志中,我们无法区分是谁向服务发出了哪个请求。我认为,如果我们能够动态地从主机操作系统获取主机名,这将是识别每个开发人员机器上运行的各个客户机操作系统的好方法。
是否可能实现这一点?如果是,最好的实现方式是什么?
2个回答

14
在Windows中,环境变量COMPUTERNAME保存主机名。 由于Vagrantfile实际上是一个Ruby脚本,因此可以通过以下方式设置主机名:
config.vm.hostname = "#{ENV['COMPUTERNAME']}-web"

在OSX上,ENV ['COMPUTERNAME']的值将被评估为nil,因此您可以使用此选项在任何Windows/*nix系统上设置主机名:
config.vm.hostname = "#{ENV['COMPUTERNAME'] || `hostname`[0..-2]}-web"
更新:我从未意识到Windows有一个hostname命令。至少在Windows 7上有。我不知道它可以追溯到多久以前。因此,您可以在所有系统上使用以下命令:
config.vm.hostname = "#{`hostname`[0..-2]}-web"

我认为他们想要托管代码的vm机器的名称。 - Chris Stratton
@ChrisStratton - 对的。他们想要将客户Linux虚拟机的主机名设置为虚拟机主机(Windows机器)的主机名加上-web后缀。这正是我的解决方案所做的。我有什么遗漏吗? - Ferruccio
好的,我错过了你提出如何配置客户端的建议。对此我感到很抱歉。 - Chris Stratton
谢谢 @Ferruccio - 那个完美地解决了问题。只是出于好奇,如果主机机器是Mac,ENV ['COMPUTERNAME'] 是否被设置了呢? - Adrian Walls
1
@AdrianWalls - 不是。请看我的更新,有一个更通用的解决方案。 - Ferruccio

3

我使用了这种技术,但是我不得不稍微修改一下表达式。如果主机名返回类似于Mac上的FQDN,原始表达式就不太适用。

以下是适用于Mac和Windows的工作解决方案。

config.vm.hostname = "#{`hostname`[0..-2]}".sub(/\..*$/,'')+"-web"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接