What is Vagrant?
A vagrant is a tool for building and managing virtual machine environments in a single workflow. Vagrant provides a simple and easy to use command-line client for managing these environments, focus on automation, and an interpreter for the text-based definitions of what each environment looks like, called Vagrantfiles. Vagrant decreases development environment setup time and increases production parity.
A vagrant is open-source software written in Ruby, which means that anyone can share it, download it, and modify it.
While many virtual machine hypervisors provide their command-line interface, virtual machines' provisioning through these programs can be done through shell scripts or directly. The advantage Vagrant provides by adding layer is simplicity, interoperability across multiple systems, and a more consistent approach that could be used with any virtual environment running on top of any other system.
By providing a standard text-based format to work with virtual machines, our environment can be defined in code, making it easy to share, modify, manage, and back up with revision control. And rather than sharing a whole virtual machine image, which could be many gigabytes, a change is made to the configuration every time a simple text file weighing at just a few kilobytes can be shared instead.
Vagrant is easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to maximize productivity and flexibility.
Machines are provisioned on top of AWS, VMware, VirtualBox, or any other provider. The industry-standard provisioning tools such as Chef, shell scripts, or Puppet can automatically install and configure software on the virtual machine.
Vagrant provides a simple function and useful for people who work on different projects.
Vagrant makes it easy to create a local environment for the developer that copy the environment upon which the code will eventually be deployed. But it must have the same libraries, processes, dependencies, operating system and version, etc.
Vagrant uses Providers and Provisioners as building blocks to manage development environments.
Provisioners are tools that allow users to customize the configuration of virtual environments. Chef and Puppet both are the most widely used provisioners in the Vagrant ecosystem.
Providers are the services that Vagrant uses to set up and create virtual environments. Docker, Hyper-V, and VirtualBox virtualization ships support Vagrant, while AWS and VMware are supported via plugins. The end-user will fire up a command called #vagrant up.
Vagrant stands on top of virtualization software as a wrapper and helps the developer interact easily with the providers. It automates virtual environments using Chef or Puppet, and the user does not have to use any other virtualization software directly.
Machine and software requirements are written in a file called Vagrantfile, that used to execute the necessary steps to create a development-ready box.
Apart from the things mentioned in the Vagrantfile, It also contains details about the virtual machine's configuration, the network settings, etc. Also, it includes multi VM configurations, where we need multiple independent virtual machines running different services.
Vagrant will take care of reading the Vagrantfile in the current directory, then execute virtualization operations, and run provisioning scripts to make the development environment ready.
The box is a format and an extension (.box) for Vagrant environments copied to another machine to replicate the same environment.
As everything is sitting inside virtual machines, we can do a #vagrant destroy once we have finished the task, which will terminate the environment together. This will make the base machine clean from the environment we created by using #vagrant up.
Rather than directly using VirtualBox or any other virtualization platforms to create machines and then configuring required software on top of it, developers can now checkout a repository and then do #vagrant up.
Vagrant provides the same, easy workflow regardless of your role as a developer, operator, or designer. It leverages a declarative configuration file which describes all your software requirements, packages, operating system configuration, users, and more.
1. For Developer: Vagrant will isolate dependencies and their configuration within a single disposable, consistent environment, without sacrificing any of the tools we are used to working with editors, browsers, debuggers, etc.
Once the developer creates a single Vagrantfile, developers need to Vagrant up, and everything is installed and configured to work. Other team members can create their development environments from the same configuration, so whether the developer is working on Linux, Mac OS X, or Windows, all the team members are running code in the same environment, against the same dependencies configured the same way.
2. For Operator: Vagrant gives a disposable environment and consistent workflow to operations engineer or DevOps engineer to develop and test infrastructure management scripts.
Operation engineers can quickly test things like shell scripts, Chef cookbooks, Puppet modules, and more using local virtualization such as VirtualBox or VMware. The engineer can also test these scripts on remote clouds such as AWS or RackSpace with the same workflow and configuration.
Vagrant helps to ditch the custom scripts to recycle EC2 instances, stop juggling SSH prompts to various machines.
3. For Designer: Vagrant will automatically set everything up required for that web app to focus on doing what designers do the best design. Once a developer configures Vagrant, the designer does not need to worry about getting that app running ever again.