カスタムの警告、エラー、またはシステムログメッセージをコミットスクリプトで生成する
Junos OS コミット スクリプトは、コミット操作中にカスタムの警告、エラー、またはシステム ログ メッセージを生成し、設定がカスタム設定ルールに準拠していない場合に警告することができます。エラーを生成すると、コミット操作も失敗します。コミットスクリプトでカスタムの警告、エラー、またはシステムログメッセージを生成するには:
「 コミットスクリプトに必要なボイラープレート」から適切なコミットスクリプトの定型文を含めます。便宜上、ここに再現します。
XSLT ボイラープレート<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <!-- ... insert your code here ... --> </xsl:template> </xsl:stylesheet>
version 1.2; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { /* * insert your code here */ }
from junos import Junos_Configuration import jcs if __name__ == '__main__': # insert your code here
コメント "insert your code here" で示されている位置に、1 つ以上の XSLT プログラミング命令、またはそれに相当する SLAX または Python を含めます。一般的に使用される XSLT コンストラクトには、次のものがあります。
<xsl:choose> <xsl:when> <xsl:otherwise>
- 異なる状況で異なる命令が処理される原因となる条件付きコンストラクト。<xsl:choose>
命令には 1 つ以上の<xsl:when>
要素が含まれており、それぞれが XPath 式をテストします。テストが true と評価された場合、XSLT プロセッサは<xsl:when>
要素内の命令を実行します。XSLT プロセッサは、test
属性が true と評価される最初の<xsl:when>
要素に含まれる命令のみを処理します。<xsl:when>
要素のtest
属性のいずれも true と評価されない場合、<xsl:otherwise>
要素の内容 (存在する場合) が処理されます。<xsl:for-each select="xpath-expression">
- 一連のノードを集めて 1 つずつ処理するように XSLT プロセッサに指示するプログラミング命令。ノードは、select
属性の Extensible Markup Language (XML) Path Language (XPath) 式によって選択されます。各ノードは、<xsl:for-each>
命令に含まれる命令に従って処理されます。<xsl:for-each>
命令内のコードは、XPath 式に一致する各ノードに対して再帰的に評価されます。コンテキストは、各パス中にノードに移動されます。<xsl:if test="xpath-expression">
-test
属性の XPath 式がtrue
と評価された場合に命令が処理される条件付きコンストラクト。例えば、次のプログラミング命令は、
host-name
ステートメントが[edit system]
階層レベルに含まれていない場合に true と評価されます。<xsl:if test="not(system/host-name)">
SLAX では、
if
コンストラクトは次のようになります。if (not(system/host-name))
Pythonでも同様に:
if not(Junos_Configuration.xpath("./system/host-name")):
警告、エラー、またはシステムログメッセージを生成するための適切なコンストラクトを含めます。
SLAX スクリプトと XSLT スクリプトでは、
<xnm:warning>
、<xnm:error>
、または<syslog>
要素と、メッセージの内容を指定する<message>
子要素を含めます。警告およびエラー メッセージについては、次の例に示すように、jcs:edit-path
テンプレートやjcs:statement
テンプレートなど、他のいくつかの子要素を含めることができ、警告またはエラー メッセージに関連する設定階層とステートメント情報が含まれるようになります。Python スクリプトでは、
jcs.emit_warning()
、jcs.emit_error()
、またはjcs.syslog()
関数を含め、メッセージ文字列を引数リストに含めます。たとえば、XSLT コミット スクリプトが次の
<xnm:warning>
要素を使用して警告を生成するとします。<xnm:warning> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select="chassis"/> </xsl:call-template> <message>IP source-route processing is not enabled.</message> </xnm:warning>
commit
操作中に次の出力を出力します。[edit chassis] warning: IP source-route processing is not enabled. commit complete
同様に、XSLT コミット スクリプトが次の
<xnm:error>
要素を使用してエラーを生成する場合も同様です。<xnm:error> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message>Missing a description for this T1 interface.</message> </xnm:error>
commit
操作中に次の出力が出力されます。[edit interfaces interface t1-0/0/0] 'interface t1-0/0/0;' Missing a description for this T1 interface. error: 1 error reported by commit scripts error: commit script failure
手記:SLAX および XSLT スクリプトでは、スクリプトで生成された構成変更と共に警告メッセージを含める場合、
jcs:emit-change
テンプレートにmessage
パラメーターを含めることで警告を生成できます。message パラメーターを指定すると、jcs:emit-change
テンプレートから<xnm:warning>
テンプレートが呼び出され、CLI に警告通知が送信されます。(詳細については、コミットスクリプトを使用した永続的または一時的な設定変更の生成の概要を参照してください)。システムログメッセージの場合、サポートされている子要素は
<message>
のみです。<syslog> <message>syslog-string</message> </syslog>
含めることができるすべての XSLT タグと属性の説明については、「 メッセージを生成するときに使用する SLAX および XSLT コミット スクリプト タグ要素」を参照してください。
これらのコンストラクトの SLAX バージョンについては、「 例: カスタム警告メッセージの生成」、「 例: カスタム エラー メッセージの生成」、および「 例: カスタム システム ログ メッセージの生成」を参照してください。
スクリプトをわかりやすい名前で保存します。
スクリプトをハード ディスクの /var/db/scripts/commit ディレクトリまたはフラッシュ ドライブの /config/scripts/commit ディレクトリにコピーします。
コミット スクリプトの保存場所の設定については、 Junos 自動化スクリプトの保存と有効化 およびフラッシュ メモリへのスクリプトの保存を参照してください。
[edit system scripts commit]
階層レベルでfile filename
ステートメントを含めて、スクリプトを有効にします。[edit system scripts commit] user@host# set file filename
スクリプトが Python で記述されている場合は、署名されていない Python スクリプトの実行を有効にします。
[edit] user@host# set system scripts language (python | python3)
設定をコミットします。
[edit] user@host# commit and-quit
手記:デバイスにデュアル ルーティング エンジンがあり、スクリプトをその両方で有効にする場合は、
commit synchronize scripts
コマンドを発行して設定を同期させ、コミット操作の一環としてスクリプトをもう一方のルーティングエンジンにコピーできます。