2021-04-29 04:01 AM 2021-05-06 02:35 AM 更新
NSO テンプレートには 条件文等、テンプレートを動的にする処理命令 ( Processing Instructions ) が用意されています。本記事は、NSO 4.6 以降、追加、拡張された構文 tag や、今後 deprecate される構文について一部ご紹介します。
NSO 4.5 の ドキュメント NSO Development では、テンプレートの Conditional Statement として when を使用した条件文について説明しています。
Conditional Statements Sometimes it is necessary to control which parts of a template that should be evaluated. The 'when' attribute makes it possible to set a conditional statement that controls if the sub-tree should be evaluated or not. <policy-map xmlns="urn:ios" tags="merge"> <name>{$POLICY_NAME}</name> <class> <name>{$CLASS_NAME}</name> <priority when="{qos-class/priority}"> <percent>{$CLASS_BW}</percent> </priority> <bandwidth when="{not(qos-class/priority)}"> <percent>{$CLASS_BW}</percent> </bandwidth> <set> <ip> <dscp>{$CLASS_DSCP}</dscp> </ip> </set> </class> </policy-map>
when を使用した条件文は最新バージョン 5.5 でも使用できますが、4.6 以降ドキュメントからは削除されました。代わりに、<?if?>..<?else?>..<?end?>を条件文として紹介しています。
Conditional Statements Sometimes it is necessary to control which parts of a template that should be evaluated. The if processing instruction makes it possible to set a conditional statement that controls if the sub-tree should be evaluated or not. <policy-map xmlns="urn:ios" tags="merge"> <name>{$POLICY_NAME}</name> <class> <name>{$CLASS_NAME}</name> <?if {qos-class/priority}?> <priority> <percent>{$CLASS_BW}</percent> </priority> <?else?> <bandwidth> <percent>{$CLASS_BW}</percent> </bandwidth> <?end?> <set> <ip> <dscp>{$CLASS_DSCP}</dscp> </ip> </set> </class> </policy-map>
<?if?>..<?else?>..<?end?> は 条件文としての汎用性を高めたものです。when は今後 deprecate されることが決まっています。新規に NSO Template を作成する場合は、<?if?>..<?else?>..<?end?> をご使用ください。また、現在も when を使用している場合は、早めのご移行をお勧めします。なお、deprecate の時期については公開しておりません。バージョンアップの際は、CHANGES をご確認ください。
when と if, if-else の比較
<?else?> 節は必須ではありません。省略してもいいです
Before |
After |
************************************************************* <interface> ************************************************************* |
*************************************************************<interface> ************************************************************* |
if-else 同様に NSO 4.6 以降、追加または拡張された構文があります。以下、以前との対比をみてみます。
foreach の拡張
<?foreach?>..<?end?> で括ったブロック内に複数の属性タグを挿入できるようになりました。
Before |
After |
************************************************************* <vrf> ************************************************************* |
************************************************************* <vrf> ************************************************************* |
for 文 の対応
for 文では、変数を使用し繰り返し処理ができます。while-loop のように記述できます。
Before |
After |
************************************************************* 変数による反復処理はできない ************************************************************* |
************************************************************* <interface xmlns="urn:ios"> ************************************************************* |
set の対応
set を使用し変数に新しい値を設定したり、設定済みの変数を操作できます。なお、変数は必ず string 型となります。
Before |
After |
************************************************************* 実行時に変数に値を設定することはできない ************************************************************* |
************************************************************* <interface xmlns="urn:ios"> ************************************************************* |
set-context-node の対応
コンテキストノードに任意の相対 Xpath を指定できるようになりました。
Before |
After |
************************************************************* <device-list foreach=”{/devices}"> ************************************************************* |
************************************************************* <?set-context-node {/devices}?> ************************************************************* |
set-root-node の対応
アクセス可能な Xpath tree のルートノードを指定できます。なお、カレントコンテキストノードは変わりません。set-root-node で指定できるルートノードは、現在のアクセス可能なツリーに限らず、データストア全体の何れかのノードを選択できます。
Before |
After |
************************************************************* ルートノードは変更できない ************************************************************* |
************************************************************* <?set-root-node {/devices}?> ************************************************************* |
NSO Template の Processing Instructions の変更に関する詳細は、CHANGES に記載されています。そちらもご参照ください。
"NSO Dev Days: Making & Breaking Templates"
https://www.youtube.com/watch?v=eDRLniGR_Sg&t=602s
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます