このページで
例: SLAX および XSLT Op スクリプトを使用して構成を変更する
この例では、SLAX op スクリプトを使用して Junos OS 設定の構造化された変更を行う方法を説明します。
デバイスの設定
手順
スクリプトをダウンロード、有効化、テストするには、以下の手順にしたがっています。
スクリプトをテキスト ファイルにコピーし、 ファイル config-change.slax に名前を付け、デバイス上の /var/db/scripts/op/ ディレクトリにコピーします。
設定モードで、 階層レベルでスクリプトのファイル名を
[edit system scripts op file]
設定します。[edit system scripts op] user@host# set file config-change.slax
コマンドを
commit and-quit
発行して設定をコミットし、動作モードに戻ります。[edit] user@host# commit and-quit
スクリプトを実行する前に、運用モード コマンドを
show interfaces interface-name
発行し、スクリプトによって無効になるインターフェイスの現在の状態を記録します。op スクリプトを実行します。
user@host> op config-change This script disables the interface specified by the user. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0
要件
この例では、Junos OSを実行しているデバイスを使用しています。
概要と運用スクリプト
SLAX および XSLT op スクリプトでは、junos.xsl インポート ファイルにあるテンプレートを使用jcs:load-configuration
して、Junos OS 構成の構造化された変更を行うことができます。この例では、テンプレートを使用jcs:load-configuration
してJunos OSを実行するデバイスでインターフェイスを無効にするSLAX opスクリプトを作成します。テンプレートに必要なすべてのjcs:load-configuration
値が変数として定義され、その変数がテンプレートに渡されます。
この例では、 usage
変数はスクリプトの関数の一般的な説明で初期化されます。スクリプトを実行すると、関数を jcs:output()
呼び出して使用の記述を CLI に出力します。これにより、スクリプトが正しい目的で使用されていることを確認できます。
このスクリプトは関数を jcs:get-input()
呼び出し、インターフェイスの名前を無効にするよう求め、インターフェイス名を 変数に interface
格納します。この変数は config-changes
、デバイスに読み込む Junos XML 設定データを格納し、変数を interface
参照します。テンプレート呼び出しは jcs:load-configuration
、変数に configuration
格納されたデータにパラメーターの値を config-changes
設定します。
変数は load-action
、 に merge
設定され、新しいコンフィギュレーション・データと候補コンフィギュレーションがマージされます。これは、CLI 設定モード コマンドと同等です load merge
。
変数は options
、コミット操作のオプションを定義します。演算子を :=
使用してノードセットを作成し、パラメーターの commit-options
値としてテンプレートに渡します。この例では、 log
将来参照できるように、コミットログにコミットの説明を追加するタグを含めています。
この関数の jcs:open()
呼び出しは、ローカルデバイス上のJunos OS管理プロセス(mgd)との接続を開き、変数に格納されている接続ハンドルを conn
返します。次に、このスクリプトがテンプレートを jcs:load-configuration
呼び出します。
オペレーターは :=
、テンプレート呼び出しの結果を jcs:load-configuration
一時変数にコピーし、その変数に対して関数を node-set
実行します。結果として得られるノードセットは、その変数に results
格納されます。演算子は :=
、スクリプトがコンテンツに results
アクセスできるように、変数が結果ツリー フラグメントではなくノードセットであることを確認します。
この機能は jcs:close()
、デバイスへの接続を閉じます。デフォルトでは、テンプレートは jcs:load-configuration
CLIにメッセージを出力しません。この例では、応答で検索してメッセージを出力 xmn:warning
し xnm:error
、コミットの問題を迅速に特定します。
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"; ns ext = "http://xmlsoft.org/XSLT/namespace"; import "../import/junos.xsl"; match / { <op-script-results> { var $usage = "This script disables the specified interface." _ "The script modifies the candidate configuration to disable " _ "the interface and commits the configuration to activate it."; var $temp = jcs:output($usage); var $interface = jcs:get-input("Enter interface to disable: "); var $config-changes = { <configuration> { <interfaces> { <interface> { <name> $interface; <disable>; } } } } var $load-action = "merge"; var $options := { <commit-options> { <log> "disabling interface " _ $interface; } } var $conn = jcs:open(); var $results := { call jcs:load-configuration( $action=$load-action, $commit-options=$options, $configuration=$config-changes, $connection=$conn); } var $close-results = jcs:close($conn); if ($results//xnm:error) { for-each ($results//xnm:error) { <output> message; } } if ($results//xnm:warning) { for-each ($results//xnm:warning) { <output> message; } } } }
検証
コミットの検証
目的
コミットが成功したことを確認します。
アクション
エラーや警告がテンプレートから返されるノードセットを解析するコードをスクリプトに jcs:load-configuration
含める必要があります。これにより、コミットが成功したかどうかを簡単に判断できます。警告やエラー メッセージがない場合は、いくつかの方法でコミットが成功していることを確認できます。
コミット ログを確認して、コミットが成功したことを確認します。パラメーターに
commit-options
オプションをlog
含める場合、コミットログにコミット情報とともにメッセージを表示する必要があります。user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via junoscript disabling interface so-0/0/0
syslog メッセージ ファイルを確認して、コミット操作がログに記録されたことを確認します。この場合、無効な
SNMP_TRAP_LINK_DOWN
インターフェイスso-0/0/0のメッセージも表示されます。traceoptions の構成設定によっては、このメッセージがログ ファイルに表示される場合とそうでない場合があります。user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation (comment: disabling interface so-0/0/0) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
設定変更の検証
目的
正しい変更が設定に統合されていることを確認します。
アクション
設定を表示し、指定されたインターフェイスに対して変更が表示されていることを確認します。
user@host> show configuration interfaces so-0/0/0 disable;
この例では、 オペレーショナルモードコマンドを
show interfaces interface-name
発行して、インターフェイスが無効であることを確認することもできます。この場合、インターフェイスが無効になる 前に キャプチャされた出力は、 インターフェイスがEnabled
であることを示しています。user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
インターフェイスを無効にするスクリプトを実行した 後 にキャプチャされた出力は、インターフェイスが今
Administratively down
であることを示しています。user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None