マクロコマンド
マクロコマンドは、テンプレートの展開を制御するコマンドです。
テンプレート内でマクロコマンドを使用すると、条件に応じてコンフィグに含める内容を選択したり、定型的な内容を繰り返し出力することができます。記述したマクロコマンドは展開結果には含まれません。
マクロコマンドの書式は次の 通りです。
#【マクロコマンド】
条件分岐(if ~ end)
#if (【評価式1】) strings 1 #elseif (【評価式2】) strings 2 #else strings 3 #end
評価式1に一致した場合は"strings 1"が出力されます。
if
評価式の条件と一致する場合にマクロコマンド内の文字列を出力します。
elseif
先の条件に一致しない場合に評価されます。省略できます。また、複数記述できます。
else
先の条件に一致しない場合に適用されます。省略できます。
end
条件分岐の終了を示します。省略できません。
評価式
評価式の書式は次の通りです。
#if ( ${【マクロ変数】} 【比較条件】 "【比較文字列】" )
比較演算子
比較演算子は「==(一致)」と「!=(不一致)」を使用できます。
例えば、ローカル変数「hostname」の値が文字列「SEIL」と一致することを条件にする場合は次のように記述します。
#if ( ${local.hostname} == "SEIL" ) strings 1 #end
比較演算子の左辺と右辺には、それぞれマクロ変数または文字列定数を記述できます。文字列定数は、「SEIL」を「 "SEIL"」のように "" で括ります。
変数が値を持たない場合は、空文字("")と一致します。
数字は文字として扱います。数値としての計算や大小比較はできません。
論理演算子
論理演算子は「&&(AND)」と「||(OR)」を使用でき、比較演算子と組み合わせて条件を定義できます。
例えば次の評価式は、ローカル変数「hostname」の値が文字列「SEIL」と一致し、かつ、ローカル変数「model」の値が文字列「X4」と一致しないことを条件とします。
#if ( ${local.hostname} == "SEIL" && ${local.model} != "X4") strings 1 #end
繰り返し(foreach)
任意のテンプレートに所属するサービスアダプタ群が持つローカル変数値を順に呼び出し定型的なコンフィグにあてはめ繰り返し処理することができます。書式は次の通りです。
#foreach(${【ループ変数名】} in ${【テンプレート名】}) strings 1 ${【ループ変数名】.【ローカル変数名1】} strings 2 ${【ループ変数名】.【ローカル変数名2】} #end
foreachループ内でループ変数名とローカル変数名を組み合わせると、指定したテンプレートに所属するサービスアダプタのローカル変数を参照することができます。
例えば、VPN親拠点用のテンプレートで、VPN子拠点のホスト名とアドレスのローカル変数値を順番に出力するには次のように記述します。
#foreach(${edge} in ${vpn_edge}) target name ${edge.hostname} target address ${edge.address} #end
ループ変数名は任意の文字列を指定します。ループ変数は当該ループ内でのみ参照できます。
テンプレート名は、子拠点用のテンプレート(例として「vpn_edge」)を指定します。
指定したテンプレートに3個のサービスアダプタが所属している場合、次のような出力が期待できます。
target name EDGE-1 target address 10.0.1.1 target name EDGE-2 target address 10.0.2.1 target name EDGE-3 target address 10.0.3.1
foreachのネスト
マクロコマンドforeachは2段階までネストすることができます。