運維自動化之puppet條件判斷(3)

puppet常用條件判斷:

1、if

2、case

3、selector


1.1 if語法:

單分支:
if CONDITION {
    statement
    ...
}
雙分支:
if CONDITION {
    statement
    ...
}
else {
    statement
    ...
}
多分支:
if CONDITION{
    statement
    ...
}
elsif CONDITION {
    statement
    ...
}
else {
    statement
    ...
}

1.2 if條件

1.2.1 變量

1.2.2 表達式,多個表達式,做邏輯運算and,or,not

1.2.3 有返回值的函數

1.3 實例:

[root@node1 桌面]# cat test1.pp
if $operatingsystem =~ /^(?i-mx:(centos|redhat))/ {
    notice("Welcome to $1 linux server")
}
[root@node1 桌面]# puppet apply test1.pp
Notice: Scope(Class[main]): Welcome to CentOS linux server
Notice: Compiled catalog for node1.wt.com in environment production in 0.04 seconds
Notice: Finished catalog run in 0.08 seconds

備註:$0引用所有匹配到的,$1匹配第一個引用到的。



2、Case Statements

類似if語句,case語句會從多個代碼塊中選擇一個分支執行,這跟其它編程語言中的case語句功能一致

case語句會接受一個控制表達式和一組case代碼塊,並執行第一個匹配到控制表達式的塊

2.1語法:

    case CONTROL_EXPRESS {
        case1,...:{statement...}
        case2,...:{statement...}
        ... ...
        default:{statement...}
}


2.2實例:

    case $ooperatingsystem{
        'Solaris':      {notice("Welcome to Solaris")}
        'RedHat','CentOS':  {notice("Welcome to RedHat OSFamily")}
        /^(Debian|Ubuntu)$/:    {notice("Welcome to $1 linux")}
        default:        {notice("Welcome, alien *_*")}
}



3.selectors

和case語句很相似,但是返回一個值,而不是執行一個代碼塊

selector只能用於期望出現直接值(plain value)的地方,這包括變量賦值、資源屬性、函數參數、資源標題、其它selector的值及表達式

selector不能用於一個已經嵌套於selector的case中,也不能用於一個已經嵌套於case的case語句中

3.1 語法:

    CONTROL_VARIABLE ?{
        case1 => value1
        case2 => value2
        ...
        default => valueN
}

3.2 實例:

$webserver = $operatingsystem ?{
    /(?i-mx:ubuntu|debian)/     => 'apache2',
    /(?i-mx:centos|redhat)/     => 'httpd',
}

3.3 條件:

   變量

   有返回值的函數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章