Vagrant 如何判断我是否在一个流浪的主人里面?

Vagrant 如何判断我是否在一个流浪的主人里面?,vagrant,environment,Vagrant,Environment,用什么防弹方法来确定我是否在一台流浪机器内运行 来宾操作系统是Debian Linux,不过如果每个操作系统都有指标,最好也有文档记录。AFAIK,除了您自己的定制之外,没有其他方法。想到的一个想法是触摸一个文件,然后从应用程序中引用该文件。在vagrant文件的底部添加类似于config.vm.provision“shell”的内容,内联:“touch/etc/is\u vagrant\u vm”,并以该文件的存在为基础设置条件。我不知道是否有任何防弹方法,但我经常做的一件事是将我的vagra

用什么防弹方法来确定我是否在一台流浪机器内运行


来宾操作系统是Debian Linux,不过如果每个操作系统都有指标,最好也有文档记录。

AFAIK,除了您自己的定制之外,没有其他方法。想到的一个想法是触摸一个文件,然后从应用程序中引用该文件。在vagrant文件的底部添加类似于config.vm.provision“shell”的内容,内联:“touch/etc/is\u vagrant\u vm”,并以该文件的存在为基础设置条件。

我不知道是否有任何防弹方法,但我经常做的一件事是将我的vagrant环境的shell UI配置为不同于主机的shell UI。这样一来,我一眼就能看出区别。如果您想区分多个流浪环境,它也很有帮助


若要自定义shell UI,将派上用场。

假设您没有在vagrant实例中运行vagrant实例:

if which vagrant > /dev/null 2>&1; then
    echo "This is most likely the host"
fi

您可以使用
facter

facter | grep vagrant

设置一个可以检查其存在的文件似乎是最可靠的处理方法

如果您不想将文件写入框中,另一个选项是检查是否存在
vagrant
用户本身:

grep -q '^vagrant:' /etc/passwd && echo 'Vagrant environment: true'
这并不是像其他人所指出的那样万无一失,而且有可能(尽管不常见)有一个使用不同用户进行连接的“漫游”框


如果您的环境中有一个名为vagrant的用户帐户,而该帐户实际上不是vagrant Box,那么检查用户的存在性也不会可靠地工作,但这也是相当罕见的。

这就是为什么我能够用一小段bash来回答这个问题。
-e
标志检查文件是否存在。将
provision
更改为对您的构建有意义的文件路径

#!/usr/bin/env bash

user=$USER

provision=/vagrant/Vagrantfile
if [ -e $provision ]
then
  echo "Vagrantfile found..."
  echo "Setting $user to vagrant..."
  user=vagrant
fi

# Example usage
cd /home/$user

在“centos/7”上测试,在“vagrant”中,您可以控制运行的IP,因此您可以将其更改为例如192.168.0.10

然后:


注意:/health假定为spring引导,但您也可以使用自己的/health端点实现

什么是“流浪机器”?只是通过vagrant启动的虚拟机?我怀疑有什么办法,b/c即使磁盘上有流浪者的证据,也可能它已经打包,现在通过虚拟盒运行。让“流浪者机器”引用vagrant根据初始的
vagrant up
命令创建的任何虚拟机。@ThorCaller我想添加这个作为其他任何人的答案,直到有更聪明的人通过:)是的,我正在考虑为自己设置一个环境变量,但我只是希望soemthing可以预先使用。如果你在来宾操作系统中安装了vagrant,你可以更巧妙地使用“vagrant status”。检查用户名可能非常可靠,或者检查/vagrant文件夹。这些并不能保证存在,但它们在我今天使用的每台流浪机器上都有。(这只是Ubuntu的股票)16.04 LTS版本上没有流浪用户。不过有一个
/vagrant
目录。
curl localhost:8080/health => in local e.g spring-boot

curl 192.168.0.10:8080/health => in vagrant