ファイル間でJunos PyEZテーブル XMLを保存して読み込む
Junos PyEZ 表およびビューを使用すると、Junos デバイス上の操作コマンド出力または選択した構成データベースからターゲット・データを抽出できます。テーブル データを XML としてエクスポートできます。これにより、1 つ以上のデバイスの情報を取得し、後でそれを処理できます。Junos PyEZ は、この目的のためのメソッドを提供 savexml() します。
この savexml() 方法では、エクスポートされたデータの宛先ファイルパスを指定し、オプションでデバイスのホスト名とアクティビティのタイムスタンプをファイル名に含めることができます。標準 strftime 形式を使用して、タイムスタンプの形式を制御できます。
例えば、デバイスのリストをループし、モジュール内の XcvrTable 定義を使用してトランシーバ データを収集する場合を jnpr.junos.op.xcvr 考えます。以下のコードは、デバイスホスト名のリストを定義し、ユーザーにユーザー名とパスワードを入力するよう求め、次にループして各デバイスへの接続を確立します。
import sys
from getpass import getpass
from jnpr.junos import Device
from jnpr.junos.op.xcvr import XcvrTable
devlist = ['router1.example.com', 'router2.example.com']
user = raw_input('username: ')
passwd = getpass('password: ')
for host in devlist:
sys.stdout.write('connecting to %s ... ' % host)
sys.stdout.flush()
dev = Device(host,user=user,password=passwd)
dev.open()
print('ok.')
# log data
dev.close()
この時点で。プログラムはまだトランシーバーデータを取得しません。プログラムを実行すると、以下の出力になります。
user1@server:~$ python3 xcvr_demo.py username: user1 password: connecting to router1.example.com ... ok. connecting to router2.example.com ... ok.
トランシーバーデータを収集してログに記録するには、テーブルを各ターゲットデバイスに関連付け、データを取得し、メソッドを使用してファイルにsavexml()保存します。引数リストに と timestamp=True をsavexml()含hostname=Trueめ、ホスト名とタイムスタンプを出力ファイル名に追加できます。この方法で複数のデバイスのデータを取得する場合、ホスト名、タイムスタンプ、またはその両方で各デバイスの出力ファイル名を区別して、1台のデバイスのデータが同じファイル内の以前のデバイスのデータを上書きしないようにする必要があります。
# log data
xcvrs = XcvrTable(dev).get()
xcvrs.savexml(path='/var/tmp/xcvrs/xcvr.xml', hostname=True, timestamp=True)
引数は path 、ターゲット・ディレクトリーがローカル・ファイル・システムに存在することを前提としています。
プログラム内のデバイスループに追加コードを追加してからプログラムを実行した後、ターゲットディレクトリの内容を調べることができます。この例では、ホスト名とタイムスタンプ値がファイル名に埋め込まれています。
user1@server:~$ ls /var/tmp/xcvrs xcvr_router1.example.com_20131226093921.xml xcvr_router2.example.com_20131226093939.xml
後処理のために後で XML データをインポートできます。データをインポートするには、対象のデバイスではなく、表を XML ファイルに関連付けます。例えば:
from jnpr.junos.op.xcvr import XcvrTable
xmlpath = '/var/tmp/xcvrs/xcvr_router1.example.com_20131226093921.xml'
xcvrs = XcvrTable(path=xmlpath)
xcvrs.get()