Author Svea Anijago, TS 66; Group C11; Last edited 08.05.2016
In Vagrant, virtual machines are provisioned on top of VirtualBox, VMware, KVM, AWS, LXC. To automatically install and configure software on machines, provisioning tools like shell scripts, Chef, Salt, Puppet or Ansible can be used. From 1.6, Vagrant natively supports Docker containers, which in some cases can serve as a substitute for a fully virtualized operating system.  
Vagrantfile  is a very flexible configuration format. It marks the root directory of the project and describes the machine and resources needed to run the project and what software needs to be installed and how to access it. The syntax used in Vagrantfiles is Ruby. One Vagrantfile per project is used and it is supposed to be committed to version control to allow other developers involved in the project to check out the code. The package format for Vagrant environments are boxes that can be used on any platform that Vagrant supports. Vagrant uses these base images to clone a virtual machine. As a multi-machine environment, Vagrant is able to define and control multiple guest machines per Vagrantfile. The machines work together or are associated with each other.
Full backwards compatibility is provided by Vagrant 1.1+ for Vagrant 1.0.x Vagrantfiles that do not use plugins. Backwards compatibility for 1.x is not guaranteed and syntax stability is not certain before 2.0 which is to have stable backwards compatible Vagrantfile format.
Vagrants latest versions for Mac OS X, Windows, Debian and Centos can be installed by using installation package from their homepage. There is also possibility to get older version from Vagrants releases services. It will isolate dependencies and their configurations in a single consistent environment. Using single Vagrantfile the whole working environment is installed and configured. 
To have a fully functioning virtual machine in VirtualBox running Ubuntu 12.04 LTS 64-bit, following two commands need to be used to place a Vagrantfile to users directory and install virtual environment:
vagrant init hashicorp/precise64
hashicorp/precise64 downloads a box named "hashicorp/precise64" from HashiCorp's Atlas box catalog that stores all the host boxes. Boxes can be downloaded from HashiCorp's Atlas or added from a local file, custom URL or other. They are named using username e.g “hashicorp” and box name “precise64” that are separated with slash. Box names can be also specified with URL or local file paths.
Accessing virtual machine is done with SSH session and user is located in
Using synced folders , files are automatically synced with the guest machine. By default the project directory in Vagrantfile is shared to
/vagrant directory on guest machine, that is different than the
/home/vagrant where user is located when using
All available subcommands  are displayed to user running
vagrant box is used to manage boxes with sub-commands:
add, list, remove, update, outdated, repackage.
So that multiple Vagrant environments could use a box, it needs to be added to Vagrant and then stored under specific name with command:
vagrant box add
Current users boxes are stored globally and projects only use the box as an initial image to clone from but do not modify the actual base image, so that using same
hashicorp/precise64 box and adding files on one project does not affect others.
vagrant connect is used to enable access to shared environments and complements the
vagrant share command.
vagrant destroy command stops the running virtual machine and destroys all resources created during machine creation process.
vagrant global-status tells the state of all active Vagrant environments in the system for current logged in user.
vagrant halt shuts down the currently running machine that is managed by Vagrant. At first it is attempted to shut the machine down by running guest OS shutdown mechanism, if this is not successful the
-- force flag is stated and the machine is shut off.
vagrant init [box-name] [box-url] initializes current directory to be a Vagrant environment by creating and initial Vagrantfile if it doesn’t already exist. The first argument will prepopulate the
config.vm.box and second argument
config.vm.box_url setting in the created Vagrantfile.
vagrant package command packages currently running VirtualBox environment into a re-usable box. This can be used with other providers based on the providers implementation and if they support it.
vagrant plugin is used to manage plugins along with subcommands:
install, license, list, update, uninstall.
Installing a plugin from a known gem source with given name, usually from RubyGems:
vagrant plugin install new-plugin
Installing a plugin from a local file source:
vagrant plugin install /path/to/new-plugin.gem
vagrant port displays full list of guest ports mapped to the host machine ports. If multi-machine Vagrantfile is used, name of the machine must be specified with
vagrant port my-machine
vagrant powershell opens a PowerShell prompt into a running Vagrant machine and will only work if the machine supports PowerShell.
vagrant provision runs configured provisioners against the running Vagrant managed machine.
vagrant rdp starts RDP client for a remote desktop session with the guest. Typically only Windows Vagrant environments support remote desktop. Raw arguments are passed through to RDP client by appending it after a
vagrant rdp -- /span that on Windows will execute
mstsc.exe /span config.rdp allowing RDP to span on multiple desktops.
vagrant reload is the equivalent of running
vagrant halt followed by
vagrant up commands. This is usually required for the changes made in the Vagrantfile to take effect.
vagrant reload is needed after making modifications to the Vagrantfile.
vagrant resume resumes a Vagrant machine that has been suspended with
vagrant suspend command.
vagrant share command loads the Vagrant Share session so that users Vagrant environment can be shared with anyone to enable collaboration directly in users Vagrant environment.
vagrant snapshot is used to manage snapshots with guest machine and are recorded a point-in-time state. This is not provided by every provider. Snapshot sub-commands include
push, pop, save, restore, list, delete.
vagrant ssh will SSH into a running Vagrant machine and give user access to a shell. An argument after
-- in command line is passed directly to ssh executable. That allows for example reverse tunneling down into the ssh program. If command runs in the background, it will be terminated almost immediately since when Vagrant executes the command, it is executed within the context of a shell. If shell is exited, all child processes also exit. To prevent this, process needs to be detached from shell.
vagrant ssh-config will output valid configuration for an SSH config file to SSH into the running Vagrant machine from ssh directly.
vagrant status will tell the state of the machines Vagrant is managing.
vagrant suspend suspends the guest machine rather than doing a full boot and saves the exact point-in-time state of the machine. This mostly requires extra disk space storing all the contents of RAM in guest machine not host machine or CPU cycles while it is in suspended.
vagrant up is the most important command in Vagrants since it creates and configures guest machine as specified in Vagrantfile.
vagrant version displays the version of Vagrant that is installed and the latest version of Vagrant that is currently available,for this a network call must be made.
vagrant -- version is for checking only the latest version installed.
vagrant share has three primary modes or features that are not mutually exclusive:
- HTTP sharing creates a publicly accessible URL endpoint to access HTTP server running in Vagrant environment. It is enabled by default when
vagrant shareis used. Accessing party does not need to have Vagrant installed in order to view. 
- SSH sharing allows instant SSH access to used Vagrant environment by anyone by running
vagrant connect --sshon the remote side. By default SSH sharing is disabled as a security measure. To enable SSH sharing, supply the
--sshflag when calling
vagrant share. If SSH sharing is enabled, a brand new key pair for SSH access is generated. Public key portion is automatically inserted to Vagrant machine and private key portion is uploaded to server managing the Vagrant shares. Private key is encrypted using a password that user will be prompted for and that is never transmitted across the network by Vagrant.
vagrant share --ssh it will output the name of the share:
After that, anyone can SSH directly to named Vagrant environment by running
vagrant connect --ssh NAME where
NAME is the name of the previously share output.
The default behavior is that the private key is encrypted, the connecting person will be prompted for the password to decrypt the private key.
- General sharing allows anyone to access any exposed port of Vagrant environment by running vagrant connect on the remote side.
Provisioners in Vagrant are for automatical software install anf configuration altering. Each provisioner is configured within Vagrantfile using
config.vm.provision method call
Vagrant.configure("2") do |config| # ... other configuration config.vm.provision "shell", inline: "echo hello" end
Each provisioner has a type that is used as the first parameter, then follows basic key/value for configuring that specific provisioner. Instead Ruby block for a syntax can also be used.
Vagrant makes it easy to set up and launch multiple virtual machines at the same time using the same configuration file. With one command
vagrant up the virtual machine(s) can be started, a box of users choice created so user can try out various operating systems and distributions. The learning curve is not very steep either and all in all using Vagrant is more comfortable, easier and saves time.
- Vagrant Homepage
- Using Vagrant and Ansible
- Starting with Vagrant on Ubuntu 14.10 - A Beginner's Guide
- Mitchell Hashimoto (2014-05-06). "Vagrant 1.6". Retrieved 2016-04-29.
- "Introducing Vagrant". Linux Journal. 14 November 2012. Retrieved 2016-05-06.
- Vagrantfile. Vagrant Documentation. Retrieved 2016-05-06.
- Boxes. Vagrant Documentation. Retrieved 2016-05-06.
- Backwards Compatibility Vagrant Documentation. Retrieved 2016-05-04.
- Project Setup. Vagrant Documentation. Retrieved 2016-02-29.
- Synced Folders. Vagrant Documentation. Retrieved 2016-04-27.
- Command-line Interface. Vagrant Documentation. Retrieved 2016-05-05.
- HTTP Sharing. Vagrant Documentation. Retrieved 2016-05-06.
- SSH Sharing. Vagrant Documentation. Retrieved 2016-05-08.
- Provisioning. Vagrant Documentation. Retrieved 2016-05-08.