官术网_书友最值得收藏!

  • 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:

  1. 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.

Elsif branches

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.': }
}

Comparisons

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 {
     
}

Combining expressions

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
主站蜘蛛池模板: 厦门市| 西盟| 澄城县| 西城区| 许昌市| 唐山市| 枞阳县| 白朗县| 上杭县| 恩施市| 永德县| 蚌埠市| 始兴县| 灌南县| 南京市| 宁阳县| 全州县| 涿鹿县| 海门市| 抚松县| 瓦房店市| 始兴县| 年辖:市辖区| 南皮县| 呼和浩特市| 武城县| 新野县| 淮阳县| 屏边| 历史| 彝良县| 岳池县| 陵川县| 镇安县| 揭东县| 寻甸| 井冈山市| 甘南县| 定日县| 桓台县| 客服|