|
# Create multiple virtual machines with Vagrant on Linux
|
|
# Author: Pekka Helenius (~Fincer), 2018
|
|
|
|
#######################################
|
|
# Basic Vagrantfile configuration
|
|
|
|
# Number of virtual machines
|
|
vbox_num = 2
|
|
|
|
# Virtual machine name prefix
|
|
vbox_prefix = "minion_"
|
|
|
|
# Allocated memory per virtual machine
|
|
# NOTE: Remember the RAM limits of your host machine!
|
|
vbox_mem = 512
|
|
|
|
# CPU's per virtual machine
|
|
vbox_cpu = 1
|
|
|
|
# Vagrant box template for virtual machines
|
|
#
|
|
# If you change this, remember to check for salt file locations &
|
|
# package manager commands used in this Vagrantfile
|
|
#
|
|
# For more templates, see: https://app.vagrantup.com/boxes/search
|
|
vbox_template = "bento/ubuntu-16.04"
|
|
|
|
#######################################
|
|
# Create a new array for virtual machines
|
|
|
|
vboxes = []
|
|
|
|
(1..vbox_num).each do |vbox|
|
|
vboxes.push("#{vbox_prefix}#{vbox}")
|
|
end
|
|
|
|
#######################################
|
|
VAGRANT_API_VERSION = 2
|
|
|
|
#######################################
|
|
# This is for salt_install provision below
|
|
|
|
initial_setup = "
|
|
# Start of $initial_setup variable
|
|
|
|
apt-get update && \
|
|
apt-get -y install salt-minion && \
|
|
systemctl enable salt-minion
|
|
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# End of $initial_setup variable
|
|
"
|
|
|
|
#######################################
|
|
# Define Vagrant machine configuration here
|
|
|
|
Vagrant.configure(VAGRANT_API_VERSION) do |config|
|
|
|
|
config.vm.box = "#{vbox_template}"
|
|
config.vm.box_check_update = true
|
|
config.vm.synced_folder ".", "/vagrant", disabled: true
|
|
|
|
vboxes.each do |box|
|
|
config.vm.define "#{box}" do |node|
|
|
|
|
node.vm.provision "salt_install", run: "once", type: "shell" do |cmd_1|
|
|
cmd_1.inline = "#{initial_setup}"
|
|
cmd_1.privileged = "true"
|
|
end
|
|
|
|
node.vm.provision "salt_config", run: "once", type: "shell" do |cmd_2|
|
|
cmd_2.inline = "echo 'master: #{`hostname`}id: #{box}' | tee -a /etc/salt/minion && systemctl restart salt-minion"
|
|
cmd_2.privileged = "true"
|
|
end
|
|
|
|
node.vm.provider "virtualbox" do |v|
|
|
v.memory = "#{vbox_mem}"
|
|
v.cpus = "#{vbox_cpu}"
|
|
v.name = "#{box}"
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|