項目一覧
例:カスタムシステムログメッセージの生成
Junos OS コミットスクリプトは、コミット操作中にカスタムシステムログメッセージを生成し、設定がカスタム設定ルールに準拠していない場合に警告することができます。コミットプロセスは、システムログメッセージの生成による影響を受けません。この例では、特定のステートメントがデバイスコンフィギュレーションに含まれていない場合に、カスタムシステムログメッセージを生成するコミットスクリプトを作成します。
必要条件
Junos OS リリース 16.1R3 以降(Python スクリプトを使用する場合)
概要とコミット スクリプト
コミットスクリプトを使用して、 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.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 {
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()
構成
プロシージャ
手順
スクリプトをダウンロードして有効にし、テストします。コミットスクリプトがシステムログメッセージを正しく生成することをテストするには、システムログメッセージを出力する条件が候補コンフィギュレーションに含まれていることを確認します。この例では、 read-write ステートメントが [edit snmp community community-name authorization] 階層レベルに含まれていないことを確認します。
このトピックの例をテストするには、次のようにします。
スクリプトをテキストファイルにコピーし、必要に応じて read-write.xsl、 read-write.slax、または read-write.py という名前を付けて、デバイスの /var/db/scripts/commit/ ディレクトリにコピーします。
手記:署名されていないPythonスクリプトは、rootまたは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 を使用して Python スクリプトを実行するように
language python3ステートメントを設定するか、Python 2.7 を使用して Python スクリプトを実行するようにlanguage pythonステートメントを設定します。詳細については、「 言語」を参照してください。(オプション)条件をテストするために、
read-writeステートメントがすべてのコミュニティの[edit snmp community community-name authorization]階層レベルに含まれている場合、既存のSNMPコミュニティの認証を一時的に削除します。[edit] user@host# delete snmp community community-name authorization read-write
次のコマンドを発行して、システム ロギングがファイルに書き込むように構成されていることを確認します(一般的に使用されるファイル名は messages です)。
[edit] user@host# show system syslog
システムログ設定の詳細については、 システムログエクスプローラを参照してください。
commitコマンドを発行して、設定をコミットします。user@host# commit
検証
スクリプトの実行の検証
目的
コミットスクリプトによって生成されたシステムログメッセージを確認します。
システムログメッセージは、Python、SLAX、および XSLT スクリプトのコミット操作中に生成されますが、Python スクリプトのコミットチェック操作中にのみ生成されます。つまり、 commit check | display xml または commit check | display detail 設定モードコマンドを使用して、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 community does not have read-write access」メッセージを生成するはずです。
Jun 3 14:34:37 host-name cscript: SNMP community does not have read-write access: [edit snmp community community-name]