Skip to content

Instantly share code, notes, and snippets.

@roblayton
Created June 27, 2015 22:46
Show Gist options
  • Star 32 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save roblayton/c629683ca74658412487 to your computer and use it in GitHub Desktop.
Save roblayton/c629683ca74658412487 to your computer and use it in GitHub Desktop.
A Vagrant multi-machine cluster using a loop
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
cluster = {
"master" => { :ip => "192.168.33.10", :cpus => 1, :mem => 1024 },
"slave" => { :ip => "192.168.33.11", :cpus => 1, :mem => 1024 }
}
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
cluster.each_with_index do |(hostname, info), index|
config.vm.define hostname do |cfg|
cfg.vm.provider :virtualbox do |vb, override|
config.vm.box = "ubuntu/trusty64"
override.vm.network :private_network, ip: "#{info[:ip]}"
override.vm.hostname = hostname
vb.name = hostname
vb.customize ["modifyvm", :id, "--memory", info[:mem], "--cpus", info[:cpus], "--hwvirtex", "on"]
end # end provider
end # end config
end # end cluster
end
@atrakic
Copy link

atrakic commented Sep 29, 2016

thx! :)

@sudhakarau1
Copy link

Nice one. Thanks!

@OliPelz
Copy link

OliPelz commented Oct 25, 2017

really helped me today!

@realei
Copy link

realei commented Mar 9, 2018

This helped a lot, thanks

@akshaygupta16
Copy link

I need to insert a piece of code after the loop terminates here.
I even tried putting it after the last 'end',
still that external piece of code is getting executed just after the first iteration.
can someone help me with this ?

Code :

-- mode: ruby --

vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

cluster = {
"box5" => { :ip => "192.168.56.25", :cpus => 1, :mem => 512 },
"box6" => { :ip => "192.168.56.26", :cpus => 1, :mem => 512 },
"box7" => { :ip => "192.168.56.27", :cpus => 1, :mem => 512 },
"box8" => { :ip => "192.168.56.28", :cpus => 1, :mem => 512 }
}

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

#cluster.each_with_index do |(hostname, info), index|
for var in cluster
config.vm.define hostname do |cfg|
cfg.vm.provider :virtualbox do |vb, override|
config.vm.box = "mybox.box"
override.vm.network :private_network, ip: "#{info[:ip]}"
override.vm.hostname = hostname
vb.name = hostname
vb.customize ["modifyvm", :id, "--memory", info[:mem], "--cpus", info[:cpus], "--hwvirtex", "on"]
end # end provider
end # end config

end # end cluster

end

Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "script.sh"
end

@jadia
Copy link

jadia commented Mar 20, 2021

Thank you!

@artem-shestakov
Copy link

Thank you!

@shared-techs
Copy link

How would you provision using shell for only the master or only the slave?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment