I am evaluating Puppet as a potential replacement for an in-house software configuration and distribution system. I am looking for advice on whether Puppet can satisfy certain requirements for performing node-specific, arbitrary and sometimes ad-hoc software configuration changes.

Our current system provides a CMDB that tracks individual servers, basic facts about them (os, ip addresses, h/w platform, etc.) as well as all software components that are installed. This ranges from internally developed software applications to OS patches, utilities, etc. The current system also provides a software distribution/installation capability based on sftp/ssh and runs scripts on the endpoint to execute the installers.

A key requirement (which our current system provides) is the ability to define arbitrary software configuration values for any given component. There are pre-defined configuration parameters associated with each tracked component, some of which are common to all servers, some of which may be overridded for a particular server, and some of which must be overridden for every server. In our current system, we configure these parameters before pushing the software distribution packages out to the endpoints. There are scripts in these distribution packages which use the configuration parameters to generate configuration files that are pushed out as part of the distribution and installation.

I've read lots of documentation about Puppet in the last few days, but it still is not obvious to me whether Puppet can provide this key capability. The best I can determine is that it certainly would require writing custom facts to use as configuration parameters, but beyond that, I haven't been able to determine whether I could configure specific values for these facts and cause those values to be configured on the endpoint.

Just looking at the Inventory section of a node in the PE Console, this is similar to what I am looking for, but I need the ability to organize it hierarchically (related config parameters or "facts" grouped by category/component/etc.), as well as the ability to specify default values and/or overridden values for any of these custom facts.

At this point I'm not sure whether Puppet can provide this capability, or if it can how I would go about setting it up. I've seen references to Hiera, but little detailed information about it or example use cases, so I don't know if that is of any use to my situation.

FWIW, this solution would initially be used to manage only Windows servers, but would eventually be extended to Linux boxes as well.

Thanks for any advice you can offer.


Yes, absolutely. This won't necessarily need to involve custom facts or the fact inventory in any way, though it can if you want it to.

If you're interested in setting the exceptions up in the node declaration (centrally on the master), then take a look at parameterized classes. This will allow you to define settings for the class as you include it into the node.

Alternatively, if you set up custom facts on the nodes, you can simply utilize those facts in your class definitions to make any changes needed.

Let me know if that makes sense, or if you need more specific examples - the places where the customization is available may be different from your current customization workflow, so make sure it'll work the way you need it to before you dive in to implementation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.