Holistic Engineering

A random assortment of shit with sprinkles.

Chef-Workflow 0.2.0 Released

| Comments

I’m pleased to announce the next major release of Chef-Workflow, 0.2.0.

Chef-Workflow is a toolkit for unifying your infrastructure management with Chef. It aims to provide the tools you need to define your own workflow and testing needs with powerful, sensible defaults, with minimal dogma. The system is built as an “advanced tool for people with advanced needs”, giving you what you need to coordinate an operations team around a set of in-house formal practices.

It’s split into 2 major components with a unifying toolkit library.

  • Chef-Workflow Tasklib is a suite of rake tasks and supporting rake toolkit to do common things you’d need to do with a chef server. The tasks are malleable so you can compose your own method of working within your team, and bring in optional included tasks to enhance your workflow, already integrated with the system.

  • Chef-Workflow Testlib is an integration testing system that fully orchestrates a network of chef managed machines and allows you to test interactions between built systems.

All components are in our github organization, and it is strongly recommended you read the documentation on the wiki.


Version 0.2.0 brings several improvements. If you want extended detail, changelogs have been added to each of the repositories.

  • Copious documentation and an example repository for those interested in getting their feet wet.
  • State management has been rebuilt from scratch to improve reliability and minimize code complexity. If you’re using the system currently, you will want to clean your testing environment with bundle exec rake chef:clean before migrating.
  • Writing tests is now provisioner independent. Machine provisioning is fully controlled by a configure_general option called machine_provisioner, and all integration tests now inherit from MiniTest::Unit::ProvisionedTestCase. The existing classes are still there, but will disappear at some point.
  • New tasks chef:build and chef:converge allow you to create and interact with one-off machines, which are fully integrated into the state management system (clean them up with a single command, depend on them in tests, etc).
  • chef:info is a task namespace for interrogating the state database and configuration.
  • More refactors than a hackathon full of Grady Booch clones.


Unfortunately, Chef 11 support is not available yet. 0.2.0 was nearly two months in the making and Chef 11 support was not as critical when these changes were started.

Additionally, support for Chef 10.20+ is not available. It will not bundle with other dependencies, unfortunately, and that makes it impossible to use — there is no technical limitation beyond that. Similar projects are having similar issues related to conflicting dependencies, and I don’t think it’s worth the drama to detail them fully. What I will say is that I spent most of yesterday trying to resolve them before I released, and didn’t succeed.

What I can say with a high degree of confidence is that resolving both of these issues are first-class roadmap milestones for 0.3, which I don’t think will take terribly long.

Additionally, if you are looking for RHEL/CentOS support, you may need to wait a week or so, but patches supplied to Fletcher Nichol’s knife-server project (which is what we use to build chef servers) are in the pipe, and we’re shaking out any final bugs before we release it. Huge props to Fletcher and Dan Ryan for making this a reality.

The Future

Version 0.3.0 will primarily continue to build on code infrastructure and making the underpinnings even more rock solid. Chef 11 support is a priority and making provisioning lightning fast, rock solid and easily to extend is a principal goal.


Tell me what you love (or hate) about the system, documentation, etc. I really do want to hear what you have to say. Github issues works, comments here work, or you can email me.