Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Junos PyEZ を使用して Junos デバイスにソフトウェアをインストールする

Junos PyEZ jnpr.junos.utils.sw.SW ユーティリティを使用すると、Junos デバイスにソフトウェア イメージをインストールまたはアップグレードできます。メソッドは、 install() 指定されたソフトウェア パッケージをインストールします。

このトピックでは、サポートされている導入シナリオ、ソフトウェア イメージの場所を指定する方法、Junos PyEZ を使用してデバイスをアップグレードする場合の一般的なインストール プロセスとオプションについて説明します。また、Junos PyEZ を使用して、VM ホストのアップグレード、統合型無停止ソフトウェア アップグレード(統合型 ISSU)、これらの機能をサポートするデバイスでのノンストップ ソフトウェア アップグレード(NSSU)など、より特殊なアップグレード シナリオを実行する方法についても説明します。

サポートされている導入シナリオ

Junos PyEZ jnpr.junos.utils.sw.SW ユーティリティを使用すると、個々の Junos デバイスまたは混合または非混在のバーチャル シャーシのメンバーにソフトウェア イメージをインストールまたはアップグレードできます。以下のシナリオがサポートされています。

  • 単一のルーティング エンジンを搭載したスタンドアロン デバイス

  • デュアルルーティングエンジンを搭載したスタンドアロンデバイス

  • 混合モード構成および非混合モード構成の EX シリーズ バーチャル シャーシ

  • 混合モード構成と非混合モード構成の QFX シリーズ バーチャル シャーシ

  • EX シリーズと QFX シリーズが混在したバーチャル シャーシ

  • VMホストをサポートするルーティングエンジンでのVMホストのアップグレード

  • 統合型 ISSU や NSSU など、何らかのイン サービス 機能を有効にした導入構成

メモ:

このユーティリティは jnpr.junos.utils.sw.SW 、MXシリーズバーチャルシャーシ、SRXシリーズシャーシクラスター、またはVCF(バーチャルシャーシファブリック)のデバイスのアップグレードをサポートしていません。

ソフトウェア イメージの場所を指定する方法

Junos PyEZ を使用して Junos デバイスにソフトウェアをインストールする場合、ソフトウェア イメージを構成管理サーバーにダウンロードし install() 、インストールを実行する前にこの方法がターゲット デバイスにコピーします。また、ターゲット デバイスにすでに存在するイメージ、またはターゲット デバイスから到達可能な URL にあるイメージをインストールするようにメソッドに指示 install() することもできます。

表 1 は、ソフトウェア パッケージの install() 場所に応じて設定する必要があるメソッド パラメーターの概要を示しています。メソッドの呼び出しには、常に package または pkg_set パラメーターのいずれかを install() 含める必要があります。

表 1:install()ソフトウェア パッケージの場所のメソッド パラメーター設定

ソフトウェア パッケージの場所

no_copy パラメーター

package または pkg_set パラメータ

remote_path パラメーター

構成管理サーバー

省略または に設定 False

Junos PyEZ を実行しているローカル サーバー上のソフトウェア パッケージまたはパッケージのファイル 名を含むファイル パス。

(オプション)パッケージまたはパッケージがコピーされるターゲット デバイス上のディレクトリへのパス。デフォルトは /var/tmp です

ターゲットデバイス

に設定 True

ソフトウェア パッケージまたはパッケージのファイル名。

(オプション)パッケージまたはパッケージが既に存在する必要があるターゲット デバイス上のディレクトリへのパス。デフォルトは /var/tmp です

Url

ソフトウェア パッケージがインストールされている対象の Junos デバイスの観点から URL を選択します。

引数は package 、単一の Junos デバイスまたは混合されていないバーチャル シャーシのメンバーにソフトウェアをインストールするために使用されます。引数は package 、単一ソフトウェア・イメージを指定するストリングです。例えば:

この引数は pkg_set 、混合バーチャル シャーシ内のメンバーにソフトウェアをインストールするために使用されます。さまざまなバーチャル シャーシ メンバーに必要なソフトウェア イメージを指定する文字列のリストまたはタプルが含まれています。例えば:

