Vagrant is one of the favorite tools for Developers. Vagrant is a tool designed to enable users create and configure lightweight, reproducible, and portable development environments with the Virtualization environments of their choice – VirtualBox, KVM, VMware e.t.c. So how can I use Ansible with Vagrant for clean automation?.

You can use Ansible with Vagrant to automate provisioning of Vagrant machines requirements and setup software dependencies. This guide won’t go into so much detail about Vagrant and Ansible, but just an overview on how you can use Ansible with Vagrant.

I’ll a create a project directory.

$ mkdir ~/myvagrant
$ cd  ~/myvagrant

I’ll create a Simple Ansible Playbook to update the OS and install basic packages. You can extend to cover what you need to setup.

$ vim provision.yaml
- hosts: all
  become: yes
  become_method: sudo
 - name: Update OS
    name: '*'
    state: latest

  - name: Install Basic packages
      name: ['vim', 'zip', 'bash-completion', 'wget', 'tmux']

Then create a Vagrantfile with a definition of ansible provisioner.

$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  ##### VM definition #####
  config.vm.define "cent01" do |config|
  config.vm.hostname = "cent01" = "centos/8"
  config.vm.box_check_update = false
  config.vm.provision :ansible do |ansible|
    ansible.limit = "all"
    ansible.playbook = "provision.yaml"
  config.vm.provider :libvirt do |v|
    v.memory = 1024
    v.cpus = 1

As can be seen in our Vagrantfile, we’re using provision.yaml Playbook.

Once you have both Playbook and Vagrantfile ready, run the vagrant up command to start the Virtual Machine.

$ vagrant up
Bringing machine 'cent01' up with 'libvirt' provider...
==> cent01: Box 'centos/8' could not be found. Attempting to find and install...
    cent01: Box Provider: libvirt
    cent01: Box Version: >= 0
==> cent01: Loading metadata for box 'centos/8'
    cent01: URL:
==> cent01: Adding box 'centos/8' (v1905.1) for provider: libvirt
    cent01: Downloading:
    cent01: Download redirected to host:
    cent01: Calculating and comparing box checksum...
==> cent01: Successfully added box 'centos/8' (v1905.1) for 'libvirt'!
==> cent01: Uploading base box image as volume into libvirt storage...
==> cent01: Creating image (snapshot of base box volume).
==> cent01: Creating domain with the following settings...
==> cent01:  -- Name:              cent8_cent01
==> cent01:  -- Domain type:       kvm
==> cent01:  -- Cpus:              2
==> cent01:  -- Feature:           acpi
==> cent01:  -- Feature:           apic
==> cent01:  -- Feature:           pae
==> cent01:  -- Memory:            1024M
==> cent01:  -- Management MAC:    
==> cent01:  -- Loader:            
==> cent01:  -- Nvram:             
==> cent01:  -- Base box:          centos/8
==> cent01:  -- Storage pool:      default
==> cent01:  -- Image:             /var/home/jkmutai/.local/share/libvirt/images/cent8_cent01.img (11G)
==> cent01:  -- Volume Cache:      default
==> cent01:  -- Kernel:            
==> cent01:  -- Initrd:            
==> cent01:  -- Graphics Type:     vnc
==> cent01:  -- Graphics Port:     -1
==> cent01:  -- Graphics IP:
==> cent01:  -- Graphics Password: Not defined
==> cent01:  -- Video Type:        cirrus
==> cent01:  -- Video VRAM:        9216
==> cent01:  -- Sound Type:	
==> cent01:  -- Keymap:            en-us
==> cent01:  -- TPM Path:          
==> cent01:  -- INPUT:             type=mouse, bus=ps2
==> cent01: Creating shared folders metadata...
==> cent01: Starting domain.
==> cent01: Waiting for domain to get an IP address...
==> cent01: Waiting for SSH to become available...
    cent01: Vagrant insecure key detected. Vagrant will automatically replace
    cent01: this with a newly generated keypair for better security.
    cent01: Inserting generated public key within guest...
    cent01: Removing insecure key from the guest if it's present...
    cent01: Key inserted! Disconnecting and reconnecting using new SSH key...
==> cent01: Setting hostname...
==> cent01: Configuring and enabling network interfaces...
    cent01: SSH address:
    cent01: SSH username: vagrant
    cent01: SSH auth method: private key
==> cent01: Rsyncing folder: /var/home/jkmutai/myhacks/vagrant/cent8/ => /vagrant
==> cent01: Running provisioner: ansible...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.9.5).

Alternatively, the compatibility mode can be specified in your Vagrantfile:

    cent01: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [cent01]

TASK [Update OS] ************************************************
changed: [cent01]

TASK [Install Basic packages] ************************************************
changed: [cent01]

PLAY RECAP *********************************************************************
cent01                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

If you had your Vagrant machine up, then use the command:

vagrant provision

Our execution was successful, you can now ssh to the VM with the command:

$ vagrant ssh

Read through the Vagrant Provisioning guide to learn more about supported provisioners and how to use them.

Learning courses:

More guides:

Enable Hyper-V and Install Vagrant on Windows

How To Install Vagrant on CentOS 8 / RHEL 8

Run CentOS 8 VM using Vagrant on KVM / VirtualBox / VMWare / Parallels

How To Install Vagrant and VirtualBox on Fedora

How To run Kali Linux on VirtualBox with Vagrant

Your support is our everlasting motivation,
that cup of coffee is what keeps us going!

As we continue to grow, we would wish to reach and impact more people who visit and take advantage of the guides we have on our blog. This is a big task for us and we are so far extremely grateful for the kind people who have shown amazing support for our work over the time we have been online.

Thank You for your support as we work to give you the best of guides and articles. Click below to buy us a coffee.


Please enter your comment!
Please enter your name here