てくなべ (tekunabe)

ansible / network automation / 学習メモ

ネットワーク自動化 Python ライブラリ NAPALM 2.3.3 リリース、公式 Docker イメージ追加など

■ NAPALM 2.3.3 リリース

github.com

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

このモックを利用すると、ネットワーク機器を用意せずに単体テストができるようです。

通常であれば、iosjunos のようにネットワークOS名を指定する箇所に mock を指定して利用します。

import napalm
driver = napalm.get_network_driver('mock')


■ その他

他にも、バグフィックスなどがされているようですので、詳細は以下の CHENGELOG を参照してください。 github.com