我想通知流浪者用户所用机器的IP地址。我的第一个想法是使用' /etc/rc.local'并将ifconfig的输出打印到' / vagrant'中的文件中。目录,但似乎在调用rc.local后挂载此目录。所以我需要另一种方法来通知用户没有任何ssh登录。
我的第二个想法是将ifconfig输出写入某些" place"它在vagrant启动输出中显示...如下面的示例所示。
...
default: Guest Additions Version: 4.3.10
default: VirtualBox Version: 5.0
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /home/user/vagrant/test
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
# start of desired output
Adresses found:
10.0.2.15
172.28.128.3
# end of desired output
==> default: flag to force provisioning. Provisioners marked to run always will still run.
...
欢迎所有想法。
答案 0 :(得分:1)
首先,您需要确定如何获取IP地址(即DHCP或静态)。然后基于此,您基本上只需将私有网络代码添加到vargrantfile中:
DHCP:
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
端
静态:
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "192.168.50.4"
端
然后你可以添加一个shell和ruby的混合物:
$script = <<SCRIPT
echo private_network...
ip: "192.168.50.4"
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
端
希望有足够的帮助让你前进。
答案 1 :(得分:1)
因为另一个答案没有描述如何从虚拟机内部发布动态数据,所以我写了我的解决方案。
步骤1:我将一个网络服务器放入vagrant vm并将访客端口80发布到主机端口8888
步骤2:准备guest的/etc/rc.local,以便收集所有需要的动态vm信息,并将输出写入文件'info.txt'中的webserver根目录
步骤3:向vagrantfile添加第二个配置条目,每个'vagrant up'运行并通知用户他可以在哪里获得更多信息
# Vagrantfile
...
config.vm.provision "shell", path: "scripts/bootstrap.sh"
config.vm.provision "shell", inline: "echo 'check http://localhost:8888/info.txt for more information'",
run: "always"
...
答案 2 :(得分:1)
您可能对this SO answer感兴趣,vagrant-hostmanager试图在vagrant up
上实现将网络接口的IP输出到终端的相同功能。
答案中的相关位 -
在客人身上:
/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}
应该得到这样的东西:
10.0.2.15
然后可以在你的Vagrant文件中使用它,如下所示:
config.vm.provision "shell", inline: <<-SHELL
sudo -i /vagrant/my_provisioning_script.sh $(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
SHELL
这里的技巧是知道哪个接口(上例中的eth0
)具有您想要的IP。当然如果你对grep或awk很好,你可以修改第一个命令来检查所有接口上的IP ......但这超出了我的能力。
# content of Vagrantfile
$infoScript = <<SCRIPT
echo 'IP-addresses of the vm ...'
ifconfig | grep 'inet A' | grep Bcast | awk '{print $2}' | sed 's/addr://'
SCRIPT
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.box_check_update = false
config.vm.network "private_network", type: "dhcp"
config.vm.network "forwarded_port", guest: 80, host: 8888
config.vm.provider "virtualbox" do |vb|
vb.name = "demo"
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
vb.memory = "2048"
vb.cpus = 2
end
# normal provision to set up the vm
config.vm.provision "shell", path: "scripts/bootstrap.sh"
# extra provision to print all the ip's of the vm
config.vm.provision "shell", inline: $infoScript,
run: "always"
end
修改强>
你可能也对Hakan's answer插件感兴趣,如果回显IP的目的只是为了你可以连接到盒子,这个插件可以修改你的客人的http://mydevbox.local