54
Vagrant Virtualize your development environment. Thursday, September 9, 2010

Vagrant at LA Ruby

Embed Size (px)

Citation preview

Page 1: Vagrant at LA Ruby

VagrantVirtualize your development environment.

Thursday, September 9, 2010

Page 2: Vagrant at LA Ruby

Mitchell Hashimotogithub.com/mitchellhtwitter.com/mitchellh

Thursday, September 9, 2010

Page 3: Vagrant at LA Ruby

$ git clone git://.../website.git...$ ???WTF!#A@#)!???...$ script/server...

Thursday, September 9, 2010

Page 4: Vagrant at LA Ruby

$ git clone git://.../website.git...$ ???WTF!#A@#)!???...$ script/server...

Thursday, September 9, 2010

Page 5: Vagrant at LA Ruby

Operating System

User space

WebServer

DBServer

AppServer

QueueServer

Other Server

Browser

IRC IM

EditorMusic

Thursday, September 9, 2010

Page 6: Vagrant at LA Ruby

BIG PROBLEMS

Thursday, September 9, 2010

Page 7: Vagrant at LA Ruby

BIG PROBLEMS1. No isolation (Oh sorry, is that Tweetie Server Edition™?)

Thursday, September 9, 2010

Page 8: Vagrant at LA Ruby

BIG PROBLEMS1. No isolation (Oh sorry, is that Tweetie Server Edition™?)

2. Not repeatable (That README ain’t gonna run itself)

Thursday, September 9, 2010

Page 9: Vagrant at LA Ruby

BIG PROBLEMS1. 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

Page 10: Vagrant at LA Ruby

EC2, Slicehost, Linode, Xen, KVM, ...

VIRTUALIZATION!

Thursday, September 9, 2010

Page 11: Vagrant at LA Ruby

EC2, Slicehost, Linode, Xen, KVM, ...

VIRTUALIZATION!

Thursday, September 9, 2010

Page 12: Vagrant at LA Ruby

Operating System

User space

WebServer

DBServer

AppServer

QueueServer

Other Server

Browser

IRC IM

EditorMusic

Thursday, September 9, 2010

Page 13: Vagrant at LA Ruby

Operating System

User space

Browser

IRC IM

Editor

Virtualized OS

Web Server

DB Server

App Server

Thursday, September 9, 2010

Page 14: Vagrant at LA Ruby

PROBLEMS SOLVED

Thursday, September 9, 2010

Page 15: Vagrant at LA Ruby

PROBLEMS SOLVED1. Isolation

Thursday, September 9, 2010

Page 16: Vagrant at LA Ruby

PROBLEMS SOLVED1. Isolation

2. Repeatable

Thursday, September 9, 2010

Page 17: Vagrant at LA Ruby

PROBLEMS SOLVED1. Isolation

2. Repeatable

3. Guarantees

Thursday, September 9, 2010

Page 18: Vagrant at LA Ruby

BUSINESS BENEFITS

Thursday, September 9, 2010

Page 19: Vagrant at LA Ruby

BUSINESS BENEFITS• Lower resource on-boarding time

Thursday, September 9, 2010

Page 20: Vagrant at LA Ruby

BUSINESS BENEFITS• Lower resource on-boarding time

• Version controlled server infrastructure

Thursday, September 9, 2010

Page 21: Vagrant at LA Ruby

BUSINESS BENEFITS• Lower resource on-boarding time

• Version controlled server infrastructure

• Designers get up and running in minutes

Thursday, September 9, 2010

Page 22: Vagrant at LA Ruby

WHY NOW?(Why haven’t we been doing this all along?)

Thursday, September 9, 2010

Page 23: Vagrant at LA Ruby

WHY NOW?

• Big companies have been!

(Why haven’t we been doing this all along?)

Thursday, September 9, 2010

Page 24: Vagrant at LA Ruby

WHY NOW?

• Big companies have been!

• Only recently possible on local machines

(Why haven’t we been doing this all along?)

Thursday, September 9, 2010

Page 25: Vagrant at LA Ruby

WHY NOW?

