Puppet4.xではじめるサーバ設定自動化の、条件分岐についてです。
全体的な目次は、ここを参照してください。
主にCentOS 7を例に紹介しているので、その他OSについては読み替えてください。
Puppetでの条件分岐
Puppetでの条件分岐は、次の4つがあります。
- if
- unless
- case
- selectors
if、unless、caseは、他のプログラミング言語と同様です。selectorsは、条件ごとに設定する値を変えたい場合に使います。caseとの違いは、caseは条件を満たす場合の処理を書けますが、selectorsは条件を満たす場合の値のみ書けます。
OSごとにパッケージ名が異なる、httpdとapache2を例に紹介します。
なお、$operatingsystemは、OSの種類を表す変数です。
if
- OSがCentOSの場合、httpdインストール。
- OSがCentOS以外でUbuntuの場合、apache2インストール。
- その他、ワーニング。
if $operatingsystem == "CentOS" {
package { "httpd" :
ensure => "installed",
}
}
elsif $operatingsystem == "Ubuntu" {
package { "apache2" :
ensure => "installed",
}
}
else {
warning('This manifest supports only CentOS and Ubuntu.')
}
unless
unlessは条件を満たさない場合です。
参考資料からの引用で、システムメモリサイズが、1073741824バイトより大きくない場合、maxclientを500にする例です。
unless $facts['memory']['system']['total_bytes'] > 1073741824 {
$maxclient = 500
}
$facts['memory']['system']['total_bytes']は、システムメモリサイズ(byte)です。
なお、unlessの場合、elseは使えますが、elsifは使えません。
case
- OSがCentOSの場合、httpdインストール。
- OSがUbuntuの場合、apache2インストール。
- その他、ワーニング。
case $operatingsystem {
"CentOS": {
package { "httpd" :
ensure => "installed",
}
}
"Ubuntu": {
package { "apache2" :
ensure => "installed",
}
}
default: {
warning('This manifest supports only CentOS and Ubuntu.')
}
}
selectors
- OSがCentOSの場合、httpdインストール。
- OSがUbuntuの場合、apache2インストール。
$httpd = $operatingsystem ? {
"CentOS" => "httpd",
"Ubuntu" => "apache2",
}
package { "httpd" :
name => $httpd,
ensure => "installed",
}
【おまけ】比較演算子in
条件分岐ではないですが、複数候補に一致する場合などにはin演算子が便利です。
Pythonぽい比較です(Rubyでいうinclude?メソッド)。
if $operatingsystem in ["CentOS", "RedHat"] {
package { "httpd" :
ensure => "installed",
}
}
参考
条件分岐については、下記参照です。
条件に使える比較演算子などは、下記参照です。