Packer plugin to build Vagrant catalogs


I wrote a plugin for Hashicorp’s Packer that automatically updates a Vagrant catalog when Packer finishes.

It’s no longer under active development.

This was the first concrete project I built in Go, and I found I loved it.

I learned that I really appreciate opinionated languages and toolsets, because it means I don’t have to have the opinion myself. If I’m writing in C or JavaScript, I have to care about spaces or tabs, indentation lengths, 18 different brace placement styles, etc. But in Go, I can just be zen.


At the time, I was working in a mostly Windows shop. I made heavy use of disposable virtual machines for testing.

Windows made this difficult, because it has a licensing requirement. You could make Vagrant images with a trial version of Windows, but they expire after 90 days.

What I really wanted was to automatically build new Vagrant images. I did this with Packer. But Packer could only manage versions of images on a now-defunct Hashicorp service called “Atlas”; it could not manage versions locally. It could only copy the new image over the old one. Vagrant, though, supported a JSON catalog that understood versions.

So I wrote a Packer plugin to create and update a Vagrant catalog. I used it a bunch in my now-defunct wintriallab repo.

I called it Caryatid because

An Atlas is “a support sculpted in the form of a man”; a Caryatid is such a support in the form of a woman.

Well, I thought it was clever.