在 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,}新聞熱點
疑難解答