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() 方法でインストールを実行する前にターゲットデバイスにコピーされます。また、ターゲット デバイスに既に存在するイメージ、またはターゲット デバイスから到達可能な URL に存在するイメージをインストールするように、 install() メソッドに指示することもできます。

表 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からのソフトウェアイメージのインストールもサポートしています。この場合、 package または pkg_set 値は、ターゲットのJunosデバイスから見たURLでなければなりません。指定した URL からパッケージがコピーされてインストールされ、 no-copy 引数と remote_path 引数は無視されます。URL の形式の指定については、 Junos OS CLI コマンドでファイル名と URL を指定するための形式を参照してください。

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

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

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

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

  • checksum 引数でチェックサムが指定されていない場合は、checksum_algorithm 引数で指定されたアルゴリズムを使用して、ローカル ソフトウェア パッケージのチェックサムを計算します。許容されるchecksum_algorithm値は、"md5""sha1"、および "sha256" です。デフォルトは "md5" です。

  • ターゲット デバイスで記憶域のクリーンアップを実行して、ソフトウェア パッケージ用の領域を作成します( cleanfsFalse に設定されていない場合)。

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

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

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

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

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

手記:

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

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

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

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

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

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

インストール プロセスとチェックサム計算のタイムアウト値を増やすには、install() メソッドの呼び出しにそれぞれ timeout パラメーターと checksum_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がアップグレードされます。アップグレードは、<request-vmhost-package-add> RPCに対応するrequest vmhost software add運用モードコマンドを使用して実行されます。

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

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

Junos OS ソフトウェアのみを再起動するには、vmhost 引数を指定せずに 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リリース間でアップグレードできます。この機能をサポートするデバイスで統合インサービス ソフトウェア アップグレードを実行するには、install() メソッドに issu=True 引数を含めます。

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

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

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

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 デバイスの管理時に発生する例外を含む例外)をインポートします。アプリケーションは、ソフトウェアパッケージの存在を検証し、基本的なロギング機能を実行するために、 ossys、および logging Pythonモジュールもインポートします。

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

デバイスに接続してインストールを続行する前に、アプリケーションはまずソフトウェアパッケージが存在することを確認します。ファイルが見つからない場合、アプリケーションはエラー メッセージを表示して終了します。ファイルが存在する場合、アプリケーションはターゲットデバイスの 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分)に増やします。

解決

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

変更履歴テーブル

機能のサポートは、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がプラットフォームでサポートされているかどうかを判断します。

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