コマンドラインテンプレート

複数のサービスアダプタのコンフィグの共通箇所をテンプレートととして作成し、また、サービスアダプタごとに異なるパラメータ部をマクロ変数として定義することができます。これにより、典型的なコンフィグを使用する多数のエッジ拠点のコンフィグ作成を簡略化することができます。

さらに、テンプレートには条件分岐やループ処理を記述することができ、他のテンプレートを割り当てたサービスアダプタのマクロ変数を引数に取ることができるため、対向に多数のエッジ拠点を設定するセンター拠点のコンフィグ変更を半自動化することができます。

テンプレートによる設定の流れ

テンプレートの追加

「新規テンプレートの作成」から「コマンドラインテンプレートの作成」を開きます。

コマンドラインテンプレートの作成

テンプレートに名前を付け、テンプレートコンフィグを作成します。

テンプレートは所属するサービスアダプタが共通で使用するコンフィグを基本とし、「マクロ変数」や「マクロコマンド」を交えて記述します。

マクロ変数の定義

テンプレートに記述したマクロ変数をグローバル変数やローカル変数として定義します。

サービスアダプタの割り当て

テンプレートに所属するサービスアダプタを割り当てます。 サービスアダプタはいずれか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 ~ 3000 文字(改行を含む複数行を設定できます)
設定数テンプレート毎に2000個まで

定型的なコンフィグの内、ホスト名や拠点ごとに異なるISPアカウント情報など、サービスアダプタ個別に設定するパラメータに使用します。

グローバル変数

グローバル変数は運用管理担当者が定義します。

グローバル変数「ntp_address1」を定義した場合のテンプレートでの書式は次の通りです。

${global.ntp_address1}

テンプレートからコンフィグを生成するときに、全てのテンプレート、すべてのサービスアダプタで共通の変数値に置き換えられます。

変数名1 ~ 40 文字、半角英数字およびアンダースコアが入力可能(先頭は英字のみ、大文字と小文字を区別します
変数値0 ~ 3000 文字(改行を含む複数行を設定できます)
設定数2000個まで

NTPサーバやDNSサーバのアドレスといった、複数のサービスアダプタが共通で使用するパラメータはテンプレートに直接記述することもできますが、これらをグローバル変数として定義するとテンプレートを他のサービス契約に転用可能になるなど汎用性が向上します。

システム変数

システム変数は予め定義されており、変数ごとに特定の値に置き換えられます。

ループカウンタ
${loopCount}

ループカウンタはマクロコマンド「#foreach」内でのみ使用できます。 初期値「0」から開始し、ループ毎にインクリメントされます。

サービスコード
${system.sa_code}

サービスアダプタのサービスコードに置き換えられます。拠点ごとのユニークな識別子として使用できます。

マクロコマンド「foreach」内で繰り返し処理対象のサービスコードに使用する場合は次のように記述します。

${【ループ変数名】.system.sa_code}
システム自動コンフィグ
${system.mpc_base_config}

管理上必要とされるコンフィグが自動的に挿入されます。

テンプレートを保存したとき、テンプレートに記述されていない場合は自動的に追加されます。

コメント記法などにより無力化すると運用上問題が発生する可能性があります。

「#」文字
${system.sharp}

「#」文字が出力されます。# は「コメント」マクロコマンドとして扱われるため、テンプレートコンフィグの文字列内に # を記述する場合にはマクロ変数で記述する必要があります。

自動ローカル変数

自動ローカル変数の設定値を参照する場合は、${auto.<変数名>} の形式で参照します。{ } を付けない省略形では記述できません。<変数名>にはシステムで定義された以下の2種類の変数名を指定できます。自動ローカル変数は#foreachによるループ内でも参照できます。

変数名機能
${auto.lan1ipv6address}サービスアダプタのLAN1に設定されたIPv6アドレスです。複数設定があ る場合はプライマリ(先頭)のアドレスになります。値が参照可能となるの はサービスアダプタが接続している場合です。
${auto.lan1ipv6prefix}サービスアダプタのLAN1に設定されたプレフィックス値です。複数設定 がある場合はプライマリ(先頭)のアドレスになります。

自動ローカル変数はSMFsxからの移行時に該当機能を利用していた場合のみ、MPCサービスで利用可能になります。

利用がない状態で移行した場合、もしくはMPCサービスを新規にご契約の場合、自動ローカル変数を参照しても値は設定されず、自動反映も行われません。

  • 自動ローカル変数を参照する場合、必ずテンプレート側で#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]" 以外の列はマクロ変数です。サービスアダプタごとの変数値は変更できます。