The final piece of the puzzle was using Chef as my tool of choice to provision servers I spun up using vagrant. I fell in love with how robust Chef is as a solution to not only keep detailed inventory of my systems but also how well it delivered on configuration management.
One of my key reasons for picking Chef at this time was also due to the fact that it had great integration with Vagrant.
I now have the option of calling recipes directly from the vagrant configuration file, which is nothing short of just pure awesomeness. This wasn't without the (at the time) mountainous task of learning chef, but it was totally worth it.
One of the hurdles I had to over come was learning the ruby syntax. Which is what chef is based on. I also had to learn the lingo, and the various ways of doing the same thing. I quickly noticed that everyone have their own way of doing what should be relatively simple task. Trust me, there was lots of debugging errors when things didn't go just right. One of the more frustrating times was when chef would behave very weird just at the end of the run. But I stuck to it and came through on top.
Please see the chef recipe I wrote for lab purposes to build a new Windows Domain from scratch: