76
CLOUD SAVVY Brown BaG: VAGRANT Hart Hoover @hhoover Thursday, September 26, 13

Vagrant Intro

Embed Size (px)

DESCRIPTION

An introduction to Vagrant

Citation preview

Page 1: Vagrant Intro

CLOUD SAVVY

Brown BaG:VAGRANT

Hart Hoover@hhoover

Thursday, September 26, 13

Page 2: Vagrant Intro

CLOUD SAVVY

History of vagrant

Thursday, September 26, 13

Page 3: Vagrant Intro

CLOUD SAVVY 3

Thursday, September 26, 13

Page 4: Vagrant Intro

CLOUD SAVVY 4

Mitchell Hashimotocreated Vagrant in 2009

John Bender

Thursday, September 26, 13

Page 5: Vagrant Intro

CLOUD SAVVY 5

Engine Yard sponsored Vagrant through their OSS Community Grant Program in 2010

Thursday, September 26, 13

Page 6: Vagrant Intro

CLOUD SAVVY 6

INTEREST IN Vagrant

Thursday, September 26, 13

Page 7: Vagrant Intro

CLOUD SAVVY 7

Thursday, September 26, 13

Page 8: Vagrant Intro

CLOUD SAVVY

WHY vagrant?

Thursday, September 26, 13

Page 9: Vagrant Intro

CLOUD SAVVY 9

Thursday, September 26, 13

Page 10: Vagrant Intro

CLOUD SAVVY 10

Why Vagrant?

• Repeatable• Customizable• “It works on my machine.”

Developers

Thursday, September 26, 13

Page 11: Vagrant Intro

CLOUD SAVVY 11

Why Vagrant?

• Disposable Machines• Test your provisioning• Local → Production

Operations

Thursday, September 26, 13

Page 12: Vagrant Intro

CLOUD SAVVY 12

Why Vagrant?

=

Thursday, September 26, 13

Page 13: Vagrant Intro

CLOUD SAVVY

GettingStarted

Thursday, September 26, 13

Page 14: Vagrant Intro

CLOUD SAVVY 14

https://www.virtualbox.org/wiki/Downloads

Thursday, September 26, 13

Page 15: Vagrant Intro

CLOUD SAVVY 15

http://downloads.vagrantup.com/

Thursday, September 26, 13

Page 16: Vagrant Intro

CLOUD SAVVY 16

$  vagrant  box  add  \precise64  \http://files.vagrantup.com/precise64.box

GET STARTED

$  mkdir  ~/project

$  cd  ~/project

Thursday, September 26, 13

Page 17: Vagrant Intro

CLOUD SAVVY 17

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 18: Vagrant Intro

CLOUD SAVVY 18

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 19: Vagrant Intro

CLOUD SAVVY 19

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 20: Vagrant Intro

CLOUD SAVVY 20

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 21: Vagrant Intro

CLOUD SAVVY 21

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 22: Vagrant Intro

CLOUD SAVVY 22

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 23: Vagrant Intro

CLOUD SAVVY 23

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 24: Vagrant Intro

CLOUD SAVVY 24

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 25: Vagrant Intro

CLOUD SAVVY 25

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 26: Vagrant Intro

CLOUD SAVVY 26

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 27: Vagrant Intro

CLOUD SAVVY 27

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 28: Vagrant Intro

CLOUD SAVVY 28

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 29: Vagrant Intro

CLOUD SAVVY 29

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 30: Vagrant Intro

CLOUD SAVVY 30

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 31: Vagrant Intro

CLOUD SAVVY 31

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

Page 32: Vagrant Intro

CLOUD SAVVY 32

$  vagrant  init  precise64$  vagrant  up

Thursday, September 26, 13

Page 33: Vagrant Intro

CLOUD SAVVY 33

Thursday, September 26, 13

Page 34: Vagrant Intro

CLOUD SAVVY 34

$  vagrant  ssh

Thursday, September 26, 13

Page 35: Vagrant Intro

CLOUD SAVVY 35

Thursday, September 26, 13

Page 36: Vagrant Intro

CLOUD SAVVY 36

$  vagrant  destroy

Thursday, September 26, 13

Page 37: Vagrant Intro

CLOUD SAVVY 37

Thursday, September 26, 13

Page 38: Vagrant Intro

CLOUD SAVVY 38

What JustHappened?

Thursday, September 26, 13

Page 39: Vagrant Intro

CLOUD SAVVY 39

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'end

THE VAGRANTFILE

Thursday, September 26, 13

Page 40: Vagrant Intro

CLOUD SAVVY 40

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'end

THE VAGRANTFILE

Thursday, September 26, 13

Page 41: Vagrant Intro

CLOUD SAVVY 41

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'end

THE VAGRANTFILE

Thursday, September 26, 13

Page 42: Vagrant Intro

CLOUD SAVVY 42

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'end

THE VAGRANTFILE

BORING

Thursday, September 26, 13

Page 43: Vagrant Intro

CLOUD SAVVY 43

Thursday, September 26, 13

Page 44: Vagrant Intro

CLOUD SAVVY

ExTending Vagrant

