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など、 何らかの形式のインサービス 機能が有効になっている展開構成

メモ:

Junos PyEZリリース2.6.8以降、引数を使用して member_id EXシリーズの仮想シャーシの特定のメンバーにパッケージをインストールできます。

メモ:

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

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

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

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

表 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サーバーはリスト内のすべてのパッケージを混合バーチャルシャーシ内のプライマリルーターまたはスイッチにコピーします。デフォルトでは、ソフトウェアイメージは、引数に別のディレクトリが指定されていない限りremote_path/var/tmpディレクトリに配置されます。

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

Junos PyEZは、URLからのソフトウェアイメージのインストールもサポートしています。この場合、 または pkg_set の値は、packageターゲット Junos デバイスから見た URL でなければなりません。指定した URL からパッケージがコピーされてインストールされ、引数remote_pathno-copy引数は無視されます。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"は です。

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

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

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

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

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

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

メモ:

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

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 分) に延長します。場合によっては、インストール プロセスまたはチェックサム計算がこれらの時間間隔を超えることがあります。

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

インストール プロセスをログに記録する方法

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

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

進行状況の出力は、ユーザー定義の形式です。

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

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

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

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

Junos OSソフトウェアのみを再起動するには、引数を指定せずに メソッドを呼び出し sw.reboot() ます vmhost

統合 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

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

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

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

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

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

EXシリーズのバーチャルシャーシメンバーにソフトウェアをインストールする方法

通常、混在していないEXシリーズの仮想シャーシをアップグレードする場合は、 インストールプロセスの概要 で説明されているインストールプロセスに従って、仮想シャーシ全体をアップグレードします。ただし、バーチャル シャーシ内の特定のメンバー スイッチにソフトウェアをインストールしなければならない場合もあります。Junos PyEZリリース2.6.8以降、引数を使用して member_id EXシリーズ仮想シャーシ内の個々のメンバースイッチにソフトウェアパッケージをインストールできます。引数は member_id 、ソフトウェアをインストールするメンバー ID を指定する文字列のリストです。

例えば、次のJunos PyEZアプリケーションは、EXシリーズバーチャルシャーシのメンバー0とメンバー1のソフトウェアをアップグレードします。

例: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ソフトウェアパッケージの存在を検証し、基本的なロギング機能を実行するために、 、 sys、および logging 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 アプリケーションの実行

アプリケーションの実行

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

検証

インストールの確認

目的

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

アクション

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

意味

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

トラブルシューティング

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

問題

アプリケーションは、RpcTimeoutエラー メッセージまたはタイムアウト期限切れエラー メッセージを生成し、インストールは失敗します。

特に低速のデバイスでは、長い操作が 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は、デフォルトで、バーチャルシャーシ内の個々のデバイスとメンバー上のすべてのルーティングエンジンをアップグレードします。