19 November 2019

Vagrant Multi-Machine

Simple example of Vagrantfile that will create two virtual machines: Ubuntu 18.04 and CentOS 7.7

Vagrant.configure("2") do |config|
  config.vm.define "v-ubuntu" do |vu|
    vu.vm.hostname = "v-ubuntu"
    vu.vm.box = "bento/ubuntu-18.04"
    vu.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

    vu.vm.provider "virtualbox" do |vb|
      vb.name = "v-ubuntu"
      vb.gui = false
      vb.memory = 512
      vb.cpus = 1
    end

    vu.vm.provision "shell", run: "always", inline: <<-SHELL
      echo "Hello from Ubuntu!"
    SHELL

  end

  config.vm.define "v-centos" do |vc|
    vc.vm.hostname = "v-centos"
    vc.vm.box = "bento/centos-7.7"
    vc.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

    vc.vm.provider "virtualbox" do |vb|
      vb.name = "v-centos"
      vb.gui = false
      vb.memory = 512
      vb.cpus = 1
    end

    vc.vm.provision "shell", run: "always", inline: <<-SHELL
      echo "Hello from CentOS!"
    SHELL

  end

end

vu.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)" - I used bridged public network from my en1 wireless interface on my iMac

Usage:

# boot all machines:
$ vagrant up
# boot custom machine:
$ vagrant up v-centos

How to create multiple machines in a loop?

Vagrant.configure("2") do |config|
    config.vm.box = "bento/ubuntu-18.04"
    config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"
    (1..5).each do |i|
        config.vm.define "v-host-#{i}" do |node|
            node.vm.hostname = "v-host-#{i}"
            node.vm.provider "virtualbox" do |vb|
                vb.name = "v-host-#{i}"
                vb.gui = false
                vb.memory = 512
                vb.cpus = 1
            end
        end
    end
end

Will create five Ubuntu 18.04 virtual machines.

Tags: virtualization