Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

イベント スクリプトで RPC と運用モード コマンドを使用する方法

ほとんどの Junos OS 運用モード コマンドには、XML と同等の機能があります。イベント スクリプトは、 リモート プロシージャ コール (RPC)プロトコルを使用して、ローカルまたはリモート デバイスでこれらの XML コマンドを実行できます。XML と同等の操作モードコマンドはすべて 、Junos XML API 運用開発者リファレンスに記載されています。

SLAX スクリプトと XSLT スクリプトは、それぞれ または jcs:execute() 拡張関数を使用してローカル デバイスまたはリモート デバイスで RPC をjcs:invoke()実行します。Python スクリプトでは、RPC は Junos PyEZ API を使用して簡単に実行できます。Junos PyEZ Device クラスの各インスタンスには、rpcJunos XML API を介して利用可能な任意の RPC を実行できるプロパティがあります。ローカルまたはリモートデバイスとのセッションを確立した後、プロパティとRPCメソッド名をデバイスインスタンスにrpc追加してRPCを実行できます。戻り値は、タグの下<rpc-reply>の最初の要素から始まる XML オブジェクトです。

イベント スクリプトでの RPC および運用モード コマンドの使用については、以下のセクションで詳しく説明します。

ローカル デバイスでの RPC の実行

SLAX または XSLT イベント スクリプトでは、ローカル デバイスで RPC を実行するには、RPC を変数宣言に含め、RPC 変数を引数として拡張関数を呼び出します jcs:invoke() 。次のスニペットは、ローカル デバイスで RPC を呼び出します。

XSLT 構文

SLAX 構文

Python イベント スクリプトでは、ローカル デバイスで RPC を実行するには、空の Device 引数リストを使用してインスタンスを作成し、プロパティと RPC メソッド名と引数リストをデバイス インスタンスに追加 rpc します。

Python 構文

メモ:

空の Device 引数リストを使用してインスタンスを作成してローカルデバイスに接続すると、Junos OSは 階層レベルで設定されたユーザーのアクセス権限を [edit event-options event-script file filename python-script-user] 使用します。ステートメントを python-script-user 省略すると、Junos OS は一般の恵まれないユーザーおよびグループ nobodyのアクセス権限を使用します。

リモート デバイスでの RPC の実行

SLAX または XSLT イベント スクリプトでは、リモート デバイスで RPC を実行するには、まず RPC を変数宣言に含め、リモート デバイスへの接続に必要な引数を持つ拡張関数を使用して jcs:open() 接続ハンドルを作成します。その後、拡張関数を jcs:execute() 呼び出し、接続ハンドルと RPC 変数を引数として含めます。例えば:

XSLT 構文

SLAX 構文

Python イベント スクリプトでは、リモート デバイスで RPC を実行するには、まずリモート デバイスへの接続に必要な引数を使用するインスタンス Device を作成します。次に、プロパティと RPC メソッド名と引数リストを rpc デバイス インスタンスに追加して RPC を実行します。

Python 構文

メモ:

Junos OSは、 階層レベルで ステートメントに異なるユーザーが設定されている場合でも、引数リストで指定されたユーザーのアクセス権限をDevice()使用してリモートデバイスに接続し、操作を[edit event-options event-script file filename]python-script-user実行します。

リモート接続の詳細をイベント スクリプトに直接追加しないように、階層レベルでリモート デバイス上で RPC を実行する各イベント スクリプトのリモート実行の詳細を [edit event-options event-script file filename remote-execution] 指定できます。イベント スクリプトではなく、リモート実行の詳細を構成に追加することをお勧めします。すべての情報が 1 つの場所で利用でき、秘密鍵が設定で暗号化されるためです。

RPCが実行される各リモートデバイスについて、デバイスホスト名と対応するユーザー名と秘密鍵を設定します。

イベントの詳細に加えて、リモートホスト名と対応するユーザー名と秘密鍵が、イベントポリシーによって実行されると、イベントスクリプトへの入力として渡されます。イベント スクリプトに転送される詳細については、「イベント スクリプト でイベントとリモート実行の詳細を使用する」を参照してください。

イベント スクリプトは、リモート ホストへの接続の作成に使用される関数の引数リスト内のリモート実行の詳細を参照します。接続が確立されると、スクリプトはそのデバイスで RPC を実行できます。

Python イベント スクリプトでは、Junos PyEZ Device() インスタンスの引数リストでリモート実行の詳細を参照します。次のコードは、そのイベント スクリプト用に構成されたすべてのホストのリモート実行の詳細を繰り返し、各ホストで同じ RPC に接続して実行します。

Python 構文

SLAX スクリプトまたは XSLT スクリプトでは、関数を使用してリモート ホストへの接続を jcs:open() 作成し、引数リストでリモート実行の詳細を参照します。例えば:

XSLT 構文

SLAX 構文