Thursday, September 26, 13

Page 45: Vagrant Intro

CLOUD SAVVY

HOW TO INSTALLA PLUGIN

45

$  vagrant  plugin  install  $PLUGIN_NAME

Thursday, September 26, 13

Page 46: Vagrant Intro

CLOUD SAVVY

What Plugins are Out There?

46

Thursday, September 26, 13

Page 47: Vagrant Intro

CLOUD SAVVY

What Plugins are Out There?

46

AND MORE

Thursday, September 26, 13

Page 48: Vagrant Intro

CLOUD SAVVY

What Plugins are Out There?

47

https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

Thursday, September 26, 13

Page 49: Vagrant Intro

CLOUD SAVVY

DEPLOYINGTO RACKSPACE

Thursday, September 26, 13

Page 50: Vagrant Intro

CLOUD SAVVY 49

INSTALL THE PLUGIN

$  vagrant  plugin  install  vagrant-­‐rackspace

Thursday, September 26, 13

Page 51: Vagrant Intro

CLOUD SAVVY 50

$  vagrant  box  add  \rax  \http://tinyurl.com/raxdummy

GET THE BOX

Thursday, September 26, 13

Page 52: Vagrant Intro

CLOUD SAVVY 51

http://tinyurl.com/vagrantfiles

COPY & PASTE!

Thursday, September 26, 13

Page 53: Vagrant Intro

CLOUD SAVVY 52

Vagrant.configure("2")  do  |config|    config.vm.box  =  "rax"      config.ssh.private_key_path  =  "~/.ssh/id_rsa_my_private_key"      config.vm.provider  :rackspace  do  |rs|        rs.username                =  "YOUR  USERNAME"        rs.api_key                  =  "YOUR  API  KEY"        rs.flavor                    =  /512MB/        rs.image                      =  /Ubuntu  12.04/        rs.public_key_path  =  "my_public_key.pub"    endend

THE VAGRANTFILE

Thursday, September 26, 13

Page 54: Vagrant Intro

CLOUD SAVVY 53

Vagrant.configure("2")  do  |config|    config.vm.box  =  "rax"      config.ssh.private_key_path  =  "~/.ssh/id_rsa_my_private_key"      config.vm.provider  :rackspace  do  |rs|        rs.username                =  "YOUR  USERNAME"        rs.api_key                  =  "YOUR  API  KEY"        rs.flavor                    =  /512MB/        rs.image                      =  /Ubuntu  12.04/        rs.public_key_path  =  "my_public_key.pub"    endend

THE VAGRANTFILE

Thursday, September 26, 13

Page 55: Vagrant Intro

CLOUD SAVVY 54

Vagrant.configure("2")  do  |config|    config.vm.box  =  "rax"      config.ssh.private_key_path  =  "~/.ssh/id_rsa_my_private_key"      config.vm.provider  :rackspace  do  |rs|        rs.username                =  "YOUR  USERNAME"        rs.api_key                  =  "YOUR  API  KEY"        rs.flavor                    =  /512MB/        rs.image                      =  /Ubuntu  12.04/        rs.public_key_path  =  "my_public_key.pub"    endend

THE VAGRANTFILE

Thursday, September 26, 13

Page 56: Vagrant Intro

CLOUD SAVVY 55

Vagrant.configure("2")  do  |config|    config.vm.box  =  "rax"      config.ssh.private_key_path  =  "~/.ssh/id_rsa_my_private_key"      config.vm.provider  :rackspace  do  |rs|        rs.username                =  "YOUR  USERNAME"        rs.api_key                  =  "YOUR  API  KEY"        rs.flavor                    =  /512MB/        rs.image                      =  /Ubuntu  12.04/        rs.public_key_path  =  "my_public_key.pub"    endend

THE VAGRANTFILE

Thursday, September 26, 13

Page 57: Vagrant Intro

CLOUD SAVVY 56

Vagrant.configure("2")  do  |config|    config.vm.box  =  "rax"      config.ssh.private_key_path  =  "~/.ssh/id_rsa_my_private_key"      config.vm.provider  :rackspace  do  |rs|        rs.username                =  "YOUR  USERNAME"        rs.api_key                  =  "YOUR  API  KEY"        rs.flavor                    =  /512MB/        rs.image                      =  /Ubuntu  12.04/        rs.public_key_path  =  "my_public_key.pub"    endend

THE VAGRANTFILE

Thursday, September 26, 13

Page 58: Vagrant Intro

CLOUD SAVVY 57

START IT UP

$  vagrant  up  -­‐-­‐provider=rackspace

Thursday, September 26, 13

Page 59: Vagrant Intro

CLOUD SAVVY 58

Thursday, September 26, 13

Page 60: Vagrant Intro

CLOUD SAVVY 59

TURN IT OFF

$  vagrant  ssh$  vagrant  destroy

Thursday, September 26, 13

Page 61: Vagrant Intro

CLOUD SAVVY

VAGRANT AND CHEFUsing Config Management

with Vagrant

Thursday, September 26, 13

Page 62: Vagrant Intro

CLOUD SAVVY

CHEF VAGRANT PLUGINS

