Puppet's if
statement allows you to change the manifest behavior based on the value of a variable or an expression. With it, you can apply different resources or parameter values depending on certain facts about the node; for example, the operating system or the memory size.
You can also set variables within the manifest, which can change the behavior of included classes. For example, nodes in data center A might need to use different DNS servers than nodes in data center B, or you might need to include one set of classes for an Ubuntu system, and a different set for other systems.
Here's an example of a useful conditional statement. Add the following code to your manifest:
if $::timezone == 'UTC' { notify { 'Universal Time Coordinated':} } else { notify { "$::timezone is not UTC": } }
Puppet treats whatever follows an if keyword as an expression and evaluates it. If the expression evaluates to true, Puppet will execute the code within the curly braces.
Optionally, you can add an else branch, which will be executed if the expression evaluates to false.
Lets take a look at some more tips on using if
statements.
You can add further tests using the elsif
keyword, as follows:
if $::timezone == 'UTC' { notify { 'Universal Time Coordinated': } } elsif $::timezone == 'GMT' { notify { 'Greenwich Mean Time': } } else { notify { "$::timezone is not UTC": } }
You can check whether two values are equal using the ==
syntax, as in our example:
if $::timezone == 'UTC' { ... }
Alternatively, you can check whether they are not equal using !=
:
if $::timezone != 'UTC' { ... }
You can also compare numeric values using < and >
:
if $::uptime_days > 365 { notify { 'Time to upgrade your kernel!': } }
To test whether a value is greater (or less) than or equal to another value, use <=
or >=
:
if $::mtu_eth0 <= 1500 { notify {"Not Jumbo Frames": } }