Junos PyEZ を実行しているローカル サーバーに存在するパッケージの場合、引数を no_copy 省略するか、 に False設定すると、サーバーは指定されたソフトウェア パッケージをデバイスにコピーします。引数を package 含めると、サーバーはパッケージをターゲット デバイス(混在しないバーチャル シャーシ内の個々のデバイスまたはプライマリ ルーターまたはスイッチ)にコピーし、引数を含 pkg_set めると、リスト内のすべてのパッケージが混合バーチャル シャーシ内のプライマリ ルーターまたはスイッチにコピーされます。デフォルトでは、引数が異なるディレクトリを指定しない限り、ソフトウェア・イメージは /var/tmp ディレクトリーに remote_path 配置されます。

引数を no_copy True に設定した場合、インストールが開始される前に、必要なソフトウェア パッケージがターゲット デバイスまたはバーチャル シャーシ プライマリ デバイスに存在している必要があります。パッケージは、引数で指定された remote_path ディレクトリ、または省略された場合 remote_path はデフォルト の /var/tmp ディレクトリのいずれかに存在する必要があります。

Junos PyEZ は、URL からのソフトウェア イメージのインストールもサポートしています。この場合、 または pkg_setpackage値は、ターゲットの Junos デバイスの観点から URL である必要があります。パッケージは上にコピーされ、指定された URL からインストールされno-copy、および remote_path 引数は無視されます。URL の形式の指定については、 Junos OS CLI コマンドでファイル名と URL を指定するためのフォーマットを参照してください。

インストール プロセスの概要

Junos デバイスにソフトウェア イメージをインストールするには、Junos PyEZ アプリケーションが個々のデバイスまたはバーチャル シャーシ内のプライマリ デバイスに接続し、ユーティリティの SW インスタンスを作成して、必要な引数またはオプションの引数を指定してメソッドを呼び出します install() 。例えば:

メソッド パラメーターの現在の install() リストについては、 install()を参照してください。

ソフトウェア パッケージが構成管理サーバー上にあり、 no_copy パラメーターが省略または False に設定されている場合、 install() このメソッドはソフトウェアをインストールする前に次の操作を実行します。

  • 引数で指定されたアルゴリズムを使用して、ローカル ソフトウェア パッケージまたはパッケージのチェックサムをchecksum_algorithm計算します(チェックサムがまだ引数を通じてchecksum提供されていない場合)。受け入れ可能なchecksum_algorithm値は 、 "md5""sha1"および "sha256"です。デフォルトは."md5"

  • に設定されていない限り cleanfs 、ターゲット デバイスでストレージのクリーンアップを実行し、ソフトウェア パッケージの領域を作成します False

  • SCPまたはFTPは、同じ名前のファイルがデバイス上のターゲットの場所に存在しない場合remote_path、パッケージremote_pathをディレクトリにコピーするか、指定されていない場合は/var/tmpディレクトリにコピーします。

  • リモート ファイルのチェックサムを計算し、ローカル ファイルの値と比較します。

ソフトウェア パッケージがターゲット デバイスにインストールされた後、最初にダウンロードされたか、構成管理サーバーからメソッドによって install() コピーされたか、ターゲット デバイスによって URL からコピーされたかに関係なく、メソッドは install() 以下の操作を実行します。

  • パラメーターが True に設定されている場合 validate 、新しいパッケージに対して構成を検証します。

  • に設定されていない限り all_re 、すべてのルーティング エンジンにパッケージをインストールします。 False

メモ:

リリース 2.1.5 以降、Junos PyEZ はデフォルトで、バーチャル シャーシ内の個々のデバイスおよびメンバー上のすべてのルーティング エンジンをアップグレードします。以前のリリースまたは Junos PyEZ の場合 all_re=Falseは、接続されているルーティング エンジンのみをアップグレードします。

Junos PyEZ リリース 2.5.0 以降、 install() メソッドはインストールのステータスとメッセージ文字列を含むタプルを返します。以前のリリースでは、メソッドはインストールのステータスのみを返します。ステータスは、 True インストールが成功した False かどうか、それ以外の場合はです。メッセージ文字列は、インストールの成功または失敗に関する追加情報を提供し、Junos PyEZ またはデバイスによって生成された情報メッセージやエラー メッセージを含めることができます。例えば:

この方法では、デバイスはinstall()自動的に再起動されません。インストールが完了した後にデバイスを再起動またはシャットダウンするには、それぞれ または shutdown() メソッドをreboot()呼び出します。

次のビデオでは、Junos PyEZ を使用して Junos OS をインストールする方法を示す短い Python セッションを紹介します。

インストールとチェックサムのタイムアウトを指定する方法

Junos PyEZ は NETCONF セッションを介して操作を実行します。NETCONF RPC のタイムアウト時間のデフォルト時間は 30 秒です。インストール プロセス中、Junos PyEZ は、デバイスにパッケージをコピーしてインストールする場合は RPC タイムアウト間隔を 1800 秒(30 分)に、チェックサムを計算する場合は 300 秒(5 分)に増加します。場合によっては、インストール プロセスまたはチェックサムの計算がこれらの時間間隔を超える場合があります。

インストール プロセスとチェックサム計算のタイムアウト値を大きくするには、メソッドの呼び出しにそれぞれ および checksum_timeout パラメーターをinstall()timeoutめ、適切な値に設定します。例えば:

インストール プロセスのログ記録方法

Junos PyEZ インストール・プロセスでは、メソッド呼び出しに 引数を組み込progressむことで、インストールの進行状況を表示またはログにinstall()記録できます。引数はコールバック関数に設定され、インスタンスとレポート文字列引数を含むDevice関数プロトタイプが定義されている必要があります。基本レポートの使用sw.progress()を設定progress=Trueすることもできます。

次の例では、関数を使用してインストールの進行状況を myprogress 印刷します。

進捗出力はユーザー定義形式です。

VM ホストのアップグレードを実行する方法

VMホストをサポートするルーティングエンジンを搭載したデバイスでは、Junos OSはLinuxベースのホスト(VMホスト)上で仮想マシン(VM)として動作します。ホストOSと互換性のあるJunos OSをアップグレードするVMホストアップグレードには、VMホストインストールパッケージ(junos-vmhost-install-x.tgz)が必要で、RPCに対応する運用モードコマンドを使用してrequest vmhost software add<request-vmhost-package-add>実行されます。

Junos PyEZ リリース 2.1.6 以降、このメソッドは sw.install() VM ホスト アップグレードの vmhost=True 実行の引数をサポートしています。引数が vmhost=True 存在する場合、 sw.install() メソッドは RPC ではなく RPC を <request-vmhost-package-add> 使用してインストールを実行します <request-package-add>

以下の例では、単一のルーティング エンジン デバイス上で Junos OS とホスト OS の両方をアップグレードし、再起動します。

Junos OSソフトウェアのみを再起動するには、代わりにメソッドを sw.reboot() 呼び出します。

統合型 ISSU または NSSU を実行する方法

Junos PyEZ は、この機能をサポートし、必要な要件を満たすデバイスで、統合型無停止ソフトウェア アップグレード(統合型 ISSU)またはノンストップ ソフトウェア アップグレード(NSSU)の実行をサポートします。 表 2 は、統合型 ISSU と NSSU 機能が最初にサポートされる Junos PyEZ リリースの概要を示しています。統合型 ISSU と NSSU の詳細については、製品のソフトウェアマニュアルを参照してください。

表 2:Junos PyEZ 統合型 ISSU と NSSU のサポート

Junos PyEZ リリース

機能サポート

2.1.0

デュアル ルーティング エンジン Junos デバイスでの統合型 ISSU および NSSU のサポート。

2.1.6

コマンドを使用 request vmhost software in-service-upgrade して、ホストOSとJunos OSの統合インサービスソフトウェアアップグレードを実行するVMホストサポート搭載デバイスの、VMホストアップグレード中の統合型ISSUのサポート。

統合型 ISSU 機能により、制御プレーンを中断せずに、トラフィックの中断を最小限に抑えながら、2 つの異なる Junos OS リリース間でアップグレードできます。この機能をサポートするデバイスで統合型インサービス ソフトウェア アップグレードを実行するには、メソッドに issu=True 引数を install() 含めます。

