■ NAPALM 2.3.3 リリース
2018/10/15 にネットワーク自動化 Python ライブラリである NAPALM 2.3.3がリリースされました。詳細は 2.3.3 CHNGELOG に記載があります。
この記事では、個人的に気になった Docker イメージの追加と、モックの利用法のドキュメント追加についてピックアップします。
■Docker イメージの追加
Dockerhub の napalmautomation/napalmに 「Official NAPALM Docker image」としてあがっています。 Dockerfile はこちらで、Debian ベースのようです。
さっそく、Junos を利用して簡単な動作確認をしてみます。
docker run で /bin/bash を起動
$ sudo docker run -i -t napalmautomation/napalm /bin/bash Unable to find image 'napalmautomation/napalm:latest' locallyTrying to pull repository docker.io/napalmautomation/napalm ... latest: Pulling from docker.io/napalmautomation/napalm05d1a5232b46: Pull completed55900eb92a3: Pull completea30024124f3c: Pull complete 8743e06e9fcd: Pull completeDigest: sha256:ddf01b2ee4d2af5edbc3be4906e1f059410b8b776b519fe08d3230cad0ca7a0a] 37.02Status: Downloaded newer image for docker.io/napalmautomation/napalm:latest root@58839899c7fd:/#
python インタプリターを起動して、対象機器にログインセッションをオープン
root@58839899c7fd:/# python >>> from pprint import pprint # ディクショナリを見やすくするため >>> from napalm import get_network_driver >>> driver = get_network_driver('junos') >>> device = driver('172.16.0.1', 'testuser', 'testpass') >>> device.open()
デフォルトルートの情報を表示
>>> pprint(device.get_route_to('0.0.0.0')) {u'0.0.0.0/0': [{'age': 507, 'current_active': True, 'inactive_reason': u'', 'last_active': True, 'next_hop': u'10.0.2.2', 'outgoing_interface': u'ge-0/0/0.0', 'preference': 12, 'protocol': u'Access-internal', u'protocol_attributes': {}, 'routing_table': u'inet.0', 'selected_next_hop': True}]}
show version コマンドの結果を表示
>>> pprint(device.cli(['show version'])) {u'show version': u'\nHostname: vsrx1\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]\n'}
セッションをクローズ
>>> device.close()
docker run コマンド経由で napalm コマンドを実行する
今度は、 bash を起動せずに、docker run 経由で napalm というコマンドラインツールを使ってデフォルトルートの情報を表示します。
(ホスト側に NAPALM はインストール不要)
$ sudo docker run -i -t napalmautomation/napalm napalm --user testuser--password testpass--vendor junos 172.16.0.1 call get_route_to --method-kwargs "destination='0.0.0.0'"
{
"0.0.0.0/0": [
{
"protocol": "Access-internal",
"last_active": true,
"outgoing_interface": "ge-0/0/0.0",
"current_active": true,
"routing_table": "inet.0",
"next_hop": "10.0.2.2",
"selected_next_hop": true,
"preference": 12,
"inactive_reason": "",
"age": 2210,
"protocol_attributes": {}
}
]
}
簡単ですが動作確認できました。
■ Napalm mock driver を利用したチュートリアルの追加
単体テストをする際のモックの使い方に関するチュートリアルページが追加されました。 https://napalm.readthedocs.io/en/latest/tutorials/mock_driver.html
このモックを利用すると、ネットワーク機器を用意せずに単体テストができるようです。
通常であれば、ios や junos のようにネットワークOS名を指定する箇所に mock を指定して利用します。
import napalm driver = napalm.get_network_driver('mock')
■ その他
他にも、バグフィックスなどがされているようですので、詳細は以下の CHENGELOG を参照してください。 github.com