Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

例: スクリプト内の接続のセッションプロトコルを指定する

次の例は、リモート デバイスとの接続を作成するときに、Junos 自動化スクリプト内でセッション プロトコルを指定する方法を示しています。具体的には、 サンプル op スクリプト は、Junos OS を実行しているリモート デバイスとの NETCONF セッションを確立し、NETCONF サーバーの機能を取得して印刷し、そのデバイスの設定を更新してコミットします。

要件

  • Junos OS リリース 11.4 以降を実行するルーティング、スイッチング、またはセキュリティ デバイス。

  • クライアントアプリケーションは、NETCONFサーバーが存在するデバイスにログインできます。

  • SSH経由のNETCONFサービスが、NETCONFサーバが存在するデバイスで有効になっている。

概要とスクリプト

jcs:open()拡張機能には、Junos OSが動作するデバイス上のJunos XMLプロトコルサーバー、またはSSH経由のNETCONFサービスが有効になっているデバイス上のNETCONFサーバーとのセッションを作成するオプションが含まれています。次の例では、スクリプトが接続を作成し、Junos OS を実行しているリモート デバイスとの NETCONF セッションを確立します。接続とセッションが正常に確立されると、スクリプトはリモートデバイスの設定を更新し、 ステートメントをftp階層レベルに追加します[edit system services]。また、このスクリプトは、セッションプロトコルとNETCONFサーバーの機能を取得して出力します。

スクリプトは、 remote-hostリモート デバイスの IP アドレスまたはホスト名である 1 つの引数 を取ります。変数は arguments スクリプトのグローバル レベルで宣言されるため、ユーザーが 状況依存のヘルプを必要とするときに、引数の名前と説明がコマンド ライン インターフェイス (CLI) に表示されます。

この変数 netconf は、リモートデバイスのセッションプロトコルと接続パラメータを指定するノードセットです。要素の値は <method> 「netconf」に設定され、SSHv2 接続を介して NETCONF サーバーとのセッションを確立します。要素は <username> 、接続のユーザー名を指定します。ユーザー名を指定せず、接続に必要な場合、スクリプトはスクリプトを実行するユーザーのローカル名を使用します。この例では、パスフレーズとポートは指定されていません。認証にパスフレーズが必要な場合、リモートデバイスはスクリプトの実行中にパスフレーズの入力を求める必要があります。スクリプトは、デフォルトのNETCONFポート830を使用してセッションを確立します。

NETCONF セッションの接続と確立が成功すると、スクリプトはリモート プロシージャ コール(RPC)を実行します。RPCには、候補の設定をロック、編集、コミット、ロック解除するためのNETCONF操作であるタグ要素<lock><edit-config><commit>、 、および <unlock>が含まれています。このスクリプトは、各タスクの RPC を個別の変数に格納します。各 RPC の結果も個別に保存され、エラーがないか解析されます。スクリプトは、前のステップが成功した場合にのみ、後続の各ステップを実行します。たとえば、スクリプトが設定をロックできない場合、設定の編集、コミット、ロック解除を行う RPC は実行されません。

変数 rpc-edit-config には、設定を変更するためのNETCONF操作であるtag要素 <edit-config>が含まれています。子要素である には、 <config>デバイス上の候補コンフィギュレーションとマージされたコンフィギュレーションの変更された部分が含まれます。エラーが発生した場合、スクリプトは ステートメントを呼び出して copy-of 結果ツリーフラグメント変数を結果ツリーにコピーし、スクリプト実行中にエラーメッセージが CLI に出力されるようにします。

SLAXの構文

XSLT 構文

構成

手順

手順

スクリプトをダウンロード、有効化、およびテストするには:

  1. XSLT または SLAX スクリプトをテキスト ファイルにコピーし、必要に応じてファイルに netconf-session.xsl または netconf-session.slax という名前を付けて、デバイスの /var/db/scripts/op/ ディレクトリにコピーします。

  2. 設定モードでは、 階層レベルに [edit system scripts op] ステートメントを含めfile、必要に応じて netconf-session.xsl または netconf-session.slax を含めます

  3. コマンドを発行します commit and-quit

  4. op モード コマンドを発行 op netconf-session してローカル デバイスで op スクリプトを実行し、必要な引数を含めます。

    この例では、ユーザー bsmith はリモート デバイスである fivestar に接続しています。リモート デバイスにはデュアル ルーティング エンジンがあるため、 commit この操作は、両方のルーティング エンジンに新しい候補構成をコミットするために コマンドを使用する必要があるという警告 commit synchronize を返します。

検証

