Skip to content

Instantly share code, notes, and snippets.

@roblayton
Created June 27, 2015 22:46
Show Gist options
  • 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
@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