TODO: vagrant rdp && vagrant ps to connect to VM

Installing

 gem install vagrant-windows

Building a Base Box

All Windows Machines

-Enable WinRM

   winrm quickconfig -q
   winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
   winrm set winrm/config @{MaxTimeoutms="1800000"}
   winrm set winrm/config/service @{AllowUnencrypted="true"}
   winrm set winrm/config/service/auth @{Basic="true"}
  • Create a vagrant user

    • For things to work out of the box, username and password should both be vagrant
  • Turn off UAC (Msconfig)

  • Disable complex passwords

Servers

The Vagrant File

Add the following to your Vagrantfile

  config.vm.guest = :windows

  config.vm.forward_port 3389, 3390, :name => "rdp", :auto => true
  config.vm.forward_port 5985, 5985, :name => "winrm", :auto => true

Example:

Vagrant::Config.run do |config|

  #The following timeout configuration is option, however if have
  #any large remote_file resources in your chef recipes, you may
  #experience timeouts (reported as 500 responses)
  config.winrm.timeout = 1800     #Set WinRM Timeout in seconds (Default 30)

  # Configure base box parameters
  config.vm.box = "windows2008r2"
  config.vm.box_url = "./windows-2008-r2.box"
  config.vm.guest = :windows

  config.vm.forward_port 3389, 3390, :name => "rdp", :auto => true
  config.vm.forward_port 5985, 5985, :name => "winrm", :auto => true

  config.vm.provision :chef_solo do |chef|
    chef.add_recipe("your::recipe")
  end

end

What Works?

  • vagrant up|hault|reload|provision
  • Chef Vagrant Provisioner
  • Puppet standalone provisioning

What has not been tested

  • Everything Else!!!
  • Shell provisioning
    • Shell should work, though I have not vetted it yet.

What does not work

  • Complex networking setups - Fixed in 0.0.3
    • Note that I have not tested the Virtual Box 4.0 Driver, all should work. Can someone please confirm?

What Can I do to help?

  1. Contribute Code (See Below)
  2. Test Various Scenarios and file bugs for things that dont work

Contributing

  1. Fork it.
  2. Create a branch (git checkout -b my_feature_branch)
  3. Commit your changes (git commit -am "Added a sweet feature")
  4. Push to the branch (git push origin my_feature_branch)
  5. Create a pull requst from your branch into master (Please be sure to provide enough detail for us to cipher what this change is doing)

References and Shout Outs

Changelog

0.1.1 - Remove extra debug information from command output. 0.1.2 - added virtual box 4.2 support 0.1.3 - added puppet provisioner