Vagrant

lightweight,
 reproducible,
 & portable
 development environments

Memphis  Python User Group
02/17/2014

Who is this guy!?

Joe Ferguson

Professionally

  • Web Developer at RocketFuel

  • PHP / LAMP Focused


Semi Professional

  • Co-Organizer for MemphisPHP.org

  • MidsouthMakers - Hackerspace Leader

  • HACKmemphis.com Organizer

What is vagrant?

  • Tool for building complete dev environments

  • Easy to use workflow

  • Focus on automation

  • Lowers Dev Environment setup time

  • Increase Dev / Live Environment Parity

Terminology


Vagrant configures a Provider

  • Virtualbox

  • VMWare

  • AWS

Provisioners Configure the VM

  • Puppet

  • Chef

  • Salt

  • Shell

Vagrant use case

Spin up a server for:
  • Test versions of your web app
  • Test group policy permissions
  • Test system updates before live

Spin up a desktop for:
  • Test versions of your system app
  • Isolate your development tools
  • Test system updates before live

Provisioning



How do you currently configure your environment?


Stop manually installing apps and configuring settings!

Which provisioner?


Chef - Cookbook based


Puppet - Manifest based


Shell (Batch Files) - Who doesn't love the shell?!

Vagrant philosophies


Why manually do something when your can let your provisioner do it for you?

Vagrant boxen are insecure, defaults to vagrant/vagrant

Vagrant uses Windows Remote Management tool (WinRM) to interact with your box

User Access Control (UAC) is a bad idea*

You will also need vagrant-windows plugin

User Access control*


In general, UAC is a bad idea because it likes to interfere with vagrants handling of your machine.**

If you're wanting to test UAC, be weary of any odd things may be a result of vagrant and UAC being enabled**


** I am not a windows guy, Brian made me do this. Feel free to correct me!


Go download a vagrant box!


OH WAIT!

You all have to deal with licensing...

Let's make a vagrant box!

First we have to create a Virtual Machine...
  • install a base windows system
  • install guest additions
  • create vagrant user as admin
  • turn off UAC
  • disable complex passwords*
  • disable shutdown tracker
  • disable server manager starting
  • Enable and configure WinRM
  • WinRM 1.1 needs more tweaks

Save the VM as a box

c:\>vagrant package --base VM-Name --output MyFirstBox.box

This will:
  • halt the VM
  • export the VM
  • compress the VM

What you will have is "MyFirstBox.box"

Add the new Vagrant box

Now that we have MyFirstBox.box, we need to add it to vagrant's available boxes.

c:\>vagrant box add MyFirstBox MyFirstBox.box

This will import the box into vagrant and when this process completes:
c:\>vagrant box list

You should see "MyFirstBox" in the list of available boxes

Creating the vagrant file


Create a folder to hold our Vagrant Project

C:\>mkdir VagrantRocks
C:\> cd VagrantRocks
C:\>vagrant init

This will put a Vagrantfile in VagrantRocks/

Edit Vagrant file based on the sample found here:

Tweaking the Vagrant File


You will likely need to change the forwarded port 3389 if you have Remote Desktop enabled.

Feel free to use my sample as a guide:

The Vagrant File

Vagrant.configure("2") do |config|
  # Configure base box parameters
  config.vm.box = "MyFirstBox"
  # config.vm.box_url = "./vagrant-windows7x64box"
  config.vm.guest = :windows
 
  config.vm.provider :virtualbox do |vb|
     vb.gui = true
  end
  config.windows.set_work_network = "1"
  config.winrm.host = "localhost"
  # Port forward WinRM and RDP
  config.vm.network :forwarded_port, guest: 3389, host: 3389
  config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true
end

Links

Vagrant

By Joe Ferguson

Vagrant

Customized version of my Vagrant talk given to the Memphis, TN .Net User Group

  • 1,653