Run Ansible Playbook as you like

Vagrant is one of the developers’ favorite tools. Vagrant is a tool designed to enable users to use the virtualization environment of their choice (VirtualBox, KVM, VMware e.t.c.

You can use Ansible with Vagrant to automatically configure Vagrant computer requirements and set software dependencies. This guide doesn’t go into too much detail about Vagrant and Ansible, but only outlines how to use Ansible with Vagrant.

I will create a project directory.

$ mkdir ~/myvagrant
$ cd  ~/myvagrant

I will create a simple Ansible Playbook to update the operating system and install the basic packages. You can expand to cover what you need to set up.

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

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

Then create a Vagrantfile with the ansible provisioner definition.

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

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

As can be seen from our Vagrant file, we are using the Provision.yaml Playbook.

Once you have your Playbook and Vagrantfile ready, run vagrant 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: https://vagrantcloud.com/centos/8
==> cent01: Adding box 'centos/8' (v1905.1) for provider: libvirt
    cent01: Downloading: https://vagrantcloud.com/centos/boxes/8/versions/1905.1/providers/libvirt.box
    cent01: Download redirected to host: cloud.centos.org
    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:       127.0.0.1
==> 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: 
    cent01: Vagrant insecure key detected. Vagrant will automatically replace
    cent01: this with a newly generated keypair for better security.
    cent01: 
    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: 192.168.122.48:22
    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:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode

    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 your Vagrant machine is up, use the following command:

vagrant provision

Our execution was successful, you can now switch SSH to the VM using the following command:

$ vagrant ssh

Read through Homeless Provisioning Guide Learn more about supported provisioners and how to use them.

Enable Hyper-V on Windows and install Vagrant

How to install Vagrant on CentOS 8 / RHEL 8

Running CentOS 8 VM with Vagrant on KVM / VirtualBox / VMWare / Parallels

How to install Vagrant and VirtualBox on Fedora

How to run Kali Linux on VirtualBox with Vagrant

Sidebar