項目一覧
例: 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 を実行しているデバイスを使用します。
概要と Op スクリプト
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.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"; 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 メッセージ ファイルをチェックして、コミット操作がログに記録されていることを確認します。この場合、無効なインターフェイスso-0/0/0の
SNMP_TRAP_LINK_DOWN
メッセージも表示されます。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