wiwa1978
wiwa1978

Reputation: 2707

Vagrantfile: name virtual hosts in single file

I'm using Vagrant to create three hosts. I want to give them the name node01, node02 and node03.

Using the following 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

On virtualbox, the names are cryptic (like ubuntu-3nodes-node01-timestamp ...). How can I ensure they are just called node01, node02 and node03

I know I can do in the config.vm.provider "virtualbox" but I would ideally do it in the config.vm.define "node01" sections

Upvotes: 1

Views: 79

Answers (2)

k0chan
k0chan

Reputation: 731

You can also separate loop from define node method.

# -*- 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

Upvotes: 0

Frederic Henri
Frederic Henri

Reputation: 53793

you can do something like this

# -*- 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
  • This is some ruby to loop on the node.
  • the box if its the same in all machine can be defined at the upper block level
  • You must make the name of the name of VirtualBox VM in the virtualbox block as it depends on virtualbox (vagrant can manage other provider and this would be different)

Upvotes: 2

Related Questions