TL; 博士;有人可以帮助我理解 Vagrantfile 中定义的这些“名称”之间的区别吗?

  • config.vm.define "worker"
  • box.vm.box = "ots-box"
  • box.vm.host_name = "worker"
  • vb.name = "barhost"


  • 在尝试更改我拥有的 vagrant 实例的主机名时,我迷失在 Vagrantfile 语法中。现在我已经成功更改了主机名,但其他一些东西(网络)不起作用。我怀疑我已经改变了一些导致 Vagrant 配置盒子的特殊方式,这导致了这个问题。
    Vagrant.configure("2") do |config|
      config.vm.define "worker".to_sym do |box|
        box.vm.box = "ots-box"
        box.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
        box.vm.host_name = "worker"
    end
    

    我想这无关紧要,但我正在尝试使用 Oracle VirtualBox 和 vagrant 1.7.4 版在 Mac El-capitan 上创建一个 ubuntu 框。

    Documentation 说:
    config.vm.box - 这配置了机器将被带到哪个盒子。此处的值应该是已安装框的名称或 HashiCorp 的 Atlas 中框的简写名称。

    Example here 引入了另一个术语 vb.name :
    Vagrant.configure('2') do |config|
      config.vm.box = "precise64"
      config.vm.box_url = "http://files.vagrantup.com/precise64.box"
      config.vm.define "foohost" do |foohost|
      end
      config.vm.provider :virtualbox do |vb|
          vb.name = "barhost"
      end
    end
    

    最佳答案

    我将尝试逐点回答:

    首先是以下语法

    Vagrant.configure("2") do |config|
      config.vm.define "worker".to_sym do |box|
        box.vm.box = "ots-box"
        box.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
        box.vm.host_name = "worker"
      end
    

    主要用于有多个 VM 正在运行 ( https://docs.vagrantup.com/v2/multi-machine/ ),因此您需要为 VM 定义一个名称,在您的情况下为 worker,因此在下一个块中,将为 worker VM 设置所有参数,并使 ruby​​ 语法满足您的需要定义一个变量名( box )

    因此,如果您的 Vagrantfile 中只有一个 VM,则不需要此语法,只需使用
    Vagrant.configure("2") do |config|
        config.vm.box = "ots-box"
        config.vm.box_url = "http://testing.xxx.com.s3.amazonaws.com/ots-fe.box"
        config.vm.hostname = "worker"
      end
    

    其次,config/box.vm.box 指向 vagrant box 这是 Vagrant 的一个非常重要的概念,因为您将旋转的每个 VM 都必须针对现有框创建。你可以从网上下载盒子(vagrant atlas,http://www.vagrantbox.es/)或者自己制作盒子。您可以通过运行 vagrant box list 来查看机器上安装的可用框。如果 Vagrantfile 中设置的框在可用框中不可用,则 vagrant 将尝试下载(因此,如果您指向 ubuntu/trusty64 之类的东西,即使您没有安装它,vagrant 也会从 https://atlas.hashicorp.com/ubuntu/boxes/trusty64 下载它,假设它可用于您的提供者)

    第三,config/box.vm.hostname 将是您感兴趣的变量(不是主机名与主机名),来自 doc



    所以如果你在你的 Vagrantfile 中设置这个变量并启动机器,ubuntu 中的 hostname 变量将被解析为相同的值。例如,来自以下 Vagrantfile
    Vagrant.configure(2) do |config|
      ...
      config.vm.box = "ubuntu/trusty64"
      config.vm.hostname = "ubuntu"
      ...
    

    从虚拟机,我得到
    fhenri@machine:~/project/examples/vagrant/ubuntu$ vagrant ssh
    Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-virtual x86_64)
    
     * Documentation:  https://help.ubuntu.com/
    Last login: Tue Jan  5 10:21:54 2016 from 172.16.42.1
    vagrant@ubuntu:~$ hostname
    ubuntu
    

    最后,名称主题 config/box.vm.name 将用于提供者的 VM 名称(在您的情况下为 VirtualBox),下面的 answer 对此进行了很好的解释

    关于ubuntu - Vagrant 配置术语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34661018/

    10-16 09:47