9

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

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

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

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

4

2 回答 2

14

在 Windows 中,环境变量 COMPUTERNAME 保存主机名。由于 Vagrantfile 实际上是一个 Ruby 脚本,你可以像这样设置主机名:

config.vm.hostname = "#{ENV['COMPUTERNAME']}-web"

在 OSXENV['COMPUTERNAME']上将评估为,nil因此您可以使用它在任何 Windows/*nix 系统上设置主机名:

config.vm.hostname = "#{ENV['COMPUTERNAME'] || `hostname`[0..-2]}-web"

更新:我从来没有意识到 Windows 有一个hostname命令。至少 Windows 7 可以。我不知道它可以追溯到多远。因此,您可以在所有系统上简单地使用以下内容:

config.vm.hostname = "#{`hostname`[0..-2]}-web"
于 2014-08-09T00:14:27.750 回答
3

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

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

config.vm.hostname = "#{`hostname`[0..-2]}".sub(/\..*$/,'')+"-web"
于 2015-01-16T17:45:27.643 回答