61

Thursday, September 26, 13

Page 63: Vagrant Intro

CLOUD SAVVY

CHEF VAGRANT PLUGINS

61

• vagrant-omnibus: Installs a specific version of the Chef Omnibus

Thursday, September 26, 13

Page 64: Vagrant Intro

CLOUD SAVVY

CHEF VAGRANT PLUGINS

61

• vagrant-omnibus: Installs a specific version of the Chef Omnibus

• vagrant-berkshelf: Tells Vagrant to look for a Berksfile

Thursday, September 26, 13

Page 65: Vagrant Intro

CLOUD SAVVY 62

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'  config.vm.provision  "chef_solo"  do  |chef|  chef.cookbooks_path  =  "chef-­‐repo/cookbooks"chef.roles_path  =  "chef-­‐repo/roles"

       chef.add_role  "mysql_server"    chef.add_role  "web_server"end

end

VAGRANT AND CHEF

Thursday, September 26, 13

Page 66: Vagrant Intro

CLOUD SAVVY 63

VAGRANT AND CHEF

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'  config.vm.provision  "chef_solo"  do  |chef|  

       chef.cookbooks_path  =  "chef-­‐repo/cookbooks"        chef.roles_path  =  "chef-­‐repo/roles"        chef.add_role  "mysql_server"        chef.add_role  "web_server"    endend

Thursday, September 26, 13

Page 67: Vagrant Intro

CLOUD SAVVY 64

VAGRANT AND CHEF

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'  config.vm.provision  "chef_solo"  do  |chef|  

       chef.cookbooks_path  =  "chef-­‐repo/cookbooks"        chef.roles_path  =  "chef-­‐repo/roles"        chef.add_role  "mysql_server"        chef.add_role  "web_server"    endend

Thursday, September 26, 13

Page 68: Vagrant Intro

CLOUD SAVVY 65

VAGRANT AND CHEF

Vagrant.configure("2")  do  |config|    config.vm.box  =  'precise64'    config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'  config.vm.provision  "chef_solo"  do  |chef|  

       chef.cookbooks_path  =  "chef-­‐repo/cookbooks"        chef.roles_path  =  "chef-­‐repo/roles"        chef.add_role  "mysql_server"        chef.add_role  "web_server"    endend

Thursday, September 26, 13

Page 69: Vagrant Intro

CLOUD SAVVY 66

Thursday, September 26, 13

Page 70: Vagrant Intro

CLOUD SAVVY 67

http://www.vagrantbox.es/

CUSTOM BOXES

Thursday, September 26, 13

Page 71: Vagrant Intro

CLOUD SAVVY 68

Multiple MachinesVagrant.configure("2")  do  |config|    config.vm.box  =  "precise64"    config.vm.box_url  =  "http://files.vagrantup.com/precise64.box"

   config.vm.define  "web"  do  |web|        web.vm.network  :private_network,  ip:  "192.168.57.10"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("apache2")        end    end

   config.vm.define  "database"  do  |database|        database.vm.network  :private_network,  ip:  "192.168.57.11"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("mysql")        end    endend

Thursday, September 26, 13

Page 72: Vagrant Intro

CLOUD SAVVY 69

Multiple MachinesVagrant.configure("2")  do  |config|    config.vm.box  =  "precise64"    config.vm.box_url  =  "http://files.vagrantup.com/precise64.box"

   config.vm.define  "web"  do  |web|        web.vm.network  :private_network,  ip:  "192.168.57.10"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("apache2")        end    end

   config.vm.define  "database"  do  |database|        database.vm.network  :private_network,  ip:  "192.168.57.11"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("mysql")        end    endend

Thursday, September 26, 13

Page 73: Vagrant Intro

CLOUD SAVVY 70

Multiple MachinesVagrant.configure("2")  do  |config|    config.vm.box  =  "precise64"    config.vm.box_url  =  "http://files.vagrantup.com/precise64.box"

   config.vm.define  "web"  do  |web|        web.vm.network  :private_network,  ip:  "192.168.57.10"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("apache2")        end    end

   config.vm.define  "database"  do  |database|        database.vm.network  :private_network,  ip:  "192.168.57.11"                config.vm.provision  :chef_solo  do  |chef|            chef.cookbooks_path  =  "cookbooks"            chef.add_recipe("mysql")        end    endend

Thursday, September 26, 13

Page 74: Vagrant Intro

CLOUD SAVVY 71

SYNC FOLDERS

Vagrant.configure("2")  do  |config|config.vm.box  =  'precise64'config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'config.vm.synced_folder  “/home/user/project/”,  “/var/www/html”end

Thursday, September 26, 13

Page 75: Vagrant Intro

CLOUD SAVVY 72

SYNC FOLDERS

Vagrant.configure("2")  do  |config|config.vm.box  =  'precise64'config.vm.box_url  =  'http://files.vagrantup.com/precise64.box'config.vm.synced_folder  “/home/user/project/”,  “/var/www/html”end

Thursday, September 26, 13

Page 76: Vagrant Intro

CLOUD SAVVY

THANKYOU!

Thursday, September 26, 13