多网络多主机 Vagrantfile 的正确语法是什么?

多网络多主机 Vagrantfile 的正确语法是什么?

我正在尝试创建具有多个网络的多个主机以及术语定义。我不懂 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

相关内容