We are evaluating two tools for testing Puppet modules. One is rspec-puppet, the other is cucumber-puppet. The hope is to get standards for testing into the module forge and hook it into a CI framework such as Hudson or Jenkins. This will enable Puppet Forge users to immediately evaluate a module in terms of its test failure rate, and enable developers to see the intended behavior of the module. The higher level goal is to open a discussion among developers on the Puppet Forge about the intended behavior of modules, what they need to do, and what they should and should not be doing.
Another huge goal of this project is to develop a way to test Puppet without running puppet apply and looking to see what worked or didn’t. Both of the tools under consideration allow the developer/sysadmin to test the modules against Puppet to see if they compile (equivalent to a puppet apply —noop) and then hold the catalog object so that we can see if the catalog is formed as intended.
Cucumber-puppet’s advantages are that it is a more mature codebase, it is faster to start with, and it uses the human-readable gherkin language for its tests. One disadvantage for cucumber-puppet is that it is difficult to contain all of the tests within a cucumber feature. Many of the tests we have written in cucumber-puppet involved creating dummy nodes in a site.pp to write cucumber tests against. Cucumber-puppet also doesn’t seem to be compatible with Puppet 2.7.x, at least not yet. It is however compatible with the 0.25.x branch which is a benefit for legacy puppet users and administrators.
Rspec-puppet’s advantages are that it is brand new and has seen a flurry of development since its inception. Puppet already uses a lot of rspec to do testing, and, since the gherkin layer is removed, it can be coded entirely in Ruby. Also, in contrast to cucumber-puppet, rspec-puppet tests can be entirely contained within the spec test file. And for compatibility, rspec-puppet works well with the Puppet 2.6.x/2.7.x branches, but does not work with the 0.25.x branch. One note for testing both 2.6.x and 2.7.x is that 2.6.x will raise Puppet::Error exceptions for catalog compilation failures while the 2.7.x branch raises general Runtime exceptions.
Indeed uses puppet in testing, integration, staging and production environments. Puppet has enabled Indeed Operations to scale to hundreds of servers across multiple datacenters with differing infrastructure while maintaining configuration consistency in testing, integration, staging and production environments. Our new Vice President of Marketing, Scott Johnston, was recently poking around on Indeed.com and discovered the […]
With Puppet we build infrastructures, piece by piece, manifest after manifest. We control how nodes are configured, what services they provide, how they are checked. We manage where web applications stay and sometimes how they are built, tested, and deployed. Puppet has a lot of knowledge about our systems. Every catalog we receive is an […]
After I wrote an article for the OpenBSD Journal about my job at M:tier explaining how we were deploying OpenBSD in several production setups, I’ve been asked several times to extend the part regarding our usage of Puppet. Most of our solution management is handled by Puppet, from unattended installation and configuration to daily maintenance […]
Looking for more device management? Read about it here: Managing F5 BIG-IP Network Devices with Puppet Puppet 2.7.0 was recently released. This version, like every new Puppet release, brings numerous new features (and not counting bug fixes), including one I’m very proud of: Network Device Management. This all started during the Puppet Camp Europe 2010 […]
Since starting at Puppet Labs four months ago, many friends have asked me why. “Puppet is a systems tool, right? Isn’t it all command line? Where’s the user experience? Don’t you usually work on the web? Are you designing their website?” To the contrary, I’m happy to say that for the first time since the […]
For about three years now (since basically 15 minutes after Pulling Strings with Puppet was released) James has been asked, “When is the 2nd edition coming out?” This is quickly followed by, “Why is the book so short?” And then the question one never gets sick of: “Why isn’t there an index?” Well y’all can […]
This follows on from my previous post on Faces and continues the explanation of what Faces are and how they work. Last time I talked about Facades, the generic mechanisms for accessing Faces. The fundamental components here are: Facades – the ways you can interact with your Faces and Actions. Faces – these represent a […]
This week we released Puppet 2.6.8, the latest maintenance release in our 2.6 series. This release addresses several issues users have had with previous Puppet 2.6 releases, as well as adding in a couple of nifty new features: (#2311) The deprecated darwinports provider has been replaced by a new MacPorts provider. This allows Puppet users […]
As most of you realize by now, Puppet 2.7 was released under the Apache 2.0 license instead of under the GPL, and Facter has already been released under the Apache license. My goal in this post is to explain why, and what effects you might expect to see as a result. We’ve been talking about […]
Puppet Faces is one of the features I am proudest to deliver in the new Puppet 2.7.0 release. (Well, the RC series heading toward release, anyway.) They represent a new API for creating subcommands, as well as extending existing subcommands to add extra capabilities‚ without having to modify the supplied source code. In this post, […]
Version 1.1 of Puppet Dashboard was recently released, fixing a number of bugs and broadening the feature set. If you’re already a Dashboard user, you’ll certainly find this a worthwhile upgrade. If you’re not, then now is a great time to check it out. Here’s why: Inventory service integration. Working in beautiful harmony with the […]
We are excited to be a program development sponsor for The Ada Initiative, a non-profit committed to increasing the involvement and involvement opportunities of women in open technology and culture. The cause is near and dear to our heart, as CEO Luke sums up: The open source community needs to recruit and retain more women. […]
Mac Inventory/Warranty Lookups with MCollective Maintaining an accurate inventory of all of your machines is an oft-neglected evil for IT staff. Knowing when a machine was purchased and, more importantly, if it’s still under warranty is often overlooked until something malfunctions. Most vendors provide a way to access the machine’s serial number programmatically, and many […]
One of the most common questions from the Puppet community is, “What’s the best way to write a module/class/resource? What style does Puppet Labs use when they write manifests?” So internally we all got together and decided to write the definitive Puppet Style Guide. To do this we gathered the experience from the Professional Services, Operations, and […]
The needs and benefits of configuration management software (CMS) to manage environments have long been recognized, even before the explosion of system growth due to virtualization and cloud computing. “Towards a High-Level Machine Configuration System” was not the first paper written about configuration management, but it underlines the need for configuration management software existed as […]
We are pleased to announce the release 1.1.3 of The Marionette Collective. This release is part of the development series and should be used by early adopters. MCollective 1.1.3 offers a major new feature and numerous bug fixes: Enhancements: A new feature called Subcollectives was introduced. An exec wrapper was added to assist in safely […]
If you’re reading this, odds are good that you learned how to use Puppet at some point. So if you took a newbie sysadmin under your wing tomorrow, how would you suggest they learn Puppet? Or, to put yourself in the newbie’s shoes: if you wanted to learn Puppet, where would you look first? There […]