VirtualBox and Vagrant

This section describes how to install and set up Cumulus VX within VirtualBox and Vagrant to create the two leaf and one spine topology shown below.

In the topology, leaf01 and leaf02 are the access layer switches on the network. leaf01 and leaf02 connect to spine01, which is the aggregation layer switch on the network. To facilitate additional configuration after the initial setup descibed in this guide, leaf01 and leaf02 also have two connections to each other.

Follow the steps below to:

  • Create three VMs (leaf01, leaf02, and spine01) and the network connections between them
  • Log in to the switches
  • Perform basic switch configuration
  • Verify configuration

These steps were tested with Cumulus VX 4.2, VirtualBox version 6.1.12, and Vagrant version 2.2.9 on macOS version 10.14.6.

Create and Configure the VMs

The following procedure creates leaf01, leaf02, and spine01 and the network connections between them. This section assumes you have Vagrant, VirtualBox, and Linux experience.

Download and Install the Software

  1. Download and install VirtualBox.
  2. Download and install Vagrant.

Create VMs and Network Connections

The Cumulus VX VirtualBox image defines the CPU, memory, and disk requirements. Cumulus VX requires at least 768MB of RAM and 6GB of disk space.

CumulusVX versions 4.3 and later requires 2 vCPUs.

  1. Create a folder to contain the Vagrant environment, then change directories into that folder.

    local@host:~$ mkdir vagrant
    local@host:~$ cd vagrant
  2. Initialize the Vagrant environment to create a file called Vagrantfile in the folder you just created.

    local@host:~/vagrant$ vagrant init
    A `Vagrantfile` has been placed in this directory. You are now
    ready to `vagrant up` your first virtual environment! Please read
    the comments in the Vagrantfile as well as documentation on
    `vagrantup.com` for more information on using Vagrant.
  3. Edit the Vagrantfile. Add the following section under Vagrant.configure("2") do |config| to create leaf01, leaf02 and spine01, and the network connections between them.

    local@host:~/vagrant$ vi Vagrantfile
    Vagrant.configure("2") do |config|
    config.vm.define "leaf01" do |leaf01|
    leaf01.vm.box = "CumulusCommunity/cumulus-vx"
    # Internal network for swp* interfaces.
        leaf01.vm.network "private_network", virtualbox__intnet: "intnet-1", auto_config: false
        leaf01.vm.network "private_network", virtualbox__intnet: "intnet-3", auto_config: false
        leaf01.vm.network "private_network", virtualbox__intnet: "intnet-4", auto_config: false
        leaf01.vm.provider "virtualbox" do |vbox|
            vbox.customize ['modifyvm', :id, '--nicpromisc2', 'allow-vms']
            vbox.customize ['modifyvm', :id, '--nicpromisc3', 'allow-vms']
            vbox.customize ['modifyvm', :id, '--nicpromisc4', 'allow-vms']
        end    
    end
    config.vm.define "leaf02" do |leaf02|
        leaf02.vm.box = "CumulusCommunity/cumulus-vx"
        # Internal network for swp* interfaces.
        leaf02.vm.network "private_network", virtualbox__intnet: "intnet-2", auto_config: false
        leaf02.vm.network "private_network", virtualbox__intnet: "intnet-3", auto_config: false
        leaf02.vm.network "private_network", virtualbox__intnet: "intnet-4", auto_config: false
        leaf02.vm.provider "virtualbox" do |vbox|
            vbox.customize ['modifyvm', :id, '--nicpromisc2', 'allow-vms']
            vbox.customize ['modifyvm', :id, '--nicpromisc3', 'allow-vms']
            vbox.customize ['modifyvm', :id, '--nicpromisc4', 'allow-vms']
        end    
    end
    config.vm.define "spine01" do |spine01|
        spine01.vm.box = "CumulusCommunity/cumulus-vx"
        # Internal network for swp* interfaces.
        spine01.vm.network "private_network", virtualbox__intnet: "intnet-1", auto_config: false
        spine01.vm.network "private_network", virtualbox__intnet: "intnet-2", auto_config: false
        spine01.vm.provider "virtualbox" do |vbox|
            vbox.customize ['modifyvm', :id, '--nicpromisc2', 'allow-vms']
            vbox.customize ['modifyvm', :id, '--nicpromisc3', 'allow-vms']
        end
    end    
    end
  4. Run vagrant up to start the VMs:

    local@host:~/vagrant$ vagrant up
    Bringing machine 'leaf01' up with 'virtualbox' provider...
    Bringing machine 'leaf02' up with 'virtualbox' provider...
    Bringing machine 'spine01' up with 'virtualbox' provider...
    ...

Log in to the Switches

Log in to each switch with the vagrant ssh command. For example:

local@host:~/vagrant$ vagrant ssh leaf01

Basic Switch Configuration

Run these commands on each switch to be able to run NCLU commands without sudo, change the hostname and bring up the interfaces. Exit the switch, then log back in to see the new hostname at the prompt.

cumulus@cumulus:mgmt:~$ sudo usermod -a -G netedit vagrant
cumulus@cumulus:mgmt:~$ net add hostname leaf01
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
cumulus@cumulus:mgmt:~$ sudo usermod -a -G netedit vagrant
cumulus@cumulus:mgmt:~$ net add hostname leaf02
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2,swp3
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit
cumulus@cumulus:mgmt:~$ sudo usermod -a -G netedit vagrant
cumulus@cumulus:mgmt:~$ net add hostname spine01
cumulus@cumulus:mgmt:~$ net add interface swp1,swp2
cumulus@cumulus:mgmt:~$ net commit
cumulus@cumulus:mgmt:~$ exit

Verify Configuration

Run the following commands on each switch to verify the configuration:

It might take a few minutes for the LLDP information to update. If your command output is different from the output shown below, wait a few minutes, then run the command again.

cumulus@leaf01:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       spine01        swp1
swp2         1G       Default       leaf02         swp2
swp3         1G       Default       leaf02         swp3
cumulus@leaf02:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       spine01        swp2
swp2         1G       Default       leaf01         swp2
swp3         1G       Default       leaf01         swp3
cumulus@spine01:mgmt:~$ net show lldp
LocalPort    Speed    Mode          RemoteHost     RemotePort
-----------  -------  ------------  ------------   ------------
swp1         1G       Default       leaf01         swp1
swp2         1G       Default       leaf02         swp1

Run the following commands on each switch to show system information:

cumulus@leaf01:mgmt:~$ net show system
Hostname..............leaf01
Build.................Cumulus Linux 4.2.0
Uptime................0.00.23.740000
Model.................Cumulus VX
Memory................768MB
Disk..................6GB
Vendor Name...........Cumulus Networks
Part Number...........4.2.0
Base MAC Address......4:00:27:39:B1:12
Serial Number.........4:00:27:39:B1:12
Product Name..........VX

Next Steps

  • Try out advanced configurations. You can update your virtual environment to be able to use the Cumulus Linux on-demand self-paced labs (a quick and easy way to learn the fundamentals). You can also run the topology converter to simulate a custom network topology with VirtualBox and Vagrant, or KVM-QEMU and Vagrant.
  • Try NVIDIA Air, which is a free, personal, virtual data center network that provides a low-effort way to see Cumulus Networks technology in action. This is a good way to try out Cumulus Linux if you have platform or disk limitations.