Testing ansible playbooks against multiple targets using vagrant
I recently updated my Install docker and docker-compose using ansible post and wanted to test it against multiple target OSes and OS versions. Here's a way I found to do it easily using Vagrant.
Here's the Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
targets = [
"debian/bookworm64",
"debian/bullseye64",
"debian/buster64",
"ubuntu/jammy64",
"ubuntu/bionic64",
"ubuntu/focal64"
]
Vagrant.configure("2") do |config|
targets.each_with_index do |target, index|
config.vm.define "machine#{index}" do |machine|
machine.vm.hostname = "machine#{index}"
machine.vm.box = target
machine.vm.synced_folder ".", "/vagrant", disabled: true
if index == targets.count - 1
machine.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.limit = "all"
ansible.compatibility_mode = "2.0"
# ansible.verbose = "v"
end
end
end
end
end
The targets
variable defines what Vagrant boxes to target. The possible list of boxes can be found here: https://app.vagrantup.com/boxes/search
In the Vagrant.configure
section, I've defined a machine with an auto-generated machine ID for each target.
The machine.vm.synced_folder
line disables the default vagrant share to keep things fast.
Then, I've run the ansible provisioning once at the end instead of for each box separately (from: https://developer.hashicorp.com/vagrant/docs/provisioning/ansible#tips-and-tricks).
The test can be run using:
$ vagrant up
If the boxes are already up, to re-run provisioning, run:
$ vagrant provision
This code can also be found on GitHub: https://github.com/srijan/ansible-install-docker
Interactions
π 1 like
π 1 repost