このページで
例:Python Op スクリプトを使用した設定の変更
Opスクリプトを使用すると、Junos OS設定に制御された変更を行うことができます。運用スクリプトは、デバイスに関する運用情報を収集し、その情報に基づいて設定を更新できるため、有利です。Junos OS に精通した経験豊富なユーザーは、関連する設定情報を入力する op スクリプトを作成し、それに応じて設定を変更できます。これにより、Junos OSの使用経験が少ないユーザーは、スクリプトを使用して設定を安全に変更できます。この例では、Junos PyEZ API を活用する Python op スクリプト を使用して Junos OS 設定を変更する方法を示します。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
Python 拡張パッケージを含む Junos OS リリース 16.1R3 以降を実行する MX シリーズ ルーター。
概要と運用スクリプト
Python op スクリプトは、 Junos PyEZ jnpr.junos.utils.config.Config
ユーティリティを使用して Junos OS 設定を変更できます。Junos PyEZ Config
ユーティリティは、設定のロック、設定データの読み込み、設定への統合方法の指定、設定のコミット、設定のロック解除を行うインスタンスメソッドを提供します。Junos PyEZ を使用して Junos デバイスを設定する方法の詳細については、「 Junos PyEZ を使用して Junos デバイスを設定する」を参照してください。この例の Python op スクリプトは、ローカル デバイスのインターフェイスを無効にするように設定を更新する方法を示しています。
Python op スクリプトは、以下をインポートします。
Device
クラス —Junos デバイスへの接続を処理します。Config
クラス—ターゲット デバイスで設定モード コマンドを実行します。jnpr.junos.exception
モジュール — Junos デバイスの管理時に発生した例外が含まれます。jcs
module — サポートされている拡張機能をスクリプトで実行できます。
この例では、 usage
変数はスクリプトの関数の一般的な説明で初期化されます。スクリプトを実行すると、スクリプトは CLI で使用の説明を出力し、ユーザーがそのスクリプトの目的を検証できるようにします。
このスクリプトは拡張機能を jcs.get_input()
呼び出します。ユーザーはインターフェイスの名前を無効にするよう求め、インターフェイス名を 変数に interface
格納します。 config_xml
この変数は、構成の変更を定義する XML 文字列です。
このスクリプトは、インスタンスの作成時にホスト パラメーターを Device
指定しないため、メソッドが open()
ローカル デバイスとの接続を確立します。この例では、 Config
の mode='exclusive'
コンテキストマネージャーを使用して設定の変更中に排他的ロックを取得することでインスタンスを作成します。このモードでは、コンテキスト マネージャーは、候補の構成のロックとロック解除を自動的に処理します。ユーティリティメソッドは Config
、コンフィギュレーション変更を候補コンフィギュレーションにオペレーションとして読み込み load merge
、コンフィギュレーションをコミットします。メソッドは dev.close()
、接続を閉じます。
Python スクリプト
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
構成
手順
スクリプトをダウンロード、有効化、テストするには、以下の手順にしたがっています。
-
スクリプトをテキスト ファイルにコピーし、 config-change.py ファイルに名前を付け、デバイス上の /var/db/scripts/op/ ディレクトリにコピーします。
メモ:符号なしPythonスクリプトは、junos OS
super-user
ログインクラスのルートまたはユーザーのいずれかが所有する必要があり、ファイルの書き込み権限を持つことができるのはファイル所有者だけです。 -
設定モードでは、 階層レベルで
file config-change.py
ステートメントを[edit system scripts op]
含めます。[edit system scripts] user@host# set op file config-change.py
-
デバイスで符号なしPythonスクリプトの実行を有効にします。
[edit system scripts] user@host# set language python
メモ:Python 3を
language python3
使用してPythonスクリプトを実行するように ステートメントを設定するか、 ステートメントでlanguage python
Python 2.7を使用してPythonスクリプトを実行するように設定します。詳細については、 言語を参照してください。 -
コマンドを
commit and-quit
発行して設定をコミットし、動作モードに戻ります。[edit] user@host# commit and-quit
-
スクリプトを実行する前に、運用モード コマンドを
show interfaces interface-name
発行し、スクリプトによって無効になるインターフェイスの現在の状態を記録します。 -
運用モード コマンドを発行して、op スクリプトを
op config-change.py
実行します。user@host> op config-change.py This script disables the specified interface. 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 Loading and committing configuration changes
検証
コミットの検証
目的
コミットが成功したことを確認します。
アクション
設定の変更とコミットに関連する警告やエラーをキャッチするコードをスクリプトに含める必要があります。これにより、コミットが成功したかどうかを簡単に判断できます。警告やエラー メッセージがない場合は、いくつかの方法でコミットが成功していることを確認できます。
コミット ログを確認して、コミットが成功したことを確認します。
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
syslog メッセージ ファイルを確認して、コミット操作がログに記録されたことを確認します。この場合、無効なインターフェイスの
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 Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) 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