DEV Community

Cover image for Using Vagrant to Provision a VM and Multiple VMs
Oluwaseyi Asowo
Oluwaseyi Asowo

Posted on

Using Vagrant to Provision a VM and Multiple VMs

Let’s face it, managing virtual machines can sometimes feel like juggling flaming swords—complex, intimidating, and prone to mistakes. Enter Vagrant, the ultimate tool that makes provisioning and managing VMs a breeze.

Vagrant is a powerful command-line utility that lets you create lightweight, reproducible, and portable development environments. Whether you're a developer testing applications across multiple systems or a systems administrator managing infrastructure, Vagrant helps you say goodbye to "it works on my machine" syndrome.

In this guide, I’ll walk you through how to harness the power of Vagrant to spin up a single virtual machine and even manage multiple VMs. Along the way, I’ll share some tips and examples that make this process simple, scalable, and , dare I say, fun.

So, buckle up! We’re about to turn virtualization into a smooth, streamlined experience.

TABLE OF CONTENT

  1. Introduction to Vagrant
  2. Prerequisites
  3. Setting Up a single VM with Vagrant
  4. Provisioning Multiple VMs with Vagrant
  5. Tips for smooth sailing
  6. Conclusion and Next Steps

Introduction to vagrant

Imagine a tool that turns the tedious process of configuring development environments into a few simple commands. That’s Vagrant! It’s your one-stop solution for setting up, managing, and sharing VMs. Whether you’re testing software, developing web applications, or experimenting with infrastructure configurations, Vagrant ensures consistency across environments.

Key benefits of Vagrant include:
Reproducibility: Share your setup with a single file.
Portability: Take your environment anywhere.
Ease of Use: Spin up and tear down VMs with minimal effort.

Prerequisites

Before we dive in, ensure you have Vagrant, VirtualBox and a terminal let's say GITBASH installed on your machine. If not, here’s how to get started:

Download Vagrant: Head to Vagrant's official site and download the installer for your operating system.
Download Gitbash: Head over to the git bash site here
Install VirtualBox: Vagrant works best with VirtualBox as its default provider. Download it here.
Verify Installation: Open your terminal maybe GITBASH and type

vagrant --version
Enter fullscreen mode Exit fullscreen mode

If you see the version number, you’re good to go!

Setting Up a single VM with Vagrant

Step 1: Initialize a New Vagrant Project

Create a new directory for your project. You can create this directly on your desktop or use the bash command, but make sure you are on the preferred directory either Desktop or wherever.

mkdir vagrant_project && cd vagrant_project
Enter fullscreen mode Exit fullscreen mode

The above script created a Folder called vagrant_project and changed our current directory to the created folder

  1. initialize the Vagrant project:
vagrant init
Enter fullscreen mode Exit fullscreen mode

Setup 2: Configure the Vagrantfile

After running the init command a file is downloaded to that directory. The Vagrantfile is the core configuration file. Open it in any text editor and modify it:
Use a specific box (e.g.Ubuntu)

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
end
Enter fullscreen mode Exit fullscreen mode

Setup 3: Provision and Access the VM

Start the VM by running this script

vagrant up
Enter fullscreen mode Exit fullscreen mode

When completed, you can access the VM with this script.

vagrant ssh
Enter fullscreen mode Exit fullscreen mode

Congratulations you have provisioned a Virtual Machine using Vagrant, I know easy right😁. Up next we will be provisioning multiple VMs with Vagrant

Provisioning Multiple VMs with Vagrant

Setup 1: Modify the Vagrantfile for Multiple VMs

Update your Vagrantfile to define multiple VMs:

Vagrant.configure("2") do |config|
  config.vm.define "web" do |web|
    web.vm.box = "ubuntu/bionic64"
    web.vm.network "private_network", ip: "192.168.56.101"
  end

  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/bionic64"
    db.vm.network "private_network", ip: "192.168.56.102"
  end
  config.vm.define "app" do |app|
    app.vm.box = "ubuntu/focal64"
    app.vm.network "private_network", ip: "192.168.56.103"
  end
end

Enter fullscreen mode Exit fullscreen mode

Setup 2: Launch and Manage Multiple VMs

Start all VMs:

vagrant up
Enter fullscreen mode Exit fullscreen mode

At this point, all the VMs will get provisioned one after the other.

Start a specific VM: You could also decide to spin up a specific VM, rather than all the VMs.

vagrant up web
Enter fullscreen mode Exit fullscreen mode

SSH into a specific VM:

vagrant ssh db
Enter fullscreen mode Exit fullscreen mode

Lastly, Halt all VMs

vagrant halt
Enter fullscreen mode Exit fullscreen mode

AND THERE YOU HAVE IT!!! 🥂🍾 Multiple VMs provisioned with one line.

5. Tips for smooth sailing

  • Understand Vagrant’s Commands: Familiarize yourself with vagrant status, vagrant halt, and vagrant destroy.
  • Backup Your Vagrantfile: It’s the heart of your configuration.
  • Experiment Freely: Vagrant’s disposable environments encourage experimentation.

6. Conclusion and Next Steps

With Vagrant, you hold the keys to efficient, reproducible virtualization. From provisioning a single VM to managing a fleet, it’s your gateway to seamless development and testing.

Now that you’ve got the basics, why not explore advanced provisioning with tools like Ansible or Docker integration? The possibilities are endless, and with Vagrant, they’re always a command away.

ANY QUESTIONS?

Top comments (0)