Junos OS 自動化スクリプトで名前付きテンプレートを使用する
Junos OS には、コミット、op、イベント、SNMP スクリプトで使用できる名前付きテンプレートがいくつか用意されており、Junos OS を実行しているデバイスでスクリプト作業をより簡単に実行できます。次のセクションでは、さまざまなスクリプト言語のテンプレートをインポートして使用する方法について概説します。
SLAX および XSLT スクリプトでの名前付きテンプレートの使用
SLAXおよびXSLTスクリプト内で名前付きテンプレートを使用するには、スクリプトで junos.xsl ファイルをインポートし、スタイルシート宣言で適切な名前空間URI( Uniform Resource Identifier )を宣言する必要があります。Junos OS名前付きテンプレートは、関連付けられた URI http://xml.juniper.net/junos/commit-scripts/1.0を持つ名前空間で定義されます。
XSLT スクリプトに <xsl:import/> タグ要素を、SLAX スクリプトに import ステートメントを含め、junos.xsl ファイルの場所を指定して、junos.xsl ファイルをスクリプトにインポートします。
SLAX および XSLT スクリプトは、通常、標準の XSLT またはユーザー定義のテンプレートとの名前の競合を避けるために、jcs プレフィックスを URI にマップします。次に、スクリプトは適切なプレフィックスで名前付きテンプレートを修飾し、処理中に関連付けられた URI 参照に展開されます。XSLT スクリプトの開始 <xsl:stylesheet> タグ要素に xmlns:jcs 属性を含めるか、SLAX スクリプトに ns jcs ステートメントを含めることで、jcs プレフィックスを URI にマップします。
スクリプトで名前付きテンプレートを呼び出すには、XSLT スクリプトに <xsl:call-template name="template-name"> 要素を含めるか、SLAX スクリプトに call ステートメントを含め、必須またはオプションのパラメーターを渡します。テンプレート パラメータは名前で割り当てられ、任意の順序で表示できます。これは、関数定義で指定された正確な順序で引数を関数に渡す必要がある関数とは異なります。
次の例では、 junos.xsl ファイルをスクリプトにインポートし、URI http://xml.juniper.net/junos/commit-scripts/1.0 で識別される名前空間に jcs プレフィックスをマッピングします。このスクリプトは、 jcs:edit-path テンプレートの呼び出しを示しています。
XSLT 構文
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">
<xsl:import href="../import/junos.xsl"/>
...
<xsl:for-each select="interfaces/interface[starts-with(name, 'so-')]">
<xnm:warning>
<xsl:call-template name="jcs:edit-path"/>
<message>interface configured</message>
</xnm:warning>
</xsl:for-each>
...
</xsl: stylesheet>
SLAX 構文
version 1.2;
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
...
for-each ( interfaces/interface[starts-with(name,'so-') ) {
<xnm:warning> {
call jcs:edit-path();
<message> “interface configured”;
}
}
...
Python スクリプトでの名前付きテンプレート機能の使用
jcs モジュールをインポートする Python スクリプトは、SLAX および XSLT スクリプトで使用される名前付きテンプレートと同等の Python 関数を実行できます。関数は、対応する名前付きテンプレートが SLAX または XSLT スクリプトで行うのと基本的に同じ機能を Python スクリプトで提供します。Pythonスクリプトでサポートされている機能を持つ名前付きテンプレートを確認するには、Junos OS自動化スクリプトの名前付きテンプレートについてを参照してください。
Python スクリプト内の名前付きテンプレートに相当する関数を呼び出すには、必要な変数宣言を含め、関数を呼び出し、必須または省略可能な引数を渡します。Python スクリプトでは、関数名にハイフンの代わりにアンダースコアを使用する必要があることに注意してください。例えば:
Python 構文
import jcs
if __name__ == '__main__':
script = "system-check.py"
change_xml = """<system><scripts><op>
<file><name>{0}</name></file></op>
</scripts></system>""".format(script)
jcs.emit_change(change_xml, "change", "xml")