Removing 'magic numbers' and times from your Puppet manifests
In a large Puppet code base you’ll eventually end up with a scattering of time
based ‘magic
numbers’
such as cache expiry numbers, zone file ttls and recurring job
schedules. You’ll typically find these dealt with in one of a few ways.
The easiest is to ignore it and leave a hopefully guessable literal
value (such as 3600). The other path often taken is the dreaded heavily
linked and often missed comments that start off as 86400 # seconds in a day
and over
time become 3600 # seconds in a day
.
The time_units puppet function is a proof of concept, written for a code base that suffers heavily from this, that makes these kinds of numbers more explicit and self-documenting. Once you’ve installed the module from the puppet-forge:
puppet module install deanwilson-time_units
and restarted your puppetmaster you can use it in your code with calls like these:
time_units(15, 'minutes', 'seconds') # returns 900
You can also make calls using a slightly ‘prettier’ 4 argument version.
time_units(2, 'hours', 'in', 'minutes') # returns 120
Is the added complexity of a function worth it when peer code review can ensure your code and comments are changed together? It all depends on what your manifests look like, how you review changes and how heavily you use hiera to bring values in. Hopefully you’ll never need this, but in the cases where you’re working on legacy spaghetti it’s sometimes nice to have little wins and cleanups.