首页 文章

Vagrant配置术语

提问于
浏览
4

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

  • config.vm.define "worker"

  • box.vm.box = "ots-box"

  • box.vm.host_name = "worker"

  • vb.name = "barhost"


在尝试更改我所拥有的vagrant实例的主机名时,我迷失在Vagrantfile语法中 . 现在我已经成功更改了主机名,但其他一些东西(网络)无效 . 我怀疑我已经改变了导致流浪者配置盒子的东西是一种特殊的方式,这导致了这个问题 .

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

1 回答

  • 4

    我会尝试逐点回答:

    首先是以下语法

    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
    

    主要用于运行多个虚拟机(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 将是你感兴趣的变量(不是hostname vs host_name),来自doc

    config.vm.hostname - 机器应具有的主机名 . 默认为零 . 如果为nil,Vagrant将不会管理主机名 . 如果设置为字符串,则将在引导时设置主机名 .

    因此,如果您在Vagrantfile中设置此变量并启动计算机,则ubuntu中的 hostname 变量将被解析为相同的值 . 例如,来自以下Vagrantfile

    Vagrant.configure(2) do |config|
      ...
      config.vm.box = "ubuntu/trusty64"
      config.vm.hostname = "ubuntu"
      ...
    

    从vm,我得到

    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可以很好地解释

相关问题