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.