Puppet Works on Windows? Yes, it Does
Editor's note: This blog post was updated on March 16, 2015, to reflect the fact that Gabe had already given his talk.
I'm Gabe. I'm a member of the professional services team here at Puppet Labs. In my teaching and consulting engagements, I've seen all sorts of systems puppetized, but when I mention that some of the deployments I've worked on are in Windows-only shops, folks are frequently surprised.
Yes! It works. And on March 14, that's exactly what I'll be talking I talked about at the Cascadia IT Summit in Seattle. I hope you can make were able to make the talk — there's nothing like seeing live demos — but if you can't didn't make it in person, the slides are on GitHub.
Puppet happily manages the same basic resource types in Windows as it does on other operating systems. After all, the whole point of Puppet's Resource Abstraction Layer is that you can model your desired state in an OS-agnostic way. As long as there's a provider, Puppet can manage that resource. And there are Windows providers for all the basic types.
At the end of the day, operating systems all manage similar resources, such as files, processes, and users. It's just that on Windows, the providers for some common resources just plain have to differ, because we think about some resources differently on Windows than on other platforms. Here are links to some of the most important differences:
- User management and file permissions are fundamentally different.
- See the official documentation on the behavior of User and Group resources on Windows.
- File paths use backslashes on Windows and forward ones elsewhere.
- Take a look at the official explanation of which slash to use where.
- We tend to use individual MSIs or EXEs to manage package resources.
On the flip side, there are some resources and providers that are unique to Windows — UNIX-based systems just don't have them. I'll demo I demoed some of the important ones at my talk. Here are several Windows-specific Puppet modules, freely available on the Puppet Forge (and fully supported for Puppet Enterprise customers):
- We often need to edit the Registry to configure a system.
- Use the puppetlabs-registry module.
- We can execute object-oriented PowerShell commands and scripts.
- Try the puppetlabs-powershell module.
- We sometimes want to reboot between or after configuration changes.
- Check out the puppetlabs-reboot module.
Then I'm going to finish up I finished up with a look at some great Windows-specific modules on the Puppet Forge. There's no sense reinventing the wheel! Plenty of Windows admins aren't just puppetizing their environments — they're sharing the code that they wrote to do it. (And you should too.)
Puppetizing Windows isn't as tricky as folks seem to expect. You'll need to keep an eye on differences in the core resource types. You'll want to make full use of Windows-only features like the Registry and PowerShell. And you'll find that the Forge is a great resource for existing code, so that you don't have to go it alone.
Let's get started!
Gabe Schuyler is a professional services engineer at Puppet Labs.
- If you're a Windows admin, you might be interested in learning how to get started with command line, vim and Git (a presentation by Tiffany Longworth at Cascadia IT).
- Check out our white paper, What Windows Admins Need from Configuration Management.
- See code examples and the slides from Gabe's talk on GitHub.