このページの目次
例: Jsnapy を Python モジュールとして使用する
この例では、PythonのスクリプトまたはプログラムでPython(jsnapy)のJunos Snapshot Administratorの機能を使用する方法を示します。このスクリプトでユーザー名とパスワードの入力が必要な場合は、<username> と <password> を適切な値に置き換えます。
jsnapy のデフォルトのインストールでは、 、 という名前のmodule_check.py
いくつかのPythonスクリプトの例を含む、module_data.py
module_snapcheck.py
module_device.py
ディレクトリに/etc/jsnapy/samples/
多くのサンプル構成ファイルとテストファイルが含まれています。これらのファイルはそれぞれ、Pythonスクリプト内のモジュールとして実行されるjsnapyのさまざまな機能を示しています。
この例では、Python スクリプト ファイル を少し変更したバージョン を使用して、 module_data.py
オプションを指定して snapcheck
jsnapy を実行する方法を示します。このスクリプトは、Python スクリプト内から YAML 構成データを渡す方法を示しています。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
Junos OS を実行しているデバイス
サーバ(jsnapyサーバ)にインストールされているjsnapyのインスタンス
スクリプトを表示および変更するためのテキストエディタ
jsnapy 用に独自の Python スクリプトを作成する前に、Python プログラミングの概念と jsnapy 操作の両方を完全に理解していることを確認してください。
概要
この例では、提供されている Python スクリプト /etc/jsnapy/samples/module_data.py
を調べます。スクリプトがjsnapyをモジュールとしてインポートする方法、jsnapy構成パラメーターを定義する方法、およびリモートJunos OSデバイスでの操作の結果 snapcheck
を表示する方法について説明します。
トポロジ
この例では、jsnapyサーバーが単一のリモートJunos OSデバイスに接続するというシンプルなトポロジーを使用しています。複数のデバイスへの接続を実現できますが、この例では説明しません。
Python スクリプトを調べる
Python スクリプトは、次のタスクを実行します。
必要な Python モジュールをスクリプトにインポートします。
jsnapy モジュールから SnapAdmin() 関数を呼び出すために使用される変数を定義します。
jsnapy 構成パラメーターを定義し、変数に割り当てます。
以前に定義した構成変数を構成引数およびスナップショットファイル名
pre
として使用して、 オプションを指定してsnapcheck
jsnapyを呼び出します。結果をjsnapyサーバーの端末に出力します。
元の形式では、Python スクリプト は、 module_data.py
Data プリティ プリンター モジュール をインポートして呼び出します pprint
。スクリプトから呼び出されると、このモジュールにより、pythonはjsnapyがJunos OSデバイスから受け取ったすべてのスナップショットデータをjsnapyサーバーの端末に出力します。このデータの長さのため、この例では、呼び出しの前にポンド記号 (#) を付けることで、to pprint
の呼び出しはコメント アウトされています。
- コメントに注意してください
- Python モジュールのインポート
- SnapAdminへの呼び出しの変数を定義します
- jsnapy設定パラメータの定義
- 定義された構成データを使用してjsnapyを呼び出す
- 結果を端末に出力します
- 結果
コメントに注意してください
手順
この例では既存のスクリプトを調べているため、ファイルの最初の行として表示されるコメントを指摘します。コメントは、コメントをポンド記号 (#) で始めることで、スクリプト内の任意の場所に配置できます。
### Example showing how to pass yaml data in same file ### from jnpr.junos import Device
Python モジュールのインポート
手順
このスクリプトは、3つのインポートされたモジュールを使用します。1つはjsnapy用、1つは端末への複雑なデータの印刷用、もう1つはJunos OSデバイスの操作用です。
from jnpr.jsnapy import SnapAdmin from pprint import pprint from jnpr.junos import Device
SnapAdminへの呼び出しの変数を定義します
手順
ここでは、スクリプトは jsnapy モジュールから SnapAdmin() 関数を、使いやすさと jsnapy の呼び出し時に引数を渡せるように指定された
js
変数に割り当てます。js = SnapAdmin()
jsnapy設定パラメータの定義
手順
ここでは、スクリプトはJunos OSホストと、そのホストで実行するテストを定義します。これらのパラメータを変数
config_data
に割り当てます。三重引用符config_data
では、改行文字を含めることができます。メモ:実行するホストとテストを指定する別の方法は、jsnapy構成ファイルを参照することです。構成ファイルでは、1 つ以上のホストと 1 つ以上のテスト ファイルを定義できます。この例の構成データは Python スクリプト内に含まれているため、変数は
config_data
スクリプト外の構成ファイルを参照せず、三重引用符 (""") の間に現れるキーと値のペアで埋められます。config_data = """ hosts: - device: 198.51.100.10 username : <username> passwd: <password> tests: - test_exists.yml - test_contains.yml - test_is_equal.yml """
定義された構成データを使用してjsnapyを呼び出す
手順
ここで、スクリプトはオプションを指定して
snapcheck
jsnapyを呼び出し、構成情報とスナップショットファイルの名前を渡します。この呼び出しの結果として返される情報は、変数に値として格納されますsnapchk
。メモ:SnapAdmin()の呼び出しの後にオプションを追加することで、使用可能なすべてのjsnapyオプション、、
snap
、check
およびsnapcheck
にアクセスできます。たとえば、 、 、js.check(config_file, "snapshot1", "snapshot2")
js.snap(config_file, "snapshot_name")
js.snapcheck(config_file, "snapshot_name")
などです。snapchk = js.snapcheck(config_data, "pre")
結果を端末に出力します
手順
ここで、スクリプトは戻り値をループ処理し、読み取り可能な形式でjsnapyサーバーターミナルに出力します。これは、スナップショット全体がターミナルに出力されないようにスクリプトを変更する場所でもあります。
for val in snapchk: print "Tested on", val.device print "Final result: ", val.result print "Total passed: ", val.no_passed print "Total failed:", val.no_failed #pprint(dict(val.test_details))
結果
見やすくするために、ファイルmodule_data.py
に対してコマンドを実行するとcat
、変更されたスクリプトの内容を以下に示します。
user@jsnapy-server$ cat module_data.py
### Example showing how to pass yaml data in same file ### from jnpr.jsnapy import SnapAdmin from pprint import pprint from jnpr.junos import Device js = SnapAdmin() config_data = """ hosts: - device: 198.51.100.10 username : <username> passwd: <password> tests: - test_exists.yml - test_contains.yml - test_is_equal.yml """ snapchk = js.snapcheck(config_data, "pre") for val in snapchk: print "Tested on", val.device print "Final result: ", val.result print "Total passed: ", val.no_passed print "Total failed:", val.no_failed #pprint(dict(val.test_details))
検証
スクリプトの動作確認
目的
Pythonスクリプトと必要なjsnapy設定およびテストファイルが完了したら、jsnapyサーバーターミナルからスクリプトを実行して、スクリプトの動作を検証できます。
アクション
user@jsnapy-server$ python module_data.py Connecting to device 198.51.100.10 ................ Taking snapshot of COMMAND: show version Taking snapshot of COMMAND: show version invoke-on all-routing-engines Taking snapshot of COMMAND: show interfaces terse lo* *************************** Device: 198.51.100.10 *************************** Tests Included: test_version_check *************************** Command: show version *************************** PASS | All "//package-information/name" exists at xpath "//software-information" [ 59 matched ] *************************** Device: 198.51.100.10 *************************** Tests Included: test_version_check ************ Command: show version invoke-on all-routing-engines ************ Test Failed!!! Junos version does not contains package name as jbase Test Failed!!! Junos version does not contains package name as jbase FAIL | All "//package-information/name[1]" do not contains j" [ 57 matched / 2 failed ] *************************** Device: 198.51.100.10 *************************** Tests Included: test_interfaces_terse ********************* Command: show interfaces terse lo* ********************* PASS | All "admin-status" is equal to "up" [ 1 matched ] ------------------------------- Final Result!! ------------------------------- Total No of tests passed: 2 Total No of tests failed: 1 Overall Tests failed!!! Tested on 198.51.100.10 Final result: Failed Total passed: 2 Total failed: 1