Vagrantfile:在单个文件中命名虚拟主机

时间:2016-11-21 16:23:43

标签: vagrant vagrantfile

我正在使用Vagrant创建三个主机。我想给它们命名为node01,node02和node03。

使用以下Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :


Vagrant.configure(2) do |config|

  config.vm.define "node01" do |node01|
    node01.vm.box = "ubuntu/trusty64"
    node01.vm.hostname = "node01"
  end

  config.vm.define "node02" do |node02|
    node02.vm.box = "ubuntu/trusty64"
    node02.vm.hostname = "node02"
  end

  config.vm.define "node03" do |node03|
    node03.vm.box = "ubuntu/trusty64"
    node03.vm.hostname = "node03"
  end


  config.vm.provider "virtualbox" do |vb|
     vb.memory = "1024"
   end
end

在虚拟机上,名称含糊不清(如ubuntu-3nodes-node01-timestamp ...)。我怎样才能确保它们只被称为node01,node02和node03

我知道我可以在config.vm.provider“virtualbox”中进行操作,但理想情况下我会在config.vm.define“node01”部分进行此操作

2 个答案:

答案 0 :(得分:2)

你可以做这样的事情

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/trusty64"

  (1..3).each do |i|
    config.vm.define "node0#{i}" do |node|
      config.vm.provider "virtualbox" do |vb|
        vb.memory = "1024"
        vb.name = "node0#{i}"
      end
      node.vm.hostname = "node0#{i}"
    end
  end

end
  • 这是在节点上循环的一些ruby。
  • 如果在所有机器中相同的框可以在上部块级别定义
  • 您必须在virtualbox块中创建VirtualBox VM名称的名称,因为它取决于virtualbox(vagrant可以管理其他提供程序,这会有所不同)

答案 1 :(得分:0)

您还可以将循环与定义节点方法分开。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/trusty64"

  def define_node(config, node_number)
    config.vm.define "node0#{node_number}" do |node|
      node.vm.hostname = "node0#{node_number}"

      node.vm.provider "virtualbox" do |vb|
        vb.memory = "1024"
        vb.name = "node0#{node_number}"
      end
    end
  end

  for node_number in 1..3
    define_node config, node_number
  end
end