在 puppet 中, 有下面几种常见的比较方法, 参考下面表格
表达式 | 作用 | 例子 |
---|---|---|
! | 非 | if ( ! $myvar ) |
and | 与 | if ( $myvar > 10 and $osfamily == ‘RedHat’ ) |
or | 或 | if ( $myvar > 10 or $osfamily == ‘RedHat’ ) |
in | 包含 | if ( $var in $array ) |
* 与 / | 数学运算 | 3 * 4 / 2 |
- 与 + | 数学运算 | 4 + 3 - 5 |
<< 与 >> | 左右位移 | NULL |
== 与 != | 相等不等比较 | if ( $osfamily == ‘RedHat’ ) |
>= <= > < | 大小比较 | if ( $myvar > 10 ) |
=~ | 正则匹配 | if ( $::Operatingsystemrelease =~ /^5/ ) |
puppet 支持“if””unless””case” “selectors” 等语法
参考 if 判断语法
1. 直接判断变量, 2. 判断 true, false3. 判断函数返回结果4. 可以结合 and, or 使用5. 配合正则使用范例
if $is_virtual == 'true' { warning('Tried to include class ntp on virtual machine; this node may be misclassified.')}elsif $operatingsystem == 'Darwin' { warning('This NTP module does not yet work on our Mac laptops.')}else { include ntp}参考正则判断语法
if $hostname =~ /^www(/d+)/./ { notice("Welcome to web server number $1")}参考 unless 语法
1. 直接判断变量, 2. 判断 true, false3. 判断函数返回结果4. 不支持 and, or 使用5. 可以配合正则使用6. unless 与 if 语法类似, 但没有 else, elsif 等多重判断7. 只有当判断为 false 时候才会执行进行代码块中内容8. 不匹配任何条件, 则执行 default 部分代码范例:
unless $memorysize > 1024 { $maxclient = 500}参考 case 语法
case $operatingsystem { 'Solaris': { include role::solaris } 'RedHat', 'CentOS': { include role::redhat } /^(Debian|Ubuntu)$/:{ include role::debian } default: { include role::generic }}参考 selector 语法
1. 类似 case 语法, 但只会返回结果, 而没有代码直接执行功能2. selector 执行后的结果是返回值3. 返回值可以用于作为变量赋值4. 返回值可以作为资源属性5. 返回值可以作为函数参数6. 返回值可以用于资源 titile范例:
$rootgroup = $osfamily ? { 'Solaris' => 'wheel', /(Darwin|FreeBSD)/ => 'wheel', default => 'root',}file { '/etc/passwd': ensure => file, owner => 'root', group => $rootgroup,}新闻热点
疑难解答