Vagrant Intro

Preview:

DESCRIPTION

An introduction to Vagrant

Citation preview

CLOUD SAVVY

Brown BaG:VAGRANT

Hart Hoover@hhoover

Thursday, September 26, 13

CLOUD SAVVY

History of vagrant

Thursday, September 26, 13

CLOUD SAVVY 3

Thursday, September 26, 13

CLOUD SAVVY 4

Mitchell Hashimotocreated Vagrant in 2009

John Bender

Thursday, September 26, 13

CLOUD SAVVY 5

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

Thursday, September 26, 13

CLOUD SAVVY 6

INTEREST IN Vagrant

Thursday, September 26, 13

CLOUD SAVVY 7

Thursday, September 26, 13

CLOUD SAVVY

WHY vagrant?

Thursday, September 26, 13

CLOUD SAVVY 9

Thursday, September 26, 13

CLOUD SAVVY 10

Why Vagrant?

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

Developers

Thursday, September 26, 13

CLOUD SAVVY 11

Why Vagrant?

• Disposable Machines• Test your provisioning• Local → Production

Operations

Thursday, September 26, 13

CLOUD SAVVY 12

Why Vagrant?

=

Thursday, September 26, 13

CLOUD SAVVY

GettingStarted

Thursday, September 26, 13

CLOUD SAVVY 14

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

Thursday, September 26, 13

CLOUD SAVVY 15

http://downloads.vagrantup.com/

Thursday, September 26, 13

CLOUD SAVVY 16

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

GET STARTED

$  mkdir  ~/project

$  cd  ~/project

Thursday, September 26, 13

CLOUD SAVVY 17

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 18

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 19

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 20

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 21

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 22

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 23

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 24

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 25

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 26

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 27

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 28

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 29

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 30

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 31

vagrant

boxdestroyhaltinitpackageplugin

provisionreloadresumesshssh-­‐config

statussuspendup

Thursday, September 26, 13

CLOUD SAVVY 32

$  vagrant  init  precise64$  vagrant  up

Thursday, September 26, 13

CLOUD SAVVY 33

Thursday, September 26, 13

CLOUD SAVVY 34

$  vagrant  ssh

Thursday, September 26, 13

CLOUD SAVVY 35

Thursday, September 26, 13

CLOUD SAVVY 36

$  vagrant  destroy

Thursday, September 26, 13

CLOUD SAVVY 37

Thursday, September 26, 13

CLOUD SAVVY 38

What JustHappened?

Thursday, September 26, 13

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

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

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

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

CLOUD SAVVY 43

Thursday, September 26, 13

CLOUD SAVVY

ExTending Vagrant

Thursday, September 26, 13

CLOUD SAVVY

HOW TO INSTALLA PLUGIN

45

$  vagrant  plugin  install  $PLUGIN_NAME

Thursday, September 26, 13

CLOUD SAVVY

What Plugins are Out There?

46

Thursday, September 26, 13

CLOUD SAVVY

What Plugins are Out There?

46

AND MORE

Thursday, September 26, 13

CLOUD SAVVY

What Plugins are Out There?

47

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

Thursday, September 26, 13

CLOUD SAVVY

DEPLOYINGTO RACKSPACE

Thursday, September 26, 13

CLOUD SAVVY 49

INSTALL THE PLUGIN

$  vagrant  plugin  install  vagrant-­‐rackspace

Thursday, September 26, 13

CLOUD SAVVY 50

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

GET THE BOX

Thursday, September 26, 13

CLOUD SAVVY 51

http://tinyurl.com/vagrantfiles

COPY & PASTE!

Thursday, September 26, 13

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

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

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

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

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

CLOUD SAVVY 57

START IT UP

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

Thursday, September 26, 13

CLOUD SAVVY 58

Thursday, September 26, 13

CLOUD SAVVY 59

TURN IT OFF

$  vagrant  ssh$  vagrant  destroy

Thursday, September 26, 13

CLOUD SAVVY

VAGRANT AND CHEFUsing Config Management

with Vagrant

Thursday, September 26, 13

CLOUD SAVVY

CHEF VAGRANT PLUGINS

61

Thursday, September 26, 13

CLOUD SAVVY

CHEF VAGRANT PLUGINS

61

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

Thursday, September 26, 13

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

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

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

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

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

CLOUD SAVVY 66

Thursday, September 26, 13

CLOUD SAVVY 67

http://www.vagrantbox.es/

CUSTOM BOXES

Thursday, September 26, 13

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

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

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

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

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

CLOUD SAVVY

THANKYOU!

Thursday, September 26, 13

Recommended