从Vagrant脚本设置RHEL框的ip

时间:2016-09-19 08:21:58

标签: linux networking ssh vagrant rhel

我已经预先配置了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 up之间的Vagrant脚本的情况下设置box ip?

修改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

1 个答案:

答案 0 :(得分:1)

哼,很奇怪,它会创建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"]

在适配器2上你有192.168.50.50,在适配器3你有192.168.50.10

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

我对Windows并不完全熟悉,但是在mac上,框定义在~/.vagrant/boxes/<yourbox>/<theprovider>/Vagrantfile下(请注意,这不是项目中的Vagrantfile,这实际上是一个Vagrantfile,它将应用于由此构建的任何VM框);如果你看到它,请检查文件并删除网络配置

作为documented,Vagrantfile将从不同的位置合并

  

在每个级别,设置集将与先前的值合并。这究竟意味着什么取决于设置。对于大多数设置,这意味着较新的设置会覆盖旧设置。 但是,对于定义网络等内容,网络实际上是相互附加的。默认情况下,您应该假设设置将相互覆盖。如果行为不同,将在相关文档部分中注明。

所以默认情况下,Vagrant会创建额外的网络接口,而不会替换来自Vagrantfile框的那个。