デバイスが正常に動作していることを確認します。

Op スクリプトの実行の検証

目的

スクリプトが期待どおりに動作することを確認します。

アクション

CLI と op スクリプト ログ ファイルでスクリプトの出力を確認します。実行中に発生したエラーに特に注意してください。デフォルトの op スクリプト ログ ファイルは /var/log/op-script.log です。ログファイルが非常に長い場合は、 コマンドに show log オプションを追加して| last number-of-lines表示を制限し、CLI に出力する行数を指定します。要素内の<op-script-results>出力は、スクリプトの実行に関連しています。

また、opスクリプトの実行時に オプションを含める | display xml ことで、Junos OSを実行しているデバイスでより説明的なスクリプト出力を得ることができます。

意味

この例では、Junos OS を実行しているリモート デバイス上に NETCONF セッションを作成します。NETCONF サーバーの機能には、標準の NETCONF 操作と、 と で定義されているhttp://xml.juniper.net/netconf/junos/1.0http://xml.juniper.net/dmi/system/1.0 ジュニパーネットワークス独自の拡張機能の両方が含まれます。操作の commit RPC 結果には 1 つの警告が含まれていますが、コミット操作は成功しています。

設定変更の確認

目的

リモート デバイスで設定変更とコミット ログを表示して、コミットが成功したことを確認します。

アクション

リモート デバイスで、 show configuration system services 運用モード コマンドを実行して、設定の階層レベルを表示します [edit system services] 。スクリプトが成功した場合、設定には ステートメントが含まれます ftp

また、コミットログを確認することもできます。リモート デバイスで、 show system commit 運用モード コマンドを実行してコミット ログを表示します。この例では、指定された日時に bsmith が NETCONF セッションで候補コンフィギュレーションをコミットしたことがログから確認されています。

トラブルシューティング

接続エラーのトラブルシューティング

問題

スクリプトは、次のエラー メッセージを生成します。

接続エラーの考えられる原因は次のとおりです。

  • 接続しているデバイスまたはインターフェイスがダウンしているか、使用できません。

  • リモート デバイスの IP アドレスまたは DNS 名のスクリプト引数が正しくありません。

  • 接続を確立する前に、接続タイムアウト値を超えました。

  • リモート デバイスのユーザー認証が無効であるか、正しく入力されていません。

  • NETCONF セッションを確立しようとしていますが、NETCONF サーバが存在するデバイスで SSH 経由の NETCONF が有効になっていないか、別のポートで有効になっています。

ソリューション

リモート デバイスが起動して実行中であり、ユーザーがデバイスにアクセスできることを確認します。また、スクリプトの実行時に、リモート デバイスの IP アドレスまたは DNS 名に正しい引数を指定したことも確認します。

NETCONF セッションの場合、NETCONF サーバが存在するデバイスで SSH 経由の NETCONF が有効になっていることを確認します。サンプルプログラムはNETCONFセッションの特定のポート番号を指定していないため、セッションはデフォルトのNETCONF-over-SSHポート830で確立されます。Junos OSを実行しているデバイスのデフォルトポートでSSH経由のNETCONFが有効になっているかどうかを確認するには、リモートデバイスで次の動作モードコマンドを入力します。

netconf設定階層がリモートデバイスに存在しない場合、設定モードで以下のステートメントを発行し、デフォルトポートでSSH経由のNETCONFを有効にします。

構成階層で netconf 既定のポート以外のポートが指定されている場合は、関数に渡す XML ノード セットにポート番号を含めます jcs:open() 。例えば、以下のデバイスはポート12345でSSH経由のNETCONF用に設定されています。

代替ポートで NETCONF セッションを作成するには、XML ノード セットに新しいポート番号を含めます。

設定ロックエラーのトラブルシューティング

問題

スクリプトは、次のいずれかのエラー メッセージを生成します。

ソリューション

別のユーザーが現在候補コンフィギュレーションをロックしているか、候補コンフィギュレーションを変更したが、まだコンフィギュレーションをコミットしていません。ロックが解除されるまで待ってから、プログラムを実行します。

設定構文エラーのトラブルシューティング

問題

次のエラー メッセージが CLI に出力されます。

追加情報については、結果ツリーを調べます。この場合、結果ツリーには次のエラー メッセージが表示されます。

ソリューション

<bad-element> tag 要素は、設定ステートメントが無効であることを示しています。構成階層を修正し、スクリプトを実行します。この例のエラーでは、ユーザーが の代わりに <ftp>タグ<ftp2>を入力しました。これは設定で許容できる要素ではないため、NETCONFサーバーはエラーを返します。