このページの目次
例:Junos PyEZ を使用して設定をロールバックする
Junos PyEZライブラリを使用すると、Junosデバイスの運用タスクや設定タスクを実行できます。この例では、Junos PyEZ jnpr.junos.utils.config.Config
ユーティリティを使用して、Junos デバイスの設定をロールバックします。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
Python 3.5 以降および Junos PyEZ リリース 2.0 以降を実行する構成管理サーバー
NETCONFが有効で、適切な権限で設定されたユーザーアカウントを備えたJunosデバイス
サーバーとJunosデバイス上の適切なユーザーに対して設定されたSSH公開鍵と秘密鍵のペア
概要
この例では、Junos PyEZ Config
ユーティリティを使用して、指定したデバイスの設定をロールバックするPythonアプリケーションを紹介します。Junosデバイスには、直近にコミットされた設定のコピーと、それ以前の設定が最大49個保存されます。保存されている任意の設定にロールバックできます。これは、設定の変更によって望ましくない結果が生じ、動作確認済みの設定に戻したい場合に有効です。設定のロールバックは、デバイスの設定変更を行うプロセスと似ていますが、設定データを読み込む代わりに、ロールバックを実行し、候補の設定全体を以前にコミットした設定に置き換えます。
Python アプリケーションは、Junos デバイスとConfig
の接続を処理するクラス、ターゲット デバイスで設定モード コマンドを実行するために使用されるクラス、モジュールからjnpr.junos.exception
必要な例外(Junos デバイスの管理時に発生する例外を含む)をインポートDevice
します。
ターゲット デバイスのインスタンスを作成 Device
した後、メソッドは open()
デバイスとの接続と NETCONF セッションを確立します。その後、このユーティリティメソッドは Config
、候補の構成をロック、ロールバック、コミット、ロック解除します。
この rollback()
メソッドには、 rb_id
ロードする保存済みコンフィギュレーションを指定するロールバックIDである1つのパラメータがあります。有効な値は、0(直近にコミットされた構成の場合はゼロ)から、以前の構成を保存した数(最大は 49)より 1 つ減らした値です。メソッド呼び出しでこのパラメーターを省略すると、既定値は 0 になります。この例では、アクティブ コンフィギュレーションの直前にコミットされたコンフィギュレーションであるロールバック ID 1 でコンフィギュレーションを読み込みます。このメソッドは rollback()
、コンフィギュレーションを候補コンフィギュレーションに読み込み、メソッドを呼び出す commit()
ことによってアクティブにすることをコミットします。
ロールバックして設定をコミットした後、アプリケーションはメソッド close()
を呼び出してNETCONFセッションと接続を終了します。アプリケーションには、コンフィギュレーションのロック時に発生するエラーやCommitError
、コミット操作中に発生するエラーなどの例外LockError
を処理するためのコードが含まれています。アプリケーションには、発生する可能性のある追加の例外を処理するコードも含まれています。
構成
Junos PyEZアプリケーションを作成する
手順
Junos PyEZ を使用して Junos デバイスで設定をロールバックする Python アプリケーションを作成するには、次の手順に従います。
必要なモジュール、クラス、およびオブジェクトをインポートします。
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError
必要な変数(この例では管理対象デバイスのホスト名を含む)を含めます。
host = 'dc1a.example.com'
main()
関数定義と関数呼び出しを作成し、残りのステートメントを定義内に配置します。def main(): if __name__ == "__main__": main()
クラスのインスタンス
Device
を作成し、その特定の接続に必要なホスト名とパラメーターを指定します。dev = Device(host=host)
接続を開き、デバイスとの NETCONF セッションを確立します。
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
ユーティリティの
Config
インスタンスを作成します。# Set up config object cu = Config(dev)
設定をロックします。
# Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return
ロールバックして設定をコミットし、エラーがあれば処理します。
# Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err))
設定のロックを解除し、NETCONF セッションを終了してデバイスとの接続を閉じます。
finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return
結果
構成管理サーバーで、完成したアプリケーションを確認します。アプリケーションに目的のコードが表示されない場合は、この例の手順を繰り返してアプリケーションを修正します。
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError host = 'dc1a.example.com' def main(): dev = Device(host=host) # open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return # Set up config object cu = Config(dev) # Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return # Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err)) finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return if __name__ == "__main__": main()
Junos PyEZコードを実行します。
アプリケーションの実行
Junos PyEZコードを実行するには:
-
構成管理サーバーで、アプリケーションを実行します。
user@server:~$ python3 junos-pyez-config-rollback.py Locking the configuration Rolling back the configuration Committing the configuration Unlocking the configuration
検証
設定の確認
目的
Junosデバイスで、設定が正しくロールバックされたことを確認します。
アクション
Junosデバイスにログインし、設定または設定の相違点とログファイルを表示します。例えば:
user@dc1a> show configuration | compare rollback 1 [edit system scripts op] - file bgp-neighbors.slax; [edit interfaces] - ge-1/0/0 { - unit 0 { - family inet { - address 198.51.100.1/26; - } - } - } + ge-1/1/0 { + unit 0 { + family inet { + address 198.51.100.65/26; + } + } + }
user@dc1a> show log messages Sep 19 12:42:06 dc1a sshd[5838]: Accepted publickey for user from 198.51.100.1 port 58663 ssh2: RSA 02:dd:53:3e:f9:97:dd:1f:d9:31:e9:7f:82:06:aa:67 Sep 19 12:42:10 dc1a file[5841]: UI_LOAD_EVENT: User 'user' is performing a 'rollback 1' Sep 19 12:42:11 dc1a file[5841]: UI_COMMIT: User 'user' requested 'commit' operation (comment: none) Sep 19 12:42:26 dc1a file[5841]: UI_COMMIT_COMPLETED: commit complete
意味
設定の違いとログ ファイルの内容は、設定が正常にロールバックされ、デバイスでコミットされたことを示しています。