Vagrant is a great open source software for configuring and deploying multiple development environments. It works on Linux, Mac OS X, or Windows and although by default it uses VirtualBox for managing the virtualization, it can be used with other providers such as VMware or AWS.
Vagrant is a very good wrapper around Oracle’s VirtualBox. It makes life easier for web developers and the like by providing a nice command-line interface to build, manage, provision, use virtual machines.
Although it can use other virtual machine software, the most commonly used is VirtualBox. VirtualBox allows you to create a virtual server right on your machine. This allows you to run a Linux server (or whatever else you would like) on your personal Mac or PC.
Vagrant is essentially the glue between provisioning software such as Puppet or Chef and VirtualBox.
Vagrant helps you configure your network configurations for VirtualBox as well as run the necessary scripts to provision your virtual machine.
Provisioning your Vagrant Machine:
Launching a blank virtual machine is not very useful, so Vagrant supports provisioning virtual machines through the use of provisioners. There are a handful of provisioners for the most common choices supported out of the box with Vagrant
You can also use multiple provisioning options on the same VM. For example, you can provision your box using Chef and then finish your provisioning with a shell script afterwards.
Vagrantfile is to describe the type of machine required for a project, and how to configure and provision these machines. Vagrantfiles are called Vagrantfiles because the actual literal filename for the file is
Vagrantfile is supposed to be committed to version control.
Other developers involved in the project to check out the code, run
vagrant up, and be on their way.
Configuration versions are the mechanism by which Vagrant 1.1+ is able to remain backwards compatible with Vagrant 1.0.x Vagrantfiles, while introducing dramatically new features and configuration options.
Vagrantfile will be in roughly the following format:
Vagrant.configure("2") do |config| # ... end
"2" in the first line above represents the version of the configuration object
config that will be used for configuration for that block (the section between the
do and the
The important thing to understand as a general user of Vagrant is that within a single configuration section, only a single version can be used.
You cannot use the new
config.vm.provider configurations in a version.
-configuration section. Likewise,
config.vm.forward_port will not work in a version
-configuration section (it was renamed).
This is useful if you found some useful configuration snippet or something that you want to use.
Vagrant.configure("1") do |config| # v1 configs... end Vagrant.configure("2") do |config| # v2 configs... end
This is a list of features specific to Vagrant that Atlas provides.
- Vagrant Share
- Vagrant Box Versioning
- Vagrant Box Catalog
- Vagrant Box Creation
vagrant share command, you can instantly share public access to your running Vagrant environment (virtual machine). The canonical use case for this is to share SSH or HTTP access to your machine.
It’s important to share your work with colleagues or clients throughout the development process. Vagrant makes this easy with the
There are several different types of shares.
Vagrant Share shares HTTP access to your Vagrant environment to anyone in the world. The URL that it creates is publicly accessible and doesn’t require Vagrant to be installed to access — just a web browser.
$ vagrant share ==> default: Local HTTP port: 5000 default: Local HTTPS port: disabled ==> default: Your Vagrant Share is running! ==> default: URL: http://frosty-weasel-0857.vagrantshare.com ...
Currently, HTTP access is restricted through obscure URLs. We’ll be adding more ACLs and audit logs for this in the future.
Vagrant Share can allow anyone to easily SSH into your Vagrant environment. You’re having issues where your app isn’t running properly or you just want to pair program. Now, with just one flag, anyone you want can SSH into your Vagrant environment from anywhere in the world.
To enable sharing SSH, you must add the
--ssh flag to
$ vagrant share --ssh ==> default: SSH Port: 22 ==> default: Generating new SSH key... default: Please enter a password to encrypt the key: default: Repeat the password to confirm: default: Inserting generated SSH key into machine... ==> default: Checking authentication and authorization... ==> default: Creating Vagrant Share session... default: Share will be at: awful-squirrel-9454 ==> default: Your Vagrant Share is running! ...
--ssh flag is provided, Vagrant generates a brand new SSH keypair for SSH access. The public key portion is automatically inserted into the Vagrant environment. The private key portion is uploaded to the server managing the Vagrant Share connections. The password used to encrypt the private key is not uploaded anywhere, however, meaning we couldn't access your VM if we wanted to. It is an extra layer of security.
$ vagrant connect --ssh awful-squirrel-9454 Loading share 'awful-squirrel-9454'... Password for the private key: Executing SSH... Welcome to Ubuntu 12.04.1 LTS * Documentation: https://help.ubuntu.com/ Last login: Wed Feb 26 08:38:55 2014 from 192.168.148.1 vagrant@precise64:/vagrant$
General Sharing (Vagrant Connect)
Vagrant share can share any TCP/UDP connection, and is not restricted to only a single port. When you run
vagrant share, Vagrant will share the entire Vagrant environment.
When the person you are sharing with runs
vagrant connect SHARE-NAME, Vagrant will give this person a static IP they can use to access the machine as if it were on the local network:
$ vagrant connect awful-squirrel-9454 ==> connect: Connecting to: awful-squirrel-9454 ==> connect: Starting a VM for a static connect IP. connect: The machine is booted and ready! ==> connect: Connect is running! ==> connect: SOCKS address: 127.0.0.1:62167 ==> connect: Machine IP: 172.16.0.2 ==> connect: ==> connect: Press Ctrl-C to stop connection. ...
The primary security mechanism for Vagrant Share is security through obscurity along with an encryption key for SSH. Additionally, there are several configuration options made available to help control access and manage security:
In addition to these options, there are other features we’ve built to help:
-Vagrant share uses end-to-end TLS connections. So even unencrypted TCP streams are encrypted through the various proxies and only unencrypted during the final local communication between the local proxy and the Vagrant environment.
-SSH keys are encrypted by default, using a password that is not transmitted to our servers or across the network at all.
-SSH is not shared by default, it must explicitly be shared with the
-A web interface we’ve built shows share history and will show basic access logs in the future.
-Share sessions expire after a short time (currently 8 hours), but can also be expired manually by
ctrl-c from the sharing machine or via the web interface
Vagrant Box Versioning
Boxes support versioning so that members of your team using Vagrant can update the underlying box easily, and the people who create boxes can push fixes and communicate these fixes efficiently.
There are multiple components of a box:
-The box itself, comprised of the box name and description.
-One or more box versions.
-One or more providers for each box version.
vagrant up or
vagrant box outdated, an out-of-date box user will see the following message in Vagrant:
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'hashicorp/example' is up to date... ==> default: A newer version of the box 'hashicorp/example' is available! You currently ==> default: have version '0.0.5'. The latest is version '0.0.6'. Run ==> default: `vagrant box update` to update. ...
Box Version Release States
Create new versions of boxes without releasing them or without Vagrant seeing the update. This lets you prepare a box for release slowly.
Box versions have three states:
unreleased: Vagrant cannot see this version yet, so it needs to be released. Versions can be released by editing them and clicking the release button at the top of the page
active: Vagrant is able to add and use this box version
revoked: Vagrant cannot see this version, and it cannot be re-released. You must create the version again