我正在尝试创建具有多个网络的多个主机以及术语定义。我不懂 Ruby,也不确定这个语法有什么问题。
有人能针对这个错误提供一些建议吗?
另外,在 Ruby 中使用 define 语法是否有最佳实践?
注意:下面的public_network是本地LAN网络(分配静态IP)。
Vagrant.configure("2") do |config|
# Ansible controller
config.vm.define "cent7ansiblecontroller" do |cent7ansiblecontroller|
cent7ansiblecontroller.vm.box = "geerlingguy/centos7"
# https://app.vagrantup.com/geerlingguy/boxes/centos7
cent7ansiblecontroller.vm.hostname = "cent7ansiblecontroller"
cent7ansiblecontroller.vm.network "hostonly", ip: "172.28.128.170"
cent7ansiblecontroller.vm.network "public_network", ip: "10.10.10.170"
end
end
谢谢你!
更新:
从 hostonly 切换到 private_network 似乎在 Vagrant 中验证并允许机器启动。
不确定 hostonly 是否是一个有效的选项。
发现了这个: https://www.vagrantup.com/docs/virtualbox/networking.html “默认情况下,私有网络是仅主机网络,...”并且 https://www.virtualbox.org/manual/ch06.html#network_internal
答案1
网络
hostonly
不是有效的 Vagrant。你只需要清楚你的连接应该达到多远,以及它与 Vagrant(和 VirtualBox)设置的关系
如果你想让客人与外界沟通,使用 Vagrant 的指令
public_network
<Object>.vm.network "public_network", ip: "<IP>"
如果你希望客户机之间以及主机之间能够互相通信,那么你需要 VirtualBox 的“仅主机网络”,你可以通过 Vagrant 的
private_network
<Object>.vm.network "private_network", ip: "<IP>"
如果你希望客户机之间只相互通信,你需要 VirtualBox 的“内部网络”,你可以通过 Vagrant 的带有属性的
private_network
指令获得它virtualbox__intnet: true
<Object>.vm.network "private_network", ip: "<IP>", virtualbox__intnet: true
这考虑到您需要固定 IP。如果您使用 DHCP 等,它会发生变化。转到官方文档了解详情。
最佳实践
您的语法没有问题 -do..end
工作起来就像这样。只有一个样式问题:您的内部块没有缩进。
Vagrant.configure("2") do |config|
# Ansible controller
config.vm.define # This should be indented
相反,应该这样做:
Vagrant.configure("2") do |config|
config.vm.define "<Machine name>" do |<Object>|
<Object>.vm.box ...
...
end
end