次の例では、方法が install() 両方のルーティング エンジンで Junos OS をアップグレードし、インストール プロセスの一環として新しいプライマリ ルーティング エンジン(以前は古いバックアップ ルーティング エンジン)を再起動します。インストールが成功した場合、 reboot() メソッドは接続されたルーティングエンジン(以前は古いプライマリルーティングエンジン)の新しいバックアップルーティングエンジンを再起動します。

ルーティング エンジンで、必要な要件を満たし、統合型 ISSU をサポートする VM ホストをサポートする統合型インサービス ソフトウェア アップグレードを実行するには、メソッドに および issu=True 引数をinstall()含めますvmhost=True。デバイスは、RPCを使用して、1つのホストOSとJunos OSリリースから要求されたリリースに<request-vmhost-package-in-service-upgrade>アップグレードします。

NSSU機能により、スイッチまたはバーチャルシャーシ上で動作するJunos OSソフトウェアを、冗長ルーティングエンジンでアップグレードし、ネットワークトラフィックの中断を最小限に抑えることができます。この機能をサポートするデバイスでノンストップ ソフトウェア アップグレードを実行するには、 メソッドに 引数をnssu=Trueinstall()含めます。例えば:

例:Junos PyEZ を使用して Junos デバイスにソフトウェアをインストールする

Junos PyEZ ライブラリは、Junos デバイスで運用タスクと設定タスクを実行する方法を提供します。この例では、Junos PyEZ jnpr.junos.utils.sw.SW ユーティリティを使用して Junos デバイスにソフトウェア イメージをインストールまたはアップグレードする方法について概要を説明します。

要件

この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。

  • Python 3.5 以降および Junos PyEZ リリース 2.5 以降を実行する構成管理サーバー

  • NETCONF が有効な Junos デバイスと、適切な権限で構成されたユーザー アカウント

  • Junos PyEZサーバーとJunosデバイス上の適切なユーザーに設定されたSSHパブリック/プライベートキーペア

概要

この例では、Junos PyEZ SW ユーティリティを使用して、指定されたデバイス上の Junos OS をアップグレードする Python アプリケーションを示します。この例では、ソフトウェア イメージがローカル サーバーに存在することを前提としています。

アプリケーションは、Junos デバイスとの接続を処理する Junos PyEZ Device クラス、ターゲット デバイスSWでのソフトウェア インストール操作の実行に使用されるクラス、モジュールからのjnpr.junos.exception例外(Junos デバイスの管理時に発生する例外を含む)をインポートします。アプリケーションは、ソフトウェア パッケージの存在をos検証し、logging基本的なロギング機能を実行するための 、 sys、および Python モジュールもインポートします。

アプリケーションは、インストールの進行状況を update_progress() 報告するメソッドによって install() 使用されるメソッドを定義します。インストール プロセスをログに記録することで、障害が発生したポイントをより簡単に特定できます。この例では、進捗メッセージが標準出力に送信され、別のファイルに記録されます。

デバイスに接続し、インストールを進める前に、アプリケーションは最初にソフトウェア パッケージが存在することを確認します。ファイルが見つからない場合、アプリケーションはエラー メッセージで終了します。ファイルが存在する場合、アプリケーションはターゲット デバイスのインスタンスを Device 作成し、メソッドを open() 呼び出して接続を確立し、デバイスとの NETCONF セッションを確立します。

アプリケーションはユーティリティのインスタンスを SW 作成し、 メソッドを install() 使用してターゲットデバイスにJunos OSソフトウェアイメージをインストールします。変数は package 、ローカル サーバー上の新しい Junos OS イメージへのパスを定義します。このパラメーターのデフォルト値は no_copy False であるため、インストール プロセスによって、ソフトウェア イメージがローカル サーバーからターゲット デバイスにコピーされます。変数は remote_path 、ソフトウェア パッケージがコピーされるターゲット デバイス上のパスを定義します。デフォルトは /var/tmp です。必須ではありませんが、この例では明確にするために パラメーターを明示的に設定します。

メソッドが install() 呼び出されると、アプリケーションは次のようになります。

  • ソフトウェア イメージのローカル MD5 チェックサムを計算します。

  • ターゲットデバイスでストレージのクリーンアップを実行します。

  • ソフトウェア イメージをターゲット デバイスにコピーします。

  • リモート MD5 チェックサムを計算し、それをローカル値と比較します。

  • 新しいイメージに対して構成を検証します。

  • パッケージをインストールします。

インストールが成功すると、アプリケーションはメソッドを reboot() 呼び出してデバイスを再起動します。インストールを実行した後、アプリケーションはメソッドを close() 呼び出して NETCONF セッションと接続を終了します。アプリケーションには、デバイスへの接続時やインストールの実行時に発生する可能性のある例外を処理するためのコードが含まれています。

構成

Junos PyEZ アプリケーションの作成

手順

Junos PyEZ を使用して Junos デバイスにソフトウェア イメージをインストールする Python アプリケーションを作成するには、次の手順に従います。

  1. 必要なモジュール、クラス、オブジェクトをインポートします。

  2. この例では、管理対象デバイスのホスト名、ソフトウェアパッケージパス、ログファイルを含む必要な変数を含めます。

  3. アプリケーション内およびメソッドで使用されるロギング方法を定義します install()

  4. 関数定義と関数呼び出しを main() 作成し、残りのステートメントを定義内に置きます。

  5. ロガー インスタンスを初期化します。

  6. (オプション)ソフトウェア パッケージの存在を確認するコードを追加します。

  7. クラスのインスタンスを Device 作成し、その特定の接続に必要なホスト名とパラメーターを指定します。

    その後、接続を開き、デバイスとの NETCONF セッションを確立します。

  8. ユーティリティのインスタンスを作成します SW

  9. ソフトウェア パッケージをインストールし、インストールが成功した場合にデバイスを再起動するコードを含めます。

  10. NETCONF セッションを終了し、デバイスとの接続を閉じます。

結果

構成管理サーバーで、完了したアプリケーションを確認します。アプリケーションに意図したコードが表示されない場合は、この例の手順を繰り返してアプリケーションを修正します。

Junos PyEZ アプリケーションを実行する

アプリケーションの実行

  • 構成管理サーバーで、アプリケーションを実行します。

検証

インストールの確認

目的

ソフトウェアのインストールが正常に完了したことを確認します。

アクション

インストールの詳細については、標準出力とアプリケーションで定義されているログファイルの両方に送信される進行状況メッセージを確認してください。ここには、ログ ファイルの出力例が示されています。簡潔にするために一部の出力を省略しました。

意味

ログファイルの内容は、イメージがターゲットデバイスに正常にコピーされ、インストールされたことを示しています。

トラブルシューティング

タイムアウトエラーのトラブルシューティング

問題

アプリケーションが RpcTimeoutError メッセージまたは TimeoutExpiredError メッセージを生成し、インストールが失敗します。

長い操作が RPC タイムアウト間隔を超える場合、特に遅いデバイスでは、操作を完了する前に RPC がタイムアウトすることがあります。NETCONF RPC のタイムアウト時間のデフォルト時間は 30 秒です。Junos PyEZ は、インストール プロセス中に、チェックサムを計算する場合は RPC タイムアウト間隔を 300 秒(5 分)に、デバイスにパッケージをコピーしてインストールする場合は 1800 秒(30 分)に増加します。

ソリューション

インストール操作や、デフォルトのインストール時間やチェックサムタイムアウト時間よりも長い時間が必要になる可能性があるチェックサム操作に対応するには、メソッドtimeoutchecksum_timeoutパラメーターをinstall適切な値に設定し、アプリケーションを再実行します。例えば:

リリース履歴テーブル
リリース
説明
2.5.1
Junos PyEZ リリース 2.5.0 以降、 install() メソッドはインストールのステータスとメッセージ文字列を含むタプルを返します。
2.1.5
リリース 2.1.5 以降、Junos PyEZ はデフォルトで、バーチャル シャーシ内の個々のデバイスおよびメンバー上のすべてのルーティング エンジンをアップグレードします。