- Puppet 3 Cookbook
- John Arundel
- 385字
- 2021-04-09 23:52:28
Writing powerful conditional statements
Puppet's if
statement allows you to change the manifest 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.
How to do it…
Here's an example of a useful conditional statement:
- Add the following code to your manifest:
if $::operatingsystem == 'Ubuntu' { notify { 'Running on Ubuntu': } } else { notify { 'Non-Ubuntu system detected. Please upgrade to Ubuntu immediately.': } }
How it works…
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
.
There's more…
Here are some more tips on using if
statements.
You can add further tests using the elsif
keyword, as follows:
if $::operatingsystem == 'Ubuntu' { notify { 'Running on Ubuntu': } } elsif $::operatingsystem == 'Debian' { notify { 'Close enough...': } } else { notify { 'Non-Ubuntu system detected. Please upgrade to Ubuntu immediately.': } }
You can check if two values are equal using the ==
syntax, as in our example:
if $::operatingsystem == 'Ubuntu' { … }
Or, you can check if they are not equal using !=
:
if $::operatingsystem != 'CentOS' { }
You can also compare numeric values using < and >
:
if $::uptime_days > 365 { notify { 'Time to upgrade your kernel!': } }
To test if a value is greater (or less) than or equal to another value, use <=
or >=
:
if $::lsbmajdistrelease <= 12 { }
You can put together the kind of simple expressions described previously into more complex logical expressions, using and
, or
, and not
:
if ($::uptime_days > 365) and ($::operatingsystem == 'Ubuntu') { } if ($role == 'webserver') and ( ($datacenter == 'A') or ($datacenter == 'B') ) { }
See also
- Using the in operator, in this chapter
- Using selectors and case statements, in this chapter
- Word論文排版之道
- 中文版Premiere影視編輯課堂實錄
- 中文版Premiere Pro CC入門教程
- CakePHP 1.3 Application Development Cookbook
- ADempiere 3.6 Cookbook
- AutoCAD入門教程全掌握
- Premiere Pro短視頻剪輯零基礎一本通
- CAXA 實體設計2013案例課堂
- WordPress MU 2.8: Beginner's Guide
- Maya Paint Effect 特效應用手冊
- Altium Designer18電路板設計入門與提高實戰
- AI賦能Rhino產品造型創意設計(視頻教學版)
- SAP Business ONE Implementation
- Photoshop CC 2018基礎與實戰教程
- PowerPoint 2016從入門到精通