評価版 Cisco NSO を使ってみよう NED 活用編 [2020年版]

評価版 Cisco NSO を使ってみよう [2020年版] の記事では、NSO をダウンロードして Linux サーバ上にインストールするところまでを解説しました。今回の記事では、NED (Network Element Driver) を利用して実際にネットワークデバイスを操作するところまでを解説します。

前提条件

前回記事で NSO 5.3 を Linux 上にインストールした状態から開始してください。

NED のダウンロード

試用版 NSO 本体と同じページから、NED もダウンロードできます。

今回は Cisco IOS (XE) NED をクリックしてダウンロードします。Cisco.com にログイン後、以下の File Download Agreement を承認するチェックボックスを入れて Download してください。ファイルサイズは 49MB 程度です。

ダウンロードされたファイル(ここでは ncs-5.3-cisco-ios-6.42.1.signed.bin) を、NSO をインストールした Linux サーバに転送してください。

NED パッケージの解凍

NSO と同じく、NED ファイルも署名された状態で配布されています。コピーしてきたファイルを以下の通り解凍してください。

sh ncs-5.3-cisco-ios-6.42.1.signed.bin

解凍に成功すると、作業フォルダに TAR 形式の NED パッケージ (ncs-5.3-cisco-ios-6.42.1.tar.gz) が現れます。これが NED の本体です。基本的にはこの TAR パッケージは解凍する必要はなく、そのまま利用します。

NSO への NED パッケージの追加

NED をインストール済みの NSO のランタイムフォルダに追加します。前回の記事では ncsrun という名前のフォルダにしていました。この中の packages フォルダに上記の NED パッケージを配置します


$ cd ncsrun/
$ ls
logs  ncs-cdb  ncs.conf  packages  README.ncs  scripts  state
$ cd packages/
$ ls
$ ncs-5.3-cisco-ios-6.42.1.tar.gz

このパッケージを読み込ませるため、ncs 上でパッケージ読み込みコマンドを実行します。

まず NSO CLI セッションに入ります

ncs_cli -u admin -C

そして、NSO CLI セッション上でパッケージを読み込みします

admin@ncs# packages reload

以下のように result true と表示されれば読み込み成功です。

これで NSO からデバイス(今回の場合は Cisco IOS/IOS-XE デバイス) を制御する準備ができました。

デバイスの登録

デバイス OS は実機でも仮想版でも大丈夫です(が、今回の試用版 NSO/NED は商用環境では使えないことに注意ください!)。

シスコではいくつかの製品の仮想版 OS の試用版がダウンロード可能です。ここではその取得方法やインストール方法は省略しますので、ご自身の環境に合わせて準備してください。NSO からデバイスに対して Telnet または SSH によるリモートアクセスができる必要があります。

NSO にデバイスを登録するためには、まず認証情報 (authgroup) を登録する必要があります。今回は NSO の CLI から行ってみます。以下のようにコマンドを実行してください。remote-name と remote-password と remote-secondary-password は、実際に認証に使うユーザ名・パスワード・enable パスワードですので、自身の環境に合わせて設定してください。


admin@ncs# config
Entering configuration mode terminal
admin@ncs(config)# devices authgroups group ios-auth
admin@ncs(config-group-ios-auth)# umap admin
admin@ncs(config-umap-admin)# remote-name admin
admin@ncs(config-umap-admin)# remote-password admin
admin@ncs(config-umap-admin)# remote-secondary-password admin
admin@ncs(config-umap-admin)# commit
Commit complete.
admin@ncs(config-umap-admin)# end

この authgroup の情報と、デバイスへのアクセス情報を使って以下のようにデバイスを登録します。アドレス情報は一部マスクしています。また、接続方法は Telnet の例です。
admin@ncs# config
admin@ncs(config)# devices device ios1
admin@ncs(config-device-ios1)# authgroup ios-auth
admin@ncs(config-device-ios1)# address 10.x.x.x
admin@ncs(config-device-ios1)# port 23
admin@ncs(config-device-ios1)# device-type cli ned-id cisco-ios-cli-6.42
admin@ncs(config-device-ios1)# device-type cli protocol telnet
admin@ncs(config-device-ios1)# state admin-state unlocked
admin@ncs(config-device-ios1)# commit
Commit complete.
admin@ncs(config-device-ios1)# end

以下のようにデバイス一覧に表示されるはずです

admin@ncs# show devices list
NAME ADDRESS DESCRIPTION NED ID ADMIN STATE
----------------------------------------------------------------
ios1 10.x.x.x - cisco-ios-cli-6.42 unlocked

以下のコマンドで、接続テスト (connect) が成功したら OK です
admin@ncs# devices device ios1 connect
result true
info (admin) Connected to ios1 - 10.x.x.x:23

これで NSO にこのデバイスが登録され、NSO からデバイスを制御する準備が整いました。

デバイスからのコンフィグの取り込みと表示

NSO は、自身のデータベースにあるデバイスコンフィグ情報と、対象デバイスのコンフィグ情報を常に同期 (sync) した状態で利用します。まずは、既存のデバイス コンフィグを取得してきましょう。
admin@ncs# devices device ios1 sync-from
result true

sync-from はデバイスからコンフィグを取得し NSO のデータベースを上書き更新するアクションです。成功 (result true) したら、NSO 上に取り込まれたデバイス コンフィグを表示させてみましょう。admin@ncs# show running-config devices device ios1 config
devices device ios1
config
tailfned police cirmode
version 16.9
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
service call-home
(snip)

NSO 上に取り込まれたコンフィグは、様々なフォーマット (json, xml, cli, xpath, 他) で表示させることが可能です。

JSON で表示させた例
admin@ncs# show running-config devices device ios1 config | display json
{
"data": {
"tailf-ncs:devices": {
"device": [
{
"name": "ios1",
"config": {
"tailf-ned-cisco-ios:tailfned": {
"police": "cirmode"
},
"tailf-ned-cisco-ios:version": "16.9",
"tailf-ned-cisco-ios:service": {
(snip)

デバイスのコンフィグ変更 – CLI

NSO 上からデバイスのコンフィグを変更してみましょう。ここでは簡単な例として GigabitEthernet インターフェイスに description を付加してみます。

admin@ncs# config
Entering configuration mode terminal
admin@ncs(config)# devices device ios1 config
admin@ncs(config-config)# interface GigabitEthernet 3
admin@ncs(config-if)# description test
admin@ncs(config-if)# commit
Commit complete.

Commit complete と出たら成功です。実機にログインして、実際にコンフィグが正しく変更されているか確認してみてください。

このように、NSO の CLI を使って実機の CLI と同じような操作でコンフィグの変更ができることがわかります。今回は1台だけの制御ですが、デバイスを何台も、複数の OS の種類で登録しても、NSO から一元的に制御できるようになることでメリットがお分かりいただけると思います。このことから NSO は “Network Wide OS” (ネットワーク全体にわたる一つの OS) と呼ばれたりします。

デバイスのコマンド実行 – CLI

NSO は基本的にデバイスのコンフィグの制御が得意なソフトウェアですが、デバイスを Telnet/SSH で制御できるので、コマンド実行ももちろん可能です。NSO CLI からデバイス上でコマンド実行を行ってみましょう。それには live-status アクションを利用します。

admin@ncs# devices device ios1 live-status exec show ip int br
result
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 10.71.157.94 YES DHCP up up
GigabitEthernet2 192.168.1.254 YES NVRAM up up
GigabitEthernet3 unassigned YES NVRAM administratively down down
Loopback99 unassigned YES unset up up
lower-gw-csr1kv#

成功です! デバイスを CLI 操作しているのと同じ感覚で、show コマンドを実行して結果を表示することができました。

このコマンド実行機能の利用方法は、ユースケース次第でいろいろ考えられます。NSO CLI をスクリプト的に利用して、コマンド実行の前後に確認コマンドを打つという基本的な使い方や、まだ紹介していないトピックになりますが、コンフィグ投入のロジック (Python や Java) の途中に確認コマンドのステップを入れて、結果に応じて投入コンフィグを変更するといった高度な使い方も可能です。

NSO API の利用 – RESTConf API

NSO の便利な機能の一つは、CLI だけでなく様々な API も自動生成されて使えるようになるところです。ここでは、標準の RESTConf を利用してデバイスの操作を行ってみましょう。ここでは Postman を使っています。{{nsoip}} は自分の Linux のアドレスに書き換えてください。{{nsoport}} は 8080 がデフォルトです。

GET http://{{nsoip}}:{{nsoport}}/restconf/data/tailf-ncs:devices/device=ios1/config/tailf-ned-cisco-ios:interface/GigabitEthernet=3



Header
Accept:application/yang-data+json


上の例では、GET メソッドで、いま設定したデバイスのインターフェイスのコンフィグ情報を取得できたことがわかります。もちろんデバイスコンフィグは NED が対応していればすべて RESTConf API で見ることができます。

今度はコンフィグの追加を試してみましょう。これは GigabitEthernet 3 の description を書き換えるための PATCH メソッドの例です

PATCH http://{{nsoip}}:{{nsoport}}/restconf/data/tailf-ncs:devices/device=ios1/config/tailf-ned-cisco-ios:interface/GigabitEthernet=3



Header
Accept:application/yang-data+json
Content-Type:application/yang-data+json

Body
{
"GigabitEthernet": [
{
"name": "3",
"description": "test2"
}
]
}


Result

うまくいきました。結果の Status が 204 No Content と 200 番台が返っていることから成功したことがわかります。

このように、RESTConf API を使って CLI と同じような制御が可能なことがわかります。RESTConf は JSON フォーマットが利用可能で、Web エンジニアにとっても理解しやすいことから、ネットワークサービスを提供するポータルの実装などで活用されます。NSO は RESTConf 以外にも Netconf, JSON-RPC 2.0 にも対応しており、上位システムの要件に応じた API が利用可能です。

次のステップ

本記事では、NSO に登録したデバイスを NSO CLI や API から制御するところをお見せしました。実は、これは NSO の機能のほんの一端に過ぎず、NSO が本領を発揮するのは実はこの先にご紹介する機能です。

次回の記事では、NSO が真の価値を発揮するサービス モデルの考え方や、実際の実装方法をご紹介したいと思います。ぜひそれまでに NSO を一度、お試しください!

Share
佐々木 俊輔

2008 年にシスコ入社。

サービスプロバイダー担当のアカウント SE として7年間、モバイルネットワーク、データセンター、法人ネットワークなど様々なお客様・部署へのプリセールス活動に従事。その後、シスコの買収した製品群に合わせてNFV / SDN / Automation 領域での知識を活かした経験を積み、サービスプロバイダ部門全般を担当するアーキテクトとして活動中。

学生時代は地球惑星物理学を専攻、物理現象のコンピュータモデリングとシミュレーションに取り組む。

最近の趣味はロードバイク。