■ 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