Vagrant at LA Ruby

Preview:

Citation preview

VagrantVirtualize your development environment.

Thursday, September 9, 2010

Mitchell Hashimotogithub.com/mitchellhtwitter.com/mitchellh

Thursday, September 9, 2010

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

Thursday, September 9, 2010

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

Thursday, September 9, 2010

Operating System

User space

WebServer

DBServer

AppServer

QueueServer

Other Server

Browser

IRC IM

EditorMusic

Thursday, September 9, 2010

BIG PROBLEMS

Thursday, September 9, 2010

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

Thursday, September 9, 2010

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

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

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

VIRTUALIZATION!

Thursday, September 9, 2010

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

VIRTUALIZATION!

Thursday, September 9, 2010

Operating System

User space

WebServer

DBServer

AppServer

QueueServer

Other Server

Browser

IRC IM

EditorMusic

Thursday, September 9, 2010

Operating System

User space

Browser

IRC IM

Editor

Virtualized OS

Web Server

DB Server

App Server

Thursday, September 9, 2010

PROBLEMS SOLVED

Thursday, September 9, 2010

PROBLEMS SOLVED1. Isolation

Thursday, September 9, 2010

PROBLEMS SOLVED1. Isolation

2. Repeatable

Thursday, September 9, 2010

PROBLEMS SOLVED1. Isolation

2. Repeatable

3. Guarantees

Thursday, September 9, 2010

BUSINESS BENEFITS

Thursday, September 9, 2010

BUSINESS BENEFITS• Lower resource on-boarding time

Thursday, September 9, 2010

BUSINESS BENEFITS• Lower resource on-boarding time

• Version controlled server infrastructure

Thursday, September 9, 2010

BUSINESS BENEFITS• Lower resource on-boarding time

• Version controlled server infrastructure

• Designers get up and running in minutes

Thursday, September 9, 2010

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

Thursday, September 9, 2010

WHY NOW?

• Big companies have been!

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

Thursday, September 9, 2010

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

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

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

VagrantVirtualize your development environment.

Thursday, September 9, 2010

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

Vagrantfile

• Describes the virtual machine environment in code

๏ One per project

๏ Commit to version control

๏ Pure Ruby - Limitless configuration.

Thursday, September 9, 2010

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

Vagrantfile

Thursday, September 9, 2010

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

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

DEMO

Thursday, September 9, 2010

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

Thursday, September 9, 2010

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

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

Provisioning

Thursday, September 9, 2010

Networking

• Assign an IP to your VM

๏ Access VM using your own browser

Thursday, September 9, 2010

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

DEMO

Thursday, September 9, 2010

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

Thursday, September 9, 2010

Packaging

• Package built development environments

๏ vagrant package

๏ Distributable

๏ Minimize setup time

Thursday, September 9, 2010

Multi-VM• Represent multi-server environments

๏ e.g. web + db + utility

Thursday, September 9, 2010

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

Rake Integration

• Use vagrant as a library

๏ Invoke command line actions

๏ Custom SSH commands

Thursday, September 9, 2010

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

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

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

LOSE NOTHING. GAIN EVERYTHING.

Thursday, September 9, 2010

VagrantVirtualize your development environment.

IN ACTION

Thursday, September 9, 2010

• 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

• 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

• 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

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

Getting Started + More Info

• Website: vagrantup.com

• IRC: #vagrant on Freenode

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

Thursday, September 9, 2010