The History Many in the audience for this talk already know about Vagrant, but they don’t know where it came from, so let’s spend a few minutes talking about that.
Historic Notes Relative obscurity (only ~500 downloads per release) for 6 months. Vagrant started out living in relative obscurity for a long time. Growth was slow or non-existent. It was a toy!
Historic Notes Engine Yard Sponsorship in October 2010 Engine Yard gave me an OSS grant in Oct 2010 in order for me to evangelize the product more. This gave me the resources to travel!
Historic Notes ??? for another 6 to 8 months. I started a new job, moved to a new place, and kind of ignored things for 6 to 8 months. But things were HAPPENING while I was “ away.”
Historic Notes “Hey, you’re the Vagrant guy.” - Anonymous eye-opening patron in the streets of SF. Some random person stopped me in the streets of SF and thanked me for Vagrant, which they used at their company. This was the first time I thought “Weird, how many people are using Vagrant?”
Past 12 months - Roller Coaster Over 20 conference talks. Hundreds of companies. Things are getting serious fast. In the past 12 months, things have been CRAZY. Growth has been crazy, interest has been crazy, etc. etc.
Today More dedicated than ever, make it or break it moment. I love Vagrant. Today, I love the project more than ever. I don’t consider it successful yet, but its at the point where it can be successful, and I’m going to do my best to make it so.
Patterns? How Vagrant is actually used. No, I mean how Vagrant is actually used in practice. I had various ideas for how I thought Vagrant WOULD be used, but it is far more exciting to see how it IS used.
DISCLAIMER! Vagrant is not perfect. There is clear room for improvement in some areas of the workflows. These are not perfect workflows. I plan on improving things based on how I see people using it, but given the current release, this is how things can be used.
Workflow 1 1. One Vagrantfile per Puppet Module 2. Vagrant tests each Puppet module in isolation (no “integration” testing of Puppet modules) 3. Tests are run manually before commit
Workflow 2 1. One Vagrantfile per Integrated Unit 2. Vagrant tests the integration of several Puppet modules. 3. Outside shell script does smoke tests.
Workflow 2 1. One Vagrantfile per Integrated Unit 2. Vagrant tests the integration of several Puppet modules. 3. Outside shell script does smoke tests. 4. Run manually, with a bit more framework.
Workflow 1 1. One Vagrantfile for the entire project 2. `vagrant up` from a minimalistic base box 3. Puppet takes over to provision everything 4. README tells user how to work once it is up and running.
Workflow 2 1. One Vagrantfile for the entire project 2. `vagrant up` from a golden image base box 3. Puppet does basic config and starts services 4. README tells user how to work
Workflow 2 Pro: Simple from dev perspective Pro: Much faster Pro: Devs update when they are ready Con: Complicated from ops perspective Con: Didn’t we decide “golden master” is a bad idea? (I argue no)
Discipline Just as you rebase onto the latest code prior to pushing to a central source repository, devs expected to “rebase” onto the latest box prior to pushing to a central source repository.
Workflow 2 + Ops 1. One Vagrantfile that simulates Dev Vagrantfile but actually runs full Puppet stack from minimalistic base image. 2. `vagrant package` 3. Upload to internal file store.
Workflow 3 The idea is that each component is a black box and can be developed in isolation as long as it conforms to some interface. Leave integration testing to a complicated staging environment.
WARNING! Vagrant was NOT made to run on a server. VirtualBox was NOT made to run on a server. Vagrant 1.0.x was not made to run on a sever, nor was VirtualBox. People do it anyways successfully, but your mileage may vary.
... of course, that doesn’t mean that it isn’t a good idea in theory. However, its a good idea in general, and I plan on working on features to better support “Vagrant on the server.”
Vagrant Plugin for Jenkins https://wiki.jenkins-ci.org/display/JENKINS/Vagrant+Plugin All of these workflows rely on something like the Vagrant plugins for Jenkins, which is an awesome plugin.
The Future This section talks about the future of Vagrant, where the project is going. It doesn’t cover everything, only what I’m comfortable talking about at this time.
workflow The value is in the workflow, baby. What makes Vagrant awesome/valuable is not the technology, it is the workflow. People are starting to “know” Vagrant.
~ ! vagrant up --provider=vmware ... ~ ! vagrant up --provider=ec2 ... Here is a [currently] vaporware theoretical look at how this might look in practice...
Any Virt Software Same workflow, but use the right environment for the right job. This lets you use the SAME WORKFLOW (remember, that is valuable), but gives you the flexibility to use the right environment for the job.
Vagrant Builder ISO/Base Image + Scripts go in... ... VirtualBox, VMWare, Amazon images come out! This is essentially “VeeWee” functionality in Vagrant. VeeWee on steroids.
Vagrant Builder Closes a critical hole in the workflows of today, smoothens the transition to multi-provider. This is an important feature for two reasons: 1. It closes a critical hole in the workflow where Vagrant expected base boxes to just exist, but didn’t provide very friendly tools to create this base boxes. 2. With multi-provider coming, it smoothens the transition by allowing box creators to more easily support more providers.
This will be Vagrant 2.0 These features are the core features that will become Vagrant 2.0. There is no timeline for Vagrant 2.0 so don’t ask, but I’d like Vagrant 2.0 to be ready by the end of 2013.
Features released slowly in 1.x releases as beta. These features will slowly be released and refined as beta-quality features in 1.x releases. This is the same as how 0.x lead up to 1.0.