このページで
例: カスタム・システム・ログ・メッセージの生成
Junos OS コミット スクリプトは、コミット操作中にカスタム システム ログ メッセージを生成し、設定がカスタム設定ルールに準拠していない場合に警告を出すことができます。コミット プロセスは、システム ログ メッセージの生成による影響を受けません。この例では、特定のステートメントがデバイス設定に含まれていない場合に、カスタム システム ログ メッセージを生成するコミット スクリプトを作成します。
要件
Python スクリプトを使用する場合、Junos OS リリース 16.1R3 以降。
概要とコミット スクリプト
コミット スクリプトを使用して、 ステートメントが 階層レベルに含まれていない場合に read-write
表示されるカスタム システム ログ メッセージを [edit snmp community community-name authorization]
作成します。
このスクリプトは、XSLT、SLAX、Python で表示されます。
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"> <xsl:for-each select="snmp/community"> <xsl:if test="not(authorization) or (authorization != 'read-write')"> <xsl:variable name="community"> <xsl:call-template name="jcs:edit-path"/> </xsl:variable> <xsl:variable name="message" select="concat('SNMP community does not have read-write access: ', $community)"/> <syslog> <message> <xsl:value-of select="$message"/> </message> </syslog> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
SLAX 構文
version 1.0; 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 { for-each (snmp/community) { if ( not(authorization) or (authorization != "read-write")) { var $community = call jcs:edit-path(); var $message = "SNMP community does not have read-write access: " _ $community; <syslog> { <message> $message; } } } }
Python 構文
from junos import Junos_Configuration import jcs def main(): root = Junos_Configuration for element in root.xpath("./snmp/community"): if element.find("authorization") is None or \ element.find("authorization").text != 'read-write': jcs.syslog("172", "SNMP community does not have read-write access: " + element.find('name').text) if __name__ == '__main__': main()
構成
手順
手順
スクリプトをダウンロード、有効化、テストします。コミット スクリプトがシステム ログ メッセージを正しく生成することをテストするには、候補の構成にシステム ログ メッセージを引き出す条件が含まれていることを確認します。この例では、 ステートメントが 階層レベルに[edit snmp community community-name authorization]
含まれていないことを確認read-write
します。
このトピックの例をテストするには、
スクリプトをテキスト ファイルにコピーし、 read-write.xsl、 read-write.slax、または read-write.py に名前を付け、デバイス上の /var/db/scripts/commit/ ディレクトリにコピーします。
メモ:符号なしPythonスクリプトは、junos OS
super-user
ログインクラスのルートまたはユーザーのいずれかが所有する必要があり、ファイルの書き込み権限を持つことができるのはファイル所有者だけです。設定モードで、 階層レベルで ステートメントとスクリプトファイル名を
[edit system scripts commit]
設定file
します。[edit] user@host# set system scripts commit file read-write.xsl
スクリプトが Python で記述されている場合は、符号なし Python スクリプトの実行を有効にします。
[edit] user@host# set system scripts language python
メモ:Python 3を
language python3
使用してPythonスクリプトを実行するように ステートメントを設定するか、 ステートメントでlanguage python
Python 2.7を使用してPythonスクリプトを実行するように設定します。詳細については、 言語を参照してください。(オプション)条件をテストするには、ステートメントがすべてのコミュニティの
read-write
[edit snmp community community-name authorization]
階層レベルに含まれている場合、既存のSNMPコミュニティの認証を一時的に削除します。[edit] user@host# delete snmp community community-name authorization read-write
次のコマンドを発行して、システム ロギングがファイルに書き込むよう設定されていることを確認します(一般的に使用されるファイル名は メッセージです)。
[edit] user@host# show system syslog
システムログの設定については、 システムログエクスプローラを参照してください。
コマンドを
commit
発行して、設定をコミットします。user@host# commit
検証
スクリプト実行の検証
目的
コミット スクリプトによって生成されたシステム ログ メッセージを確認します。
システム ログ メッセージは、Python、SLAX、XSLT スクリプトのコミット操作中に生成されますが、生成されるのは Python スクリプトのコミット チェック操作時のみです。つまり、 または commit check | display detail
設定モード コマンドをcommit check | display xml
使用して、SLAX および XSLT スクリプトのシステム ログ メッセージの出力を検証することはできません。
アクション
コミット操作が完了したら、システム ログ ファイルを検査します。ログファイルのデフォルトディレクトリは /var/log/ です。動作モード コマンドを発行してログ ファイルを show log filename
表示します。例えば、メッセージが メッセージ ・ファイルに記録される場合は、以下のコマンドを実行します。
user@host> show log messages | match cscript
コミット スクリプトによって生成されるシステム ログ エントリの形式は次のとおりです。
timestamp host-name cscript: message
ステートメントは read-write
階層レベルに [edit snmp community community-name authorization]
含まれされていないため、コミットスクリプトはシステムログファイルに「SNMPコミュニティには読み書きアクセスがありません」メッセージを生成する必要があります。
Jun 3 14:34:37 host-name cscript: SNMP community does not have read-write access: [edit snmp community community-name]