Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vagrant Usage Patterns

Vagrant Usage Patterns

This is a talk I gave on Vagrant usage patterns at Puppet Labs.

Mitchell Hashimoto

July 20, 2012
Tweet

More Decks by Mitchell Hashimoto

Other Decks in Programming

Transcript

  1. 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.
  2. COLLEGE! I started Vagrant while I was in college at

    the University of Washington. Go Huskies! Specifically, I started it my 3rd year of college.
  3. Hate-Driven I was getting more and more frustrated with the

    current state of things. I searched for a solution, decided to fix it myself.
  4. Jan 21, 2010 at 00:35 The first commit, well past

    midnight, like any good software project.
  5. 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!
  6. 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!
  7. 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.”
  8. 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?”
  9. basho Lots of people, apparently. This is a very outdated

    slide, there are many many many more prominent companies now using Vagrant.
  10. 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.
  11. 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.
  12. Patterns? How Vagrant was meant to be used? What do

    I mean by usage patterns? Do I mean how Vagrant is meant to be used?
  13. 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.
  14. 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.
  15. Goals • Faster feedback loop • Test in a production-like

    env • Write flexible modules (dev + prod) • Make writing modules more FUN!
  16. Workflow 1 1. One Vagrantfile per Puppet Module 2. Vagrant

    tests each Puppet module in isolation (no “integration” testing of Puppet modules)
  17. 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
  18. Workflow 2 1. One Vagrantfile per Integrated Unit 2. Vagrant

    tests the integration of several Puppet modules.
  19. Workflow 2 1. One Vagrantfile per Integrated Unit 2. Vagrant

    tests the integration of several Puppet modules. 3. Outside shell script does smoke tests.
  20. 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.
  21. Production-Like Env As long as you’re using the same OS

    box, you’re doing well. It can be better, still.
  22. Flexible Modules (Dev + Prod) Manual discipline to make sure

    things work in dev as well. This can probably be improved as well.
  23. Workflow 1 1. One Vagrantfile for the entire project 2.

    `vagrant up` from a minimalistic base box
  24. Workflow 1 1. One Vagrantfile for the entire project 2.

    `vagrant up` from a minimalistic base box 3. Puppet takes over to provision everything
  25. 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.
  26. Workflow 1 Pro: Simple Con: Can be slow Con: Easy

    to get “out of date” with Ops
  27. Workflow 2 1. One Vagrantfile for the entire project 2.

    `vagrant up` from a golden image base box
  28. 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
  29. 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
  30. 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)
  31. 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.
  32. 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.
  33. Workflow 3 1. One Vagrantfile per component/service 2. `vagrant up`

    per workflow 1 or 2 3. Leave full-stack testing to staging
  34. 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.
  35. Workflow 3 Pro: Simple Pro: Much smaller environments Con: No

    full-stack Con: You need an SOA for this to work
  36. 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.
  37. ... 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.”
  38. 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.
  39. Workflow 1 1. Jenkins CI. 2. `vagrant up` 3. Smoke

    test script to verify Puppet did the right thing.
  40. Goal Improve the cycle of working on Ops scripts and

    then getting those changes back into development VMs.
  41. Workflow 3 1. Jenkins CI. 2. Build development VM using

    latest golden image. 3. Run unit/acceptance tests against the VM.
  42. Goal Verify either (or both) that dev VMs work, verify

    that pushed code works in a fresh environment works.
  43. Vagrant for CI Pretty good idea in general. Future work

    on Vagrant will improve this process, make it more usable.
  44. 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.
  45. 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.
  46. A standard workflow for working with development environments. Vagrant is

    emerging as a standard workflow for working with development environments.
  47. 1. Any virt software (VMWare, EC2, KVM) Vagrant will work

    with any software to support the “environments”
  48. ~ ! vagrant up --provider=vmware ... ~ ! vagrant up

    --provider=ec2 ... Here is a [currently] vaporware theoretical look at how this might look in practice...
  49. 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.
  50. Vagrant Builder ISO/Base Image + Scripts go in... ... VirtualBox,

    VMWare, Amazon images come out! This is essentially “VeeWee” functionality in Vagrant. VeeWee on steroids.
  51. 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.
  52. 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.
  53. 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.