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

时间:2014-08-08 23:44:10

标签: vagrant virtualbox puppet host vagrantfile

我们有一个Vagrant设置运行Ubuntu 12.04作为我们团队中的客户操作系统,其中主机操作系统是Windows 7或8.我希望能够做的是获取主机名Windows主机并在设置期间将其附加到Vagrant主机名,例如

config.vm.hostname = <windows hostname>-web

这是因为我们有几个开发人员从他们的本地开发机器连接到外部服务,如果我们都设置了相同的主机名(因为Vagrant文​​件是源控制的并且对每个人都是相同的),那么在这些外部的日志中我们可以区分谁向服务提出了什么要求的服务。我想如果我们能够从主机操作系统动态获取主机名,那么它将是识别在每台开发人员机器上运行的各个客户操作系统的好方法。

这是可能的,如果是这样,实现它的最佳方法是什么?

2 个答案:

答案 0 :(得分:13)

在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"

答案 1 :(得分:3)

我使用了这种技术,但我不得不稍微修改一下表达式。 如果hostname像在Mac上那样返回FQDN,则原始功能不起作用。

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

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