コマンドラインテンプレート
複数のサービスアダプタのコンフィグの共通箇所はテンプレートとして作成し、サービスアダプタごとに異なるパラメータ部はマクロ変数で定義できます。これらにより、典型的なコンフィグを使用する多数のエッジ拠点のコンフィグ作成を簡略化できます。
更に、テンプレートには条件分岐またはループ処理を記述でき、ほかのテンプレートを割り当てたサービスアダプタのマクロ変数を引数に取ることができるため、対向に多数のエッジ拠点を設定するセンター拠点のコンフィグ変更を半自動化できます。
テンプレートによる設定の流れ
テンプレートを追加する
「新規テンプレートの作成」の「コマンドラインテンプレートの作成」を選択します。
コマンドラインテンプレートを作成する
テンプレートに名前を付け、テンプレートコンフィグを作成します。
テンプレートは所属するサービスアダプタが共通で使用するコンフィグを基本とし、マクロ変数またはマクロコマンドを交えて記述します。
マクロ変数を定義する
テンプレートに記述したマクロ変数を、グローバル変数またはローカル変数として定義します。
サービスアダプタを割り当てる
テンプレートに所属するサービスアダプタを割り当てます。 サービスアダプタは、いずれか1つのテンプレートにのみ割り当てることができます。
変数値を設定する
グローバル変数またはローカル変数に値を設定します。
コンフィグを反映する
テンプレートの内容を起動時コンフィグ及び稼働コンフィグに反映するため、「コンフィグの反映」を実行します。
テンプレート
テンプレートは運用管理担当者が作成します。
| 項目 | 内容 |
|---|---|
| テンプレート名 | 1~40文字、半角英数字及びアンダースコアを入力できます(先頭は英字のみ) |
| 設定数 | 40個まで |
マクロコマンド
マクロコマンドの書式、以下のとおりです。
#【マクロコマンド】
条件分岐(if~end)
評価式の条件と一致する場合に、マクロコマンド内の文字列を出力します。
#if (【評価式1】) strings 1 #elseif (【評価式2】) strings 2 #else strings 3 #end
評価式1に一致した場合は、"strings 1"が出力されます。
elseif
先の条件に一致しない場合に評価されます。省略でき、また、複数記述できます。
else
先の条件に一致しない場合に適用されます。省略できます。
評価式
評価式の書式は、以下のとおりです。
#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段階までネストできます。
マクロ変数
マクロ変数は、テンプレートコンフィグに記述する変数です。 変数名をコンフィグ中に記述すると、コンフィグの反映時に変数値(文字列)に置き換えられます。
マクロ変数の書式は、以下のとおりです。
${【変数名】} または $変数名
例:
${macro}
$macro
"{" と "}" は省略可能ですが、省略する場合はマクロ変数に続く文字と区切るために空白が必要です。このため、連続する文字列の一部をマクロに置き換える用途には適しません。
本書では、 "{" と "}" を省略せずに記載しています。
ローカル変数
ローカル変数は、運用管理担当者が定義します。
ローカル変数「hostname」を定義した場合は、テンプレートには以下のように記述します。
${local.hostname}
または
${hostname}
テンプレートに関連付けられ、このテンプレートに所属するサービスアダプタのみ、値を設定できます。
また、値の設定が省略された場合のデフォルト値を定義できます。
テンプレートからコンフィグを生成するときに、サービスアダプタごとに設定された変数値に置き換えられます。
テンプレートから所属を解除すると、変数値はクリアされます。
| 項目 | 内容 |
|---|---|
| 変数名 | 1~40 文字、半角英数字及びアンダースコアを入力できます(先頭は英字のみ、大文字と小文字を区別します) |
| 変数値 | 0~3,000 文字(改行を含む複数行を設定できます) |
| 設定数 | テンプレートごとに2,000個まで |
定型的なコンフィグの内、ホスト名または拠点ごとに異なるISPアカウント情報など、サービスアダプタごとに設定するパラメータに使用します。
グローバル変数
グローバル変数は、運用管理担当者が定義します。
グローバル変数「ntp_address1」を定義した場合は、テンプレートには以下のように記述します。
${global.ntp_address1}
テンプレートからコンフィグを生成するときに、すべてのテンプレート、すべてのサービスアダプタで共通の変数値に置き換えられます。
| 項目 | 内容 |
|---|---|
| 変数名 | 1~40文字、半角英数字及びアンダースコアを入力できます(先頭は英字のみ、大文字と小文字を区別します) |
| 変数値 | 0~3,000文字(改行を含む複数行を設定できます) |
| 設定数 | 2,000個まで |
NTPサーバ及びDNSサーバのアドレスといった複数のサービスアダプタが共通で使用するパラメータは、テンプレートに直接記述することもできますが、グローバル変数として定義するとテンプレートをほかのサービス契約に転用できるなど汎用性が向上します。
システム変数
システム変数は、あらかじめ定義されており、変数ごとに特定の値に置き換えられます。
ループカウンタ
${loopCount}
マクロコマンド「#foreach」内でのみ使用できます。 初期値「0」から開始し、ループごとにインクリメントされます。
サービスコード
${system.sa_code}
サービスアダプタのサービスコードに置き換えられます。拠点ごとのユニークな識別子として使用できます。
マクロコマンド「foreach」内で繰り返し処理対象のサービスコードに使用する場合は、以下のように記述します。
${【ループ変数名】.system.sa_code}
システム自動コンフィグ
${system.mpc_base_config}
管理上必要とされるコンフィグが自動的に挿入されます。
テンプレートを保存したとき、テンプレートに記述されていない場合は、自動的に追加されます。
【注意】
コメント記法などにより無力化すると、運用上問題が発生する可能性があります。
「#」文字
${system.sharp}
「#」文字が出力されます。#は「コメント」マクロコマンドとして扱われるため、テンプレートコンフィグの文字列内に#を記述する場合には、マクロ変数で記述する必要があります。
自動ローカル変数
自動ローカル変数の設定値を参照する場合は、${auto.<変数名>} の形式で参照します。{ } を付けない省略形では記述できません。<変数名>にはシステムで定義された以下の変数名を指定できます。自動ローカル変数は#foreachによるループ内でも参照できます。
| 変数名 | 内容 |
|---|---|
| ${auto.lan1ipv6address} | サービスアダプタのLAN1に設定されたIPv6アドレスです。複数設定がある場合は、プライマリ(先頭)のアドレスになります。値が参照可能となるのは、サービスアダプタが接続している場合です |
| ${auto.lan1ipv6prefix} | サービスアダプタのLAN1に設定されたプレフィックス値です。複数設定がある場合は、プライマリ(先頭)のアドレスになります |
【注意】
自動ローカル変数は、SMFsxからの移行時に該当機能を利用していた場合のみ、本サービスで利用できます。
該当機能を利用していない状態で移行した場合、または本サービスを新規にご契約の場合は、自動ローカル変数を参照しても値は設定されず、自動反映も行われません。
【注意】
- 自動ローカル変数を参照する場合は、必ずテンプレート側で#if文を用いて変数に値が設定されていることをチェックしてください。値が設定されていない場合は、展開時にエラーになることがありますのでご注意ください。
- 自動ローカル変数は、サービスアダプタ側の設定値の変化に対し、自動的に変更を反映する仕組みに対応しています。自動ローカル変数をテンプレートで参照しているサービスアダプタは、値が変更された場合にシステム側が自動的に設定を変更します。
コメント
テンプレートコンフィグ中に任意のコメントを記述できます。
「##」から行末までの文字列はコメントとして扱われ、コンフィグの反映時に無視されます。
特定の行のコンフィグを一時的に無効にする場合にも利用できます。
## this line is comment this is config ## this is comment
コメントには、半角の英数字及び記号を使用できます。
複数行にわたるコメントは、「#*」と「*#」の間に記述します。
#* this line is comment and this line is comment too *#
特殊文字のエスケープ処理
テンプレートコンフィグ内では、定義済のテンプレート変数名またはマクロコマンド名と一致する文字列をそのまま出力する場合は、文字列の先頭に「\」を付記します。
ただし、コメント開始文字の「#」はエスケープ処理を適用できません。 テンプレートコンフィグ中に「##」や「#*」を含む文字列をそのまま出力するには、システム変数「${system.sharp}」を使用してください。
this is config and parameter is \${var}
this is config and parameter is \#if
ローカル変数のCSVエクスポートまたはインポート
テンプレートごとに、所属サービスアダプタ及びローカル変数の値をCSVファイルにエクスポートできます。また、CSVファイルを外部で編集してインポートし、ローカル変数の値を更新できます。
CSVファイルの書式
CSV ファイルのフォーマットは、以下のとおりです。 テンプレート変数名の順序は記述された順に保持されます。
[name] ,[sa_label],variableA ,variableB ,variableC , ...
[default] , ,defaultValue,defaultValue,defaultValue, ...
ServiceCode1 ,SA-label1 ,value ,value ,value , ...
ServiceCode2 ,SA-label2 ,value ,value ,value , ...
ServiceCode3 ,SA-label3 ,value ,value ,value , ...
:
:
1行目は定義です。変更できません。
2行目はデフォルト値の定義です。
3行目以降はサービスアダプタごとの識別子と変数値です。
"[name]" 列はサービスコードです。値は省略できず、変更できません。インポート先テンプレートの所属サービスアダプタと一致しない場合は、エラーになります。
"[sa_label]" 列はメモ欄です。インポート時は無視され、メモ欄に反映されません。"[sa_label]" 列が存在しない場合でもインポートできます。
"[name]" または "[sa_label]" 以外の列は、マクロ変数です。サービスアダプタごとの変数値は変更できます。