Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Vagrant at LA Ruby

3,096 views

Published on

Vagrant presentation at LA Ruby in September 2010.

The main takeaway for this presentation I wanted to give was the reasoning and importance for virtualization development environments.

Published in: Technology
  • Login to see the comments

Vagrant at LA Ruby

  1. 1. Vagrant Virtualize your development environment. Thursday, September 9, 2010
  2. 2. Mitchell Hashimoto github.com/mitchellh twitter.com/mitchellh Thursday, September 9, 2010
  3. 3. $ git clone git://.../website.git ... $ ???WTF!#A@#)!??? ... $ script/server ... Thursday, September 9, 2010
  4. 4. $ git clone git://.../website.git ... $ ???WTF!#A@#)!??? ... $ script/server ... Thursday, September 9, 2010
  5. 5. User space Browser Editor Queue Other Music Server Server Web DB App IRC IM Server Server Server Operating System Thursday, September 9, 2010
  6. 6. BIG PROBLEMS Thursday, September 9, 2010
  7. 7. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) Thursday, September 9, 2010
  8. 8. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) 2. Not repeatable (That README ain’t gonna run itself) Thursday, September 9, 2010
  9. 9. BIG PROBLEMS 1. No isolation (Oh sorry, is that Tweetie Server Edition™?) 2. Not repeatable (That README ain’t gonna run itself) 3. No guarantees (But it works on my computer!!) Thursday, September 9, 2010
  10. 10. VIRTUALIZATION! EC2, Slicehost, Linode, Xen, KVM, ... Thursday, September 9, 2010
  11. 11. VIRTUALIZATION! EC2, Slicehost, Linode, Xen, KVM, ... Thursday, September 9, 2010
  12. 12. User space Browser Editor Queue Other Music Server Server Web DB App IRC IM Server Server Server Operating System Thursday, September 9, 2010
  13. 13. User space Virtualized OS Browser Editor Web DB App Server Server Server IRC IM Operating System Thursday, September 9, 2010
  14. 14. PROBLEMS SOLVED Thursday, September 9, 2010
  15. 15. PROBLEMS SOLVED 1. Isolation Thursday, September 9, 2010
  16. 16. PROBLEMS SOLVED 1. Isolation 2. Repeatable Thursday, September 9, 2010
  17. 17. PROBLEMS SOLVED 1. Isolation 2. Repeatable 3. Guarantees Thursday, September 9, 2010
  18. 18. BUSINESS BENEFITS Thursday, September 9, 2010
  19. 19. BUSINESS BENEFITS • Lower resource on-boarding time Thursday, September 9, 2010
  20. 20. BUSINESS BENEFITS • Lower resource on-boarding time • Version controlled server infrastructure Thursday, September 9, 2010
  21. 21. BUSINESS BENEFITS • Lower resource on-boarding time • Version controlled server infrastructure • Designers get up and running in minutes Thursday, September 9, 2010
  22. 22. WHY NOW? (Why haven’t we been doing this all along?) Thursday, September 9, 2010
  23. 23. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! Thursday, September 9, 2010
  24. 24. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines Thursday, September 9, 2010
  25. 25. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines ๏ Low RAM cost (4 GB standard, 8 GB quickly coming) Thursday, September 9, 2010
  26. 26. WHY NOW? (Why haven’t we been doing this all along?) • Big companies have been! • Only recently possible on local machines ๏ Low RAM cost (4 GB standard, 8 GB quickly coming) ๏ Desktop virtualization API Thursday, September 9, 2010
  27. 27. Vagrant Virtualize your development environment. Thursday, September 9, 2010
  28. 28. HIGH LEVEL OVERVIEW ‣ Describe environment via versionable Vagrantfile ‣ Manage virtual machine lifecycle ‣ Share folder from host to guest via NFS ‣ Provide SSH access to instance ‣ Provision instance using Chef, Puppet, etc. ‣ Manage host/guest networking Thursday, September 9, 2010
  29. 29. Vagrantfile • Describes the virtual machine environment in code ๏ One per project ๏ Commit to version control ๏ Pure Ruby - Limitless configuration. Thursday, September 9, 2010
  30. 30. Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" end Thursday, September 9, 2010
  31. 31. Virtual Machine Lifecycle ‣ vagrant binary ‣ Completely managed from creation to destruction ๏ (and creation... and destruction... and creation... and so on!) $ vagrant up $ vagrant halt $ vagrant suspend $ vagrant destroy $ vagrant reload $ vagrant ssh $ vagrant --help Thursday, September 9, 2010
  32. 32. Shared Folders via NFS ‣ File changes on host are immediately mirrored in the VM ‣ Continue using your favorite editor on your machine! ‣ By default mounted to /vagrant in VM Thursday, September 9, 2010
  33. 33. DEMO Thursday, September 9, 2010
  34. 34. Onto the good stuff... (let’s make it useful) Thursday, September 9, 2010
  35. 35. Provisioning • Use Chef, Puppet, Bash, etc. to provision your VM ๏ Repeatable! (BIG Problem #2, remember?) ๏ Use the same tools as production Thursday, September 9, 2010
  36. 36. Provisioning Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo end Thursday, September 9, 2010
  37. 37. Networking • Assign an IP to your VM ๏ Access VM using your own browser Thursday, September 9, 2010
  38. 38. Networking Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo config.vm.network("33.33.33.10") end Thursday, September 9, 2010
  39. 39. DEMO Thursday, September 9, 2010
  40. 40. Other stuff... (no demos here, you can experiment) Thursday, September 9, 2010
  41. 41. Packaging • Package built development environments ๏ vagrant package ๏ Distributable ๏ Minimize setup time Thursday, September 9, 2010
  42. 42. Multi-VM • Represent multi-server environments ๏ e.g. web + db + utility Thursday, September 9, 2010
  43. 43. Multi-VM Vagrant::Config.run do |config| config.vm.define :web do |web| # ... end config.vm.define :db do |db| # ... end end Thursday, September 9, 2010
  44. 44. Rake Integration • Use vagrant as a library ๏ Invoke command line actions ๏ Custom SSH commands Thursday, September 9, 2010
  45. 45. Rake Integration require 'vagrant' desc "Restart the web application" task :restart do env = Vagrant::Environment.load! env.ssh.execute do |ssh| ssh.exec!("touch /vagrant/tmp/restart.txt") end end Thursday, September 9, 2010
  46. 46. Plugins (0.6) • Extend Vagrant using a supported API • Add new commands to vagrant binary • Add new configuration options • Modify existing commands • e.g. vagrant rake - Just pass through arguments to rake on the VM. Thursday, September 9, 2010
  47. 47. Review • Continue using your existing development tools • Run your web app in a VM • VM setup file (Vagrantfile) in version control Thursday, September 9, 2010
  48. 48. LOSE NOTHING. GAIN EVERYTHING. Thursday, September 9, 2010
  49. 49. Vagrant IN ACTION Virtualize your development environment. Thursday, September 9, 2010
  50. 50. • Vagrant for all projects since March • Around 15 to 20 developers using it all day every day • Unexpected: Unique testing not possible before Thursday, September 9, 2010
  51. 51. • All Rails projects since July on Vagrant • Massive reduction in on-boarding difficulty for new hires • Looking into using it for Java-based projects in the near future Thursday, September 9, 2010
  52. 52. • Multi-VM setup (web + db + flash media server) • Solved: No easy way to emulate FMS on Mac. • Forced devops good practices • Example of successful distribution of boxes Thursday, September 9, 2010
  53. 53. About the Project • Current release: 0.5.4 • Started development in January. First release in March. • 0.6 development well under way: ๏ 179 commits, 226 files changed, 4081 lines added, 5730 lines deleted. ๏ Aiming for release in about 4 weeks. ๏ Biggest release yet Thursday, September 9, 2010
  54. 54. Getting Started + More Info • Website: vagrantup.com • IRC: #vagrant on Freenode • Github: http://github.com/mitchellh/vagrant Thursday, September 9, 2010

×