Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rackspace Hack Night - Vagrant & Packer

Marc Cluet
November 25, 2013

Rackspace Hack Night - Vagrant & Packer

Marc Cluet

November 25, 2013
Tweet

More Decks by Marc Cluet

Other Decks in Technology

Transcript

  1. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK So… the problem Have a dev

    portable platform! that is the *SAME* everywhere
  2. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Vagrant! You have a base Box

    VM Attach to chef or Puppet! Add some script sprinkles or something else
  3. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Base Box Where can I run

    this Base Box? VirtualBox! VMWare Fusion! VMWare Workstation
  4. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Base Box Where can I run

    this Base Box? Rackspace Cloud! Amazon! OpenStack
  5. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Base Box As simple as 1…2…3…

    vagrant  box  add  $title  $BOX_URL   vagrant  init  $title   vagrant  up
  6. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Vagrantfile Vagrant.configure("2")  do  |config|    

         config.vm.box  =  "precise64"          config.vm.box_url  =  "http://files.vagrantup.com/precise64.box"          config.vm.network  :private_network,  ip:  "192.168.33.10"          config.vm.synced_folder  "../data",  "/vagrant_data"          config.vm.provider  :virtualbox  do  |vb|                  vb.customize  ["modifyvm",  :id,  "-­‐-­‐memory",  "1024"]          end   end   !
  7. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Vagrantfile Vagrant.configure("2")  do  |config|    

         config.vm.box  =  "precise64"          config.vm.box_url  =  "http://files.vagrantup.com/precise64.box"          config.vm.network  :private_network,  ip:  "192.168.33.10"          config.vm.provision  :puppet  do  |puppet|                  puppet.manifests_path  =  "manifests"                  puppet.manifest_file    =  "init.pp"          end     end   ! !
  8. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Taking this to 11! Vagrant.configure("2")  do

     |config|      config.vm.provision  "shell",  inline:  "echo  Hello"      config.vm.define  "web"  do  |web|          web.vm.box  =  "apache"      end      config.vm.define  "db"  do  |db|          db.vm.box  =  "mysql"      end   end   ! !
  9. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Packer {      "builders":  [{

             "type":  "amazon-­‐ebs",          "access_key":  "YOUR  KEY  HERE",          "secret_key":  "YOUR  SECRET  KEY  HERE",          "region":  "us-­‐east-­‐1",          "source_ami":  "ami-­‐de0d9eb7",          "instance_type":  "t1.micro",          "ssh_username":  "ubuntu",          "ami_name":  "packer-­‐example  {{timestamp}}"      }]   }  
  10. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Packer $  packer  build  example.json  

    ==>  amazon-­‐ebs:  amazon-­‐ebs  output  will  be  in  this  color.   ==>  amazon-­‐ebs:  Creating  temporary  keypair  for  this  instance...   ==>  amazon-­‐ebs:  Creating  temporary  security  group  for  this  instance...   ==>  amazon-­‐ebs:  Authorizing  SSH  access  on  the  temporary  security  group...   ==>  amazon-­‐ebs:  Launching  a  source  AWS  instance...   ==>  amazon-­‐ebs:  Waiting  for  instance  to  become  ready...   ==>  amazon-­‐ebs:  Connecting  to  the  instance  via  SSH...   ==>  amazon-­‐ebs:  Stopping  the  source  instance...   ==>  amazon-­‐ebs:  Waiting  for  the  instance  to  stop...   ==>  amazon-­‐ebs:  Creating  the  AMI:  packer-­‐example  1371856345   ==>  amazon-­‐ebs:  AMI:  ami-­‐19601070   ==>  amazon-­‐ebs:  Waiting  for  AMI  to  become  ready...   ==>  amazon-­‐ebs:  Terminating  the  source  AWS  instance...   ==>  amazon-­‐ebs:  Deleting  temporary  security  group...   ==>  amazon-­‐ebs:  Deleting  temporary  keypair...   ==>  amazon-­‐ebs:  Build  finished.   ! ==>  Builds  finished.  The  artifacts  of  successful  builds  are:   -­‐-­‐>  amazon-­‐ebs:  AMIs  were  created:   ! us-­‐east-­‐1:  ami-­‐19601070  
  11. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Packer Deploy to more than one!

    provider at the same time! using the “builders” array
  12. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Packer $  packer  build  example.json  

    ==>  amazon-­‐ebs:  amazon-­‐ebs  output  will  be  in  this  color.   ==>  digitalocean:  digitalocean  output  will  be  in  this  color.   ! ==>  digitalocean:  Creating  temporary  ssh  key  for  droplet...   ==>  amazon-­‐ebs:  Creating  temporary  keypair  for  this  instance...   ==>  amazon-­‐ebs:  Creating  temporary  security  group  for  this  instance...   ==>  digitalocean:  Creating  droplet...   ==>  amazon-­‐ebs:  Authorizing  SSH  access  on  the  temporary  security  group...   ==>  amazon-­‐ebs:  Launching  a  source  AWS  instance...   ==>  digitalocean:  Waiting  for  droplet  to  become  active...   ==>  amazon-­‐ebs:  Waiting  for  instance  to  become  ready...   ==>  digitalocean:  Connecting  to  the  droplet  via  SSH...   ==>  amazon-­‐ebs:  Connecting  to  the  instance  via  SSH...   ...   ==>  Builds  finished.  The  artifacts  of  successful  builds  are:   -­‐-­‐>  amazon-­‐ebs:  AMIs  were  created:   ! us-­‐east-­‐1:  ami-­‐376d1d5e   -­‐-­‐>  digitalocean:  A  snapshot  was  created:  packer-­‐1371870364  
  13. RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK Packer {      "builders":  [...],

      !    "provisioners":  [...],   !    "post-­‐processors":  ["vagrant"]   }
  14. !39 RACKSPACE® HOSTING | © RACKSPACE US, INC. | RACKSPACE®

    AND FANATICAL SUPPORT® ARE SERVICE MARKS OF RACKSPACE US, INC. REGISTERED IN THE UNITED STATES AND OTHER COUNTRIES. | WWW.RACKSPACE.CO.UK RACKSPACE® HOSTING | 5 MILLINGTON ROAD | HAYES, UNITED KINGDOM UB3 4AZ UK SALES: +44 (0)20 8712 6507 | UK SUPPORT: 0800 988 0300 | WWW.RACKSPACE.CO.UK