• Big companies have been!

• Only recently possible on local machines

๏ Low RAM cost (4 GB standard, 8 GB quickly coming)

(Why haven’t we been doing this all along?)

Thursday, September 9, 2010

Page 26: Vagrant at LA Ruby

WHY NOW?

• Big companies have been!

• Only recently possible on local machines

๏ Low RAM cost (4 GB standard, 8 GB quickly coming)

๏ Desktop virtualization API

(Why haven’t we been doing this all along?)

Thursday, September 9, 2010

Page 27: Vagrant at LA Ruby

VagrantVirtualize your development environment.

Thursday, September 9, 2010

Page 28: Vagrant at LA Ruby

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

Page 29: Vagrant at LA Ruby

Vagrantfile

• Describes the virtual machine environment in code

๏ One per project

๏ Commit to version control

๏ Pure Ruby - Limitless configuration.

Thursday, September 9, 2010

Page 30: Vagrant at LA Ruby

Vagrant::Config.run do |config| config.vm.box = "lucid32"end

Vagrantfile

Thursday, September 9, 2010

Page 31: Vagrant at LA Ruby

Virtual Machine Lifecycle

$ vagrant up$ vagrant halt$ vagrant suspend$ vagrant destroy$ vagrant reload$ vagrant ssh$ vagrant --help

‣ vagrant binary

‣ Completely managed from creation to destruction

๏ (and creation... and destruction... and creation... and so on!)

Thursday, September 9, 2010

Page 32: Vagrant at LA Ruby

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

Page 33: Vagrant at LA Ruby

DEMO

Thursday, September 9, 2010

Page 34: Vagrant at LA Ruby

Onto the good stuff...(let’s make it useful)

Thursday, September 9, 2010

Page 35: Vagrant at LA Ruby

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

Page 36: Vagrant at LA Ruby

Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_soloend

Provisioning

Thursday, September 9, 2010

Page 37: Vagrant at LA Ruby

Networking

• Assign an IP to your VM

๏ Access VM using your own browser

Thursday, September 9, 2010

Page 38: Vagrant at LA Ruby

Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provisioner = :chef_solo config.vm.network("33.33.33.10")end

Networking

Thursday, September 9, 2010

Page 39: Vagrant at LA Ruby

DEMO

Thursday, September 9, 2010

Page 40: Vagrant at LA Ruby

Other stuff...(no demos here, you can experiment)

Thursday, September 9, 2010

Page 41: Vagrant at LA Ruby

Packaging

• Package built development environments

๏ vagrant package

๏ Distributable

๏ Minimize setup time

Thursday, September 9, 2010

Page 42: Vagrant at LA Ruby

Multi-VM• Represent multi-server environments

๏ e.g. web + db + utility

Thursday, September 9, 2010

Page 43: Vagrant at LA Ruby

Vagrant::Config.run do |config| config.vm.define :web do |web| # ... end

config.vm.define :db do |db| # ... endend

Multi-VM

Thursday, September 9, 2010

Page 44: Vagrant at LA Ruby

Rake Integration

• Use vagrant as a library

๏ Invoke command line actions

๏ Custom SSH commands

Thursday, September 9, 2010

Page 45: Vagrant at LA Ruby

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") endend

Rake Integration

Thursday, September 9, 2010

Page 46: Vagrant at LA Ruby

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

Page 47: Vagrant at LA Ruby

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

Page 48: Vagrant at LA Ruby

LOSE NOTHING. GAIN EVERYTHING.

Thursday, September 9, 2010

Page 49: Vagrant at LA Ruby

VagrantVirtualize your development environment.

IN ACTION

Thursday, September 9, 2010

Page 50: Vagrant at LA Ruby

• 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

Page 51: Vagrant at LA Ruby

• 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

Page 52: Vagrant at LA Ruby

• 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

Page 53: Vagrant at LA Ruby

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

Page 54: Vagrant at LA Ruby

Getting Started + More Info

• Website: vagrantup.com

• IRC: #vagrant on Freenode

• Github: http://github.com/mitchellh/vagrant

Thursday, September 9, 2010