本节书摘来自异步社区《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节。