Junos PyEZ を使用して Junos デバイスのレスキュー設定を管理する
Junos PyEZ jnpr.junos.utils.config.Config ユーティリティを使用すると、Junosデバイス上のレスキュー設定を管理できます。レスキュー設定では、動作確認済みの設定や、いつでも復元できる既知の状態の設定を定義できます。レスキュー設定は、既知の設定に戻す必要がある場合や、ルーターやスイッチの設定、バックアップの設定ファイルが修復できないほど破損した場合の最後の手段として使用します。
レスキュー構成を管理する方法
この jnpr.junos.utils.config.Config ユーティリティを使用すると、Junos デバイス上のレスキュー設定を保存、取得、ロード、および削除できます。クラスのインスタンスConfigを作成したら、この rescue() メソッドを使用してレスキュー構成を管理します。method action パラメーターを目的の操作に設定rescue()して、レスキュー構成に対して実行するアクションを指定します。有効なアクション値には"save"、、 、 、 "get""reload""delete"が含まれます。次の例は、各rescue()メソッドアクションのメソッド呼び出しを示しています。
レスキュー設定の保存
レスキュー設定を作成すると、デバイスは最後にコミットされた設定をレスキュー設定として保存します。アクティブなコンフィギュレーションをレスキューコンフィギュレーションとして保存するには、メソッド引数rescue()リストで を指定しますaction="save"。この操作により、既存のレスキュー設定が上書きされます。例えば:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
cu.rescue(action='save')
レスキュー設定の取得
既存のレスキュー設定を取得するには、 を指定しaction="get"、オプションで形式"json"を 、 "text" または "xml"として指定します。形式を指定しない場合、既定の形式はテキストです。デバイスに既存のレスキュー構成がない場合、メソッドNoneは rescue() を返します。
次の例では、レスキュー設定を取得して出力します (存在する場合)。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from lxml import etree
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
rescue = cu.rescue(action='get', format='xml')
if rescue is None:
print ('No existing rescue configuration.')
else:
print (etree.tostring(rescue, encoding='unicode'))
レスキュー設定の読み込みとコミット
既存のレスキュー構成を候補構成にロードするには、 を指定します action="reload"。レスキュー設定が存在しない場合、ロード操作 Falseは を返します。レスキュー設定を読み込んだ後、設定をコミットして、デバイス上でアクティブな設定にする必要があります。
次の例では、レスキュー設定の読み込みを試み、存在する場合はコミットしてアクティブな設定にします。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
rescue = cu.rescue(action='reload')
if rescue is False:
print ('No existing rescue configuration.')
else:
cu.pdiff()
cu.commit()
レスキュー設定の削除
既存のレスキュー設定を削除するには、 を指定します action="delete"。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
cu.rescue(action='delete')
例:Junos PyEZ を使用したレスキュー設定の保存
この例では、Junos PyEZ jnpr.junos.utils.config.Config ユーティリティを使用して、Junos デバイスにレスキュー設定を保存します(まだ存在しない場合)。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
Python 3.5 以降および Junos PyEZ リリース 2.0 以降を実行する構成管理サーバー
NETCONFが有効で、適切な権限で設定されたユーザーアカウントを備えたJunosデバイス
サーバーとJunosデバイス上の適切なユーザーに対して設定されたSSH公開鍵と秘密鍵のペア
概要
この例では、Junos PyEZ Config ユーティリティを使用して、指定したデバイスにレスキュー設定を保存するPythonアプリケーションを紹介します。レスキュー設定では、動作確認済みの設定や、いつでも復元できる既知の状態の設定を定義できます。レスキュー設定を作成すると、デバイスは最後にコミットされた設定をレスキュー設定として保存します。
Python アプリケーションは、Junos デバイスとConfigの接続を処理するクラス、ターゲットデバイスでレスキュー設定操作を実行するために使用されるクラス、モジュールからjnpr.junos.exception必要な例外(Junos デバイスの管理時に発生する例外を含む)をインポートDeviceします。ターゲット デバイスのインスタンスを作成Deviceした後、メソッドは open() デバイスとの接続と NETCONF セッションを確立します。
アプリケーションは、まず、ターゲット デバイスに既存のレスキュー構成があるかどうかを判断します。レスキュー構成が存在する場合は、標準出力に出力されます。既存のレスキュー設定がない場合、アプリケーションはレスキュー設定を作成するようにデバイスに指示します。method パラメーターは"get"、既存のレスキュー構成を取得するために に設定され、 rescue() 存在しない場合はレスキュー構成を作成するために に設定されます"save"。action
レスキュー設定操作を実行した後、アプリケーションはメソッド close() を呼び出して NETCONF セッションと接続を終了します。アプリケーションには、デバイスへの接続時に発生するエラーなどの ConnectError 例外を処理するためのコードが含まれています。アプリケーションには、発生する可能性のある追加の例外を処理するコードも含まれています。
構成
Junos PyEZアプリケーションを作成する
手順
Junos PyEZ を使用してレスキュー設定を保存する Python アプリケーションを作成するには、次の手順に従います (Junos デバイスにまだ存在しない場合)。
必要なモジュール、クラス、およびオブジェクトをインポートします。
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError
必要な変数(この例では管理対象デバイスのホスト名を含む)を含めます。
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インスタンスを作成します。# Create an instance of Config cu = Config(dev)
既存のレスキュー構成を印刷するか、存在しない場合は保存します。
# Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err)
NETCONF セッションを終了し、デバイスとの接続を閉じます。
# End the NETCONF session and close the connection dev.close()
結果
構成管理サーバーで、完成したアプリケーションを確認します。アプリケーションに目的のコードが表示されない場合は、この例の手順を繰り返してアプリケーションを修正します。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConnectError
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
# Create an instance of Config
cu = Config(dev)
# Print existing rescue configuration or save one if none exists
try:
rescue = cu.rescue(action='get', format='text')
if rescue is None:
print ('No existing rescue configuration.')
print ('Saving rescue configuration.')
cu.rescue(action='save')
else:
print ('Rescue configuration found:')
print (rescue)
except Exception as err:
print (err)
# End the NETCONF session and close the connection
dev.close()
if __name__ == "__main__":
main()
Junos PyEZコードを実行します。
アプリケーションの実行
Junos PyEZコードを実行するには:
-
構成管理サーバーで、アプリケーションを実行します。
user@server:~$ python3 junos-pyez-config-rescue-create.py No existing rescue configuration. Saving rescue configuration.
この例では、ターゲットデバイスには既存のレスキュー設定がないため、デバイスはレスキュー設定を保存します。アプリケーションを 2 回目に実行すると、初回実行時に保存されたレスキュー設定が出力されます。