• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer
sharadchhetri.com

sharadchhetri.com

Linux,Cloud Computing And DevOps

  • Home
  • Linux
  • CloudComputing
    • Introduction Cloud Computing
    • Amazon AWS
  • Free E-Books
  • About Me

Create multiple virtual machine with one Vagrantfile

June 7, 2020 by Sharad Chhetri Leave a Comment

For doing POC and testing sometimes we need multiple Virtual Machines very quickly. So here in this post we will create multiple virtual machine with one Vagrantfile by using Vagrant. We will cover some examples from coding side in Vagrantfile, it will help you in your real time scenarios as well.

As we know Vagrant is written in Ruby language, so we will use some Ruby code in Vagrantfile.
We use the Multi VMs for various technology POC like system Cluster,High Availability, automation tool (like chef,puupet and ansible) etc. etc.

Example 1: With basic Vagrantfile
Example 2: Using loop in Vagrantfile
Example 2: Nested loop-conditional statement in Vagrantfile

Syntax:
Block_Name.vm.define : To define the new VM, use this code. You will see more examples and will understand how to define this.

Create Multi VM With basic Vagrantfile

In this scenario,we will create three VM from single Vagrantfile. We will create VMs for Web Server, MySQL Server and FTP server. It will just create the 3 Virtual Machines with different Operating System.

mkdir -p ~/vagrant_box/example1 && cd ~/vagrant_box/example1 
# create file
vi Vagrantfile
#paste the given below content in Vagrantfile
Vagrant.configure("2") do |config|
  #config.vm.box = "base"

  config.vm.define "web" do |web|
    web.vm.provider "virtualbox" do |vb_web|
      vb_web.memory = 1024
      vb_web.cpus = 2
    end

    web.vm.box = "centos/8"
    web.vm.hostname = "web01"
    web.vm.network "private_network", ip: "192.168.33.10"

  end

  config.vm.define "mysql" do |mysql|
    mysql.vm.box = "debian/buster64"
    mysql.vm.hostname = "mysql01"
    mysql.vm.network "private_network", ip: "192.168.33.11"

  end

  config.vm.define "ftp" do |ftp|
    ftp.vm.box = "freebsd/FreeBSD-12.1-STABLE"
    ftp.vm.hostname = "ftp01"
    ftp.vm.network "private_network", ip: "192.168.33.12"
  end

end
# now create multi VM
vagrant up

Create Multi VM using loop in Vagrantfile

Here, also we will create 3 Virtual Machines. We have defined the array vm_name and then used the ruby loop to create all these 3 Virtual Machines. One thing to notice that all these VMs will have same Operating System.

mkdir -p ~/vagrant_box/example2 && cd ~/vagrant_box/example2 
# create file
vi Vagrantfile
Vagrant.configure("2") do |config|
  vm_name=['web01','mysql01','ftp01']
  vm_name.each do |i|
      config.vm.define "#{i}" do |node|
      node.vm.box = "centos/8"
    end
  end
end
# now create multi VM
vagrant up

This is another example of loop but here the VM name will be like node-1, node-2 and node-3 .

mkdir -p ~/vagrant_box/example3 && cd ~/vagrant_box/example3 
# create file
vi Vagrantfile
(1..3).each do |i|
  config.vm.define "node-#{i}" do |node|
    node.vm.box = "centos/8"
  end
end
# now create multi VM
vagrant up

Create Multi VM using nested loop and conditional statement in Vagrantfile

Because we can use ruby code in Vagrant, we add some Nested loop and condition in this example.
Here, if vm_name is ftp01 OR web01 it will create Virtual Machine with CentOS 8 operating system else create Virtual Machine with CentOS 7 Operating System.

mkdir -p ~/vagrant_box/example4 && cd ~/vagrant_box/example4 
# create file
vi Vagrantfile
Vagrant.configure("2") do |config|
  vm_name=['web01','mysql01','ftp01']
  vm_name.each do |i|
    if "#{i}" == 'ftp01' OR "#{i}" == 'web01' then
      config.vm.define "#{i}" do |node|
        node.vm.box = "centos/8"
      end
    else
      config.vm.define "#{i}" do |node|
        node.vm.box = "centos/7"
      end
    end
  end
end
# now create multi VM
vagrant up

Do'nt be greedy, share the knowledge!

  • Click to share on Facebook (Opens in new window)
  • Click to share on WhatsApp (Opens in new window)
  • Click to share on Twitter (Opens in new window)
  • Click to share on Pinterest (Opens in new window)
  • Click to share on Reddit (Opens in new window)
  • Click to share on Pocket (Opens in new window)
  • Click to share on LinkedIn (Opens in new window)

Related

Filed Under: Linux Tagged With: devops, vagrant

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Primary Sidebar

Follow Us

  • Facebook
  • Twitter
  • GitHub
  • YouTube

Recent Posts

  • Activate.ps1 cannot be loaded because running scripts is disabled on this system
  • How to install Java (OpenJDK) on Ubuntu Linux
  • How to install Groovy on Ubuntu 20.04 LTS
  • How to Disable selinux in Red Hat or CentOS
  • How to remove date from WordPress Post URL

Top Posts & Pages

  • How to delete mail queue in Postfix
  • How to fix read only USB pen drive in Ubuntu
  • How to start / stop / restart / reload iptables on CentOS 7 / RHEL 7
  • 4 different commands to check the load average in linux
  • How to set hostname and FQDN on CentOS 7 and RHEL 7
  • How to find absolute path of command on Linux / Unix : which command
  • How to create Jenkins user by command line and GUI
  • How to print particular line number by using sed command
  • How to setup Jenkins Credentials for Git repo access
  • make command not found in linux CentOS Red Hat ubuntu Debian

DevOps Posts

  • vagrant cloud flow

    Install Vagrant on Ubuntu and create first VM

  • git jenkins credential github

    How to setup Jenkins Credentials for Git repo access

  • terraform

    how to install terraform in Linux : CentOS-Ubuntu

  • docker image

    How to create Ubuntu docker base image

  • Install Ansible on Ubuntu / CentOS / RHEL

Footer

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Cookie Policy

Sharad Chhetri is an experienced Linux - Cloud Engineer & freelancer. Working on Open Source Technology since RHEL 4.0 (Red Hat Enterprise Linux). He loves sharing the knowledge which earned from real scenarios. Don't be surprised if you find him in technology seminars and meetup groups. You can contact him on email for freelance projects at admin@sharadchhetri.com. Read More…

Tags

Amazon AWS apache automation awk bash script CentOS centos 7 debian devops docker freebsd ftp ghost git grep hostname jenkins kvm linux linux command linux commands MariaDB Server mysql Nagios nginx Octopress owncloud Owncloud 6 php postfix postgres python Red Hat rpm sed selinux ssh swap ubuntu user management vagrant varnish virtualbox vsftp wordpress

Recent Comments

  • Sharad Chhetri on How to fix read only USB pen drive in Ubuntu
  • iain mckeand on How to fix read only USB pen drive in Ubuntu
  • Sharad Chhetri on Secondary Logging : save all users history command output as log
  • Sharad Chhetri on How to fix read only USB pen drive in Ubuntu
  • er on What is /dev/shm and how to mount /dev/shm
  • Bala on Send nagios report as pdf file via email
  • Terry on How to fix read only USB pen drive in Ubuntu
  • Terry on How to fix read only USB pen drive in Ubuntu

Copyright © 2009 - 2022 · All Rights Reserved sharadchhetri.com · · Privacy Policy ·
· sitemap.xml · ·The content is copyrighted to sharadchhetri.com and may not be reproduced on other websites without our permission. ·

Copyright © 2022 · Genesis Sample on Genesis Framework · WordPress · Log in