Conditionals
Conditional statements should follow Puppet code guidelines.
Simple resource declarations
Avoid mixing conditionals with resource declarations. When you use conditionals for data assignment, separate conditional code from the resource declarations.
Good:
$file_mode = $facts['operatingsystem'] ? { 'debian' => '0007', 'redhat' => '0776', default => '0700', } file { '/tmp/readme.txt': ensure => file, content => "Hello World\n", mode => $file_mode, }
Bad:
file { '/tmp/readme.txt': ensure => file, content => "Hello World\n", mode => $facts['operatingsystem'] ? { 'debian' => '0777', 'redhat' => '0776', default => '0700', } }
Defaults for case statements and selectors
Case statements must have default cases. If you want the default case to be "do nothing,"
you must include it as an explicit default: {}
for clarity's sake.
Case and selector values must be enclosed in quotation marks.
Selectors should omit default selections only if you explicitly want catalog compilation to fail when no value matches.
Good:
case $facts['operatingsystem'] { 'centos': { $version = '1.2.3' } 'ubuntu': { $version = '3.2.1' } default: { fail("Module ${module_name} is not supported on ${::operatingsystem}") } }
When setting the default case, keep in mind that the default case should cause the catalog compilation to fail if the resulting behavior cannot be predicted on the platforms the module was built to be used on.
Conditional statement alignment
When using if/else statements, align in the following way:
if $something { $var = 'hour' } elsif $something_else { $var = 'minute' } else { $var = 'second' }
For more information on if/else statements, see Conditional statements and expressions.