Module 2 - Programming Fundamentals(177min)後半

モジュール2の後半です。
~前半~
1. Data Formats: Understanding and using JSON, XML and YAML
2. APIs are Everywhere... but what are they?
3. REST APIs Part 1: HTTP is for more than Web Browsing
4. REST APIs Part 2: Making REST API Calls with Postman
~後半~
5. Python Part 1: Python Language and Script Basics
6. Python Part 2: Working with Libraries and Virtual Environments
7 .Python Part 3: Useful Python Libraries for Network Engineers

後半はPythonについて。NPB 2.5ではPythonの基本、NPB 2.6では仮想環境の作り方、基本的なライブラリの紹介をしてくれます。ただ、正直ある程度Pythonについて知っていないとつらい内容だし、サンプルのコードも初心者には難しめです。Pythonの学習を進めた後に再度見返してみることがよいかと思いました。

このモジュールのハイライトはNPB 2.7でしょうか。
まずは様々なデータフォーマットを操作するライブラリとして、xmltodict、josn、PyYAML、CSVを紹介して、データ操作の一端を見せてくれます。そして、REST APIs、NETCONF、Network CLIそれぞれで実機から情報を取得する様子をデモしてくれます。やっぱりPythonを使って実際に実機から情報が取得できるというのはちょっと感動です。

もちろんここでも実際に試すことができます。
NPB 2.4のSandboxはインターネット経由でRESTAPIをたたきましたが、このSandboxはVPNでCiscoに接続して試すタイプのものです。そのため、まずはCisco AnyConnect VPN Clientをダウンロードしておきます。
Devnet Sandboxのページで右上の「RESERVE」ボタンを押すとポップアップが上がってきて「Reserve」ボタンを押します。そうするとSETUPが始まり、登録してあるメールアドレスにはURL、ID、パスワードが送られてきます。

画像1

画像2

画像3

セットアップが完了したら接続してみます。
192.168.62.1のアドレスが割り当てられ接続できました。CSRV1000Vへsshでアクセスすることも可能です。

画像4

まずはRESTAPIを使ったアクセスを試してみました。

画像5

参考に同じインタフェースをCLIで取得したもの。実施に使う場合はどの出力が、どの出力に対応しているのかとか(微妙に表記が違ったり、なさそうなものがあったり、unknown protocol dropsのようにカウンターの値がちがっていそうなものがあったり)見とかないといけなそうです。

csr1000v-1#show int gi1
GigabitEthernet1 is up, line protocol is up
 Hardware is CSR vNIC, address is 0050.56ac.fafb (bia 0050.56ac.fafb)
 Description: MANAGEMENT INTERFACE - DON'T TOUCH ME
 Internet address is 10.10.20.48/24
 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
    reliability 255/255, txload 1/255, rxload 1/255
 Encapsulation ARPA, loopback not set
 Keepalive set (10 sec)
 Full Duplex, 1000Mbps, link type is auto, media type is Virtual
 output flow-control is unsupported, input flow-control is unsupported
 ARP type: ARPA, ARP Timeout 04:00:00
 Last input 00:00:00, output 00:00:00, output hang never
 Last clearing of "show interface" counters never
 Input queue: 0/375/0/0 (size/max/drops/flushes); Total output drops: 0
 Queueing strategy: fifo
 Output queue: 0/40 (size/max)
 5 minute input rate 5000 bits/sec, 6 packets/sec
 5 minute output rate 2000 bits/sec, 2 packets/sec
    17563 packets input, 1720808 bytes, 0 no buffer
    Received 0 broadcasts (0 IP multicasts)
    0 runts, 0 giants, 0 throttles
    0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
    0 watchdog, 0 multicast, 0 pause input
    688 packets output, 176513 bytes, 0 underruns
    0 output errors, 0 collisions, 0 interface resets
    72 unknown protocol drops
    0 babbles, 0 late collision, 0 deferred
    0 lost carrier, 0 no carrier, 0 pause output
    0 output buffer failures, 0 output buffers swapped out

続いてsnmp。これはDEMOにはなかったのですが、githubにはプログラムがあったので試してみました。

画像6

requirements.txtにはpysnmpが入っていなかったのでインストールしたり、ルータ側もsnmpが有効になっていなかったので有効にして、再度試してできるようになりました。前にも書きましたが、こういう試行錯誤ができる環境というのは素晴らしい。

続いて、NETCONF。ncclientモジュールを使うのですが、以下のエラーが出ました。これはちょっと難しそうだな。。。

画像7

と思いきやあっさり解決。
Python3.7.xを使っていましたが、asyncが予約語になったためのエラーでした。ncclientをバージョンアップすれば解決するとのことなので、早速バージョンアップ。

今度は成功しました。

画像8

最後はAPIやNETCONFに対応していないときのNetwork CLI。netmikoを使ってアクセスします。

画像9

長かったです。これにてModule 2は完了です。

この記事が気に入ったらサポートをしてみませんか?