《Puppet实战手册》——2.8 编写功能强大的条件语句

    xiaoxiao2024-04-15  121

    本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.8节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

    2.8 编写功能强大的条件语句

    Puppet的if语句允许用户基于变量或表达式的值来调整清单。有了它,用户可以根据相关节点的某些fact(如操作系统或内存大小)应用(生效)不同的资源或参数值。

    此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。

    操作步骤下面是一个非常有用的关于条件语句的例子。

    在清单中添加下面的代码:

    if $::operatingsystem == 'Ubuntu' {  notify { 'Running on Ubuntu': } } else {  notify { 'Non-Ubuntu system detected. Please upgrade   to Ubuntu immediately.': } }

    工作原理Puppet视if关键字后的一切内容为一个表达式,并且为它求值。如果表达式的值为true,Puppe就会执行大括号内的代码。

    当然,也可以添加一个else分支。如果表达式计算为false,则else分支将被执行。

    更多参考下面是使用if语句的一些技巧。

    elsif分支也可以使用elsif关键字来做更多的判断。例如,下面的代码:

    if $::operatingsystem == 'Ubuntu' {  notify { 'Running on Ubuntu': } } elsif $::operatingsystem == 'Debian' {  notify { 'Close enough...': } } else {  notify { 'Non-Ubuntu system detected. Please upgrade to Ubuntu   immediately.': } }

    比较可以使用==语法来检查两个值是否相等,如下例所示:

    if $::operatingsystem == 'Ubuntu' {  … }

    或者,也可以使用!=来检查它们是否不相等:

    if $::operatingsystem != 'CentOS' { }

    也可以使用<和>来比较数字:

    if $::uptime_days > 365 {  notify { 'Time to upgrade your kernel!': } }

    可以使用<=或>=来检查是否一个值大于(或小于)或等于另一个值。

    if $::lsbmajdistrelease <= 12 { }

    组合表达式可以把前面描述的各种简单的表达式,使用and、or或not组合在一起成为更加复杂的逻辑表达式。

    if ($::uptime_days > 365) and ($::operatingsystem == 'Ubuntu') { } if ($role == 'webserver') and ( ($datacenter == 'A') or ($datacenter == 'B') ) { }

    延伸阅读参见2.11节。参见2.10节。

    相关资源:Puppet实战.pdf 中文完整版
    最新回复(0)