You can use facter variables to control which for example template you
will use depending on the major version of OS.
Similar issue can be observed with versions of software - for example if
you try to manage Zabbix, there are versions 1.8, 2.0, 2.2 and soon
there will be 2.4. With Cobbler for example, there is 2.2 and 2.4.
The way I do it is to test new version in a dev environement and rewrite
modules/templates with version-aware configs as needed... It's an
unpleasant task, but on the upside it has to be done only once.