从 Vagrant 脚本设置 RHEL box 的 ip

Setting the ip of a RHEL box from a Vagrant script

我已经预配置了一个 RHEL 映像,我不知道它最初是如何设置的。 默认情况下,它在 ip 192.168.50.50 上配置了一个本地网络接口。我想做的是从 Vagrant 脚本配置它的 ip。

这似乎没有做任何事情:

config.vm.network "private_network", ip: "192.168.50.10"

这确实改变了 ip:

sudo nmcli con mod bond0 ipv4.addresses 192.168.50.10/24
service network restart

但在那之后显然 Vagrant 不会自动检测要连接的 ip,所以我需要添加:

config.ssh.host = LOCAL_IP

但是问题来了:第一次,ip 是默认的 (.50.50)。所以我不能已经将 config.ssh.host 设置为我想要的 ip。如果我省略 config.ssh.host 行,它将第一次运行但之后不会运行,并且 vagrant ssh 也会失败。

有没有办法在不编辑第一个和第二个之间的 Vagrant 脚本的情况下设置盒子 ip vagrant up


编辑vagrant up --debug命令的结果:http://pastebin.com/BTccc4NT


编辑:问题是来自默认框的 Vagrant 文件(在 Windows,它在 C:\Users\user\.vagrant.d\boxes\nameofbox\virtualbox\Vagrantfile)本身有这一行:

config.vm.network "private_network", ip: "192.168.50.50", auto_config: false

嗯,很奇怪,它创建了 2 个接口

DEBUG network: Normalized configuration: {:adapter_ip=>"192.168.50.1", :auto_config=>false, :ip=>"192.168.50.50", :mac=>nil, :name=>nil, :netmask=>"255.255.255.0", :nic_type=>nil, :type=>:static, :adapter=>2}
 INFO network: Searching for matching hostonly network: 192.168.50.50
 INFO subprocess: Starting process: ["C:/Program Files/Oracle/VirtualBox/VBoxManage.exe", "list", "hostonlyifs"]

......

DEBUG network: Normalized configuration: {:adapter_ip=>"192.168.50.1", :auto_config=>true, :ip=>"192.168.50.10", :mac=>nil, :name=>nil, :netmask=>"255.255.255.0", :nic_type=>nil, :type=>:static, :adapter=>3}
 INFO network: Searching for matching hostonly network: 192.168.50.10
 INFO subprocess: Starting process: ["C:/Program Files/Oracle/VirtualBox/VBoxManage.exe", "list", "hostonlyifs"]

在 adapter2 上你有 192.168.50.50,在 adapter3 上你有 192.168.50.10

可能的原因是您使用的盒子有一个特定的 Vagrantfile,它已经在静态地址上定义了一个网络。

我对windows不是很熟悉,但是在mac上,框定义在~/.vagrant/boxes/<yourbox>/<theprovider>/Vagrantfile下面(注意这不是你项目中的Vagrantfile,这真的是一个Vagrantfile它将应用于从这个盒子构建的任何虚拟机);检查文件并删除网络配置(如果看到)

因为 documented Vagrantfile 从不同的位置合并

At each level, settings set will be merged with previous values. What this exactly means depends on the setting. For most settings, this means that the newer setting overrides the older one. However, for things such as defining networks, the networks are actually appended to each other. By default, you should assume that settings will override each other. If the behavior is different, it will be noted in the relevant documentation section.

所以默认情况下 Vagrant 将创建额外的网络接口,并且不会替换来自盒子 Vagrantfile 的接口。