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.
7. BIG PROBLEMS
1. No isolation (Oh sorry, is that Tweetie Server Edition™?)
Thursday, September 9, 2010
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. 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
19. BUSINESS BENEFITS
• Lower resource on-boarding time
Thursday, September 9, 2010
20. BUSINESS BENEFITS
• Lower resource on-boarding time
• Version controlled server infrastructure
Thursday, September 9, 2010
21. BUSINESS BENEFITS
• Lower resource on-boarding time
• Version controlled server infrastructure
• Designers get up and running in minutes
Thursday, September 9, 2010
22. WHY NOW?
(Why haven’t we been doing this all along?)
Thursday, September 9, 2010
23. WHY NOW?
(Why haven’t we been doing this all along?)
• Big companies have been!
Thursday, September 9, 2010
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. 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. 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. Vagrant
Virtualize your development environment.
Thursday, September 9, 2010
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. Vagrantfile
• Describes the virtual machine environment in code
๏ One per project
๏ Commit to version control
๏ Pure Ruby - Limitless configuration.
Thursday, September 9, 2010
30. Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
end
Thursday, September 9, 2010
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. 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
34. Onto the good stuff...
(let’s make it useful)
Thursday, September 9, 2010
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. Provisioning
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.provisioner = :chef_solo
end
Thursday, September 9, 2010
37. Networking
• Assign an IP to your VM
๏ Access VM using your own browser
Thursday, September 9, 2010
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
40. Other stuff...
(no demos here, you can experiment)
Thursday, September 9, 2010
41. Packaging
• Package built development environments
๏ vagrant package
๏ Distributable
๏ Minimize setup time
Thursday, September 9, 2010
42. Multi-VM
• Represent multi-server environments
๏ e.g. web + db + utility
Thursday, September 9, 2010
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. Rake Integration
• Use vagrant as a library
๏ Invoke command line actions
๏ Custom SSH commands
Thursday, September 9, 2010
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. 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. 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
49. Vagrant IN ACTION
Virtualize your development environment.
Thursday, September 9, 2010
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. • 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. • 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. 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. Getting Started + More Info
• Website: vagrantup.com
• IRC: #vagrant on Freenode
• Github: http://github.com/mitchellh/vagrant
Thursday, September 9, 2010