リモートデバイスでRPCを実行するには、SSHセッションを確立する必要があります。スクリプトが接続を確立するためには、スクリプトが実行されるローカルデバイス上のリモートデバイスのSSHホストキー情報を設定するか、リモートデバイスのSSHホストキー情報がスクリプトを実行しているユーザーの既知のホストファイルに存在している必要があります。RPCが実行される各リモートデバイスに対して、以下のいずれかの方法を使用してSSHホストキー情報を設定します。

  • ローカルデバイスでSSH既知のホストを設定するには、 ステートメントを含め、設定の host 階層レベルでリモートデバイスのホスト名とホストキーオプションを [edit security ssh-known-hosts] 指定します。

  • SSHホストキー情報を手動で取得するには、設定モードコマンドを set security ssh-known-hosts fetch-from-server hostname 発行して、Junos OSにリモートデバイスに接続し、キーを追加するよう指示します。

  • ファイルからSSHホストキー情報を手動でインポートするには、設定モードコマンドを set security ssh-known- hosts load-key-file filename 使用し、既知のホストファイルを指定します。

  • または、スクリプトを実行しているユーザーは、ローカルデバイス、リモートデバイスへのSSHにログインしてから、そのユーザーの既知のホストファイルに追加されたホストキーを手動で受け入れることもできます。次の例では、root がルーター1にログインしています。ルーター2でリモートRPCを実行するために、rootは運用モードコマンドを発行してキーを ssh router2 手動で受け入れることで、ルーター2のホストキーを追加します。

必要なSSHホストキーを設定し、リモートデバイスへの接続ハンドルを取得した後、イベントスクリプトはそのリモートデバイスで拡張機能を jcs:execute() 備えたRPCを実行できます。

コマンドの RPC タグの表示

デバイスの CLI で、運用モード コマンドの RPC XML タグを表示できます。コマンドの RPC XML タグを表示するには、パイプ 記号 (|) の後に を入力します display xml rpc

以下の例では、 コマンドの RPC タグを show route 表示しています。

SLAX および XSLT スクリプトは、RPC XML タグを使用して RPC を実行できます。Python スクリプトは、RPC タグとコマンド オプションを Python に適した形式に変換する必要があります。RPC の実行に Junos PyEZ を使用する方法、および RPC タグを対応する Python メソッドおよびメソッド引数にマッピングする方法については、 Junos OS を実行するデバイスで Junos PyEZ を使用して RPC を実行するを参照してください。

イベント スクリプトでの運用モード コマンドの使用

一部の運用モード コマンドには、XML に相当するものがありません。SLAX および XSLT スクリプトは、 要素を使用して XML と同等のコマンドを <command> 実行できます。Python スクリプトは、クラスで定義された Junos PyEZ cli() メソッドを使用して、これらのコマンドを Device 実行できます。

Junos XML API 運用開発者リファレンスにコマンドがリストされていない場合、コマンドに XML と同等のコマンドはありません。コマンドに同等の XML を持っているかどうかを判断するもう 1 つの方法は、 コマンドの後に コマンドを| display xml発行することです。

出力に 、 <cli><banner>などの<output>タグ要素のみが含まれている場合、 コマンドに XML と同等のものがない場合があります。次の例では、出力は、 コマンドにshow host同等の XML がないことを示しています。

メモ:

XML と同等のコマンドを持つ一部のコマンドでは、パイプ | display xml コマンドの出力に 、 <cli><banner> 以外のタグ要素<output>は含まれません。これは、関連する機能が設定されていないためです。たとえば、 show services cos statistics forwarding-class コマンドには応答タグで<service-cos-forwarding-class-statistics>出力を返す XML 同等のものがありますが、設定に 階層レベルに[edit class-of-service]ステートメントが含まれていない場合、コマンドに表示する実際のshow services cos statistics forwarding-class | display xmlデータはありません。出力は次のようになります。

このため、 Junos XML API 運用開発者リファレンス の情報は通常、より信頼性が高くなります。

SLAX および XSLT イベント スクリプトは、XML と同等のコマンドを実行できます。次の<command>コードスニペットに示すように、スクリプト内の 、 <xsl:value-of><output> 、 要素を使用します。このスニペットは拡張され、「例: Op スクリプトを使用した DNS ホスト名情報の表示」で詳しく説明されています。

Python イベント スクリプトは、Junos PyEZ API を使用することで、XML と同等のコマンドを実行できます。クラスで定義されたDeviceメソッドはcli()、運用モード コマンドを実行し、テキスト形式で出力を返します。例えば:

Junos OS XML 要素としてフォーマットされた出力を返すように指定 format='xml' することもできます。Junos PyEZ cli メソッドの詳細については、「 http://junos-pyez.readthedocs.org/en/latest/_modules/jnpr/junos/device.html#Device.cli」を参照してください。