ChefDK for Windows: Progress Update

Hi Chefs,

I’d like to give you a quick update on our progress towards shipping a Windows build of ChefDK. I know that with the dependency solver changes in Berkshelf 3, it can be a struggle to get berks running on Windows so we’re working to get you a build as soon as we can.

Here’s an overview of the things we’re working on to get ChefDK for Windows ready to ship:

Update Omnibus Build Definitions

The first step is to actually get the thing to build using our Omnibus
build tool. The good news here is that we have a working build, and are
now just cleaning up our patches to make them suitable to merge. The
relevant pull requests are:

Add/Fix Windows Support In Build Tools

ChefDK uses Appbundler to create the executables for embedded applications. Appbundler provides a performance boost over regular Rubygems executables and locks dependencies to known good versions while still allowing plugins to be loaded. On Windows, Ruby executables need to be wrapped in small batch scripts in order to be run directly on the command line. We’ve added support for batch script generation in pull request #3

Update Chef for Ruby 2.0 on Windows

The latest Ruby versions include some performance improvements for Windows and Ruby 1.9.3 end-of-life is just around the corner, so we want to ship the newest Ruby available with ChefDK. We’ve found two issues so far when running Chef on Ruby 2.0 on Windows. The first was a simple dependency update to the win32-api gem which we have already merged. Once that was fixed, we found that the ruby-wmi gem was crashing Ruby when running the tests. We don’t use many of ruby-wmi’s features, so we’re investigating accessing Win32OLE directly as a way to workaround the issue. We’re currently testing the following patches to see if they resolve this problem: Chef PR #1405 (so far so good!).

Update Omnibus to Better Support MSI Creation

To create the MSI with the right images, text, etc. we need to rewrite our MSI creation code, which is currently hard-coded to building chef-client. The relevant pull request is Omnibus Ruby #149.

Add Windows Machines to the Build Cluster

This is ongoing. The cookbooks we use to configure our internal CI infrastructure are private, so I unfortunately cannot share any code with you.


Once we’ve fixed the above issues, we’ll begin publishing nightly builds of ChefDK for Windows. From there, we’ll do some manual QA to try to catch any bugs that could have slipped past our automated test suites.


We’re optimistic that we’ll be able to get a release out for you soon, but like any complex software project, there’s a risk that we could uncover more bugs as we get further along and continue to test. We’ll keep you updated on our progress and we’ll certainly be asking for your help with testing as soon as we have the nightly builds out. Stay tuned!

Dan DeLeo