Edited at

YANG ExplorerでYANGモデルに慣れる

More than 1 year has passed since last update.

YANG Explorerというオープンソースのアプリケーションを試してみた記録。YANGブラウザ、RPC(Remote Procedure Call)の生成、実行などNetconf/YANGまわりの確認やテスト、ちょっと人に見せるデモに使えるかも。ソースとマニュアルは以下にあり。

https://github.com/CiscoDevNet/yang-explorer


主な機能


  • YANGモデルファイルのローカルからYANG Explorerへのアップロード

  • YANGモデル対応装置(Netconfサーバ、つまりルータやスイッチなど)からYANG Explorerへのダウンロード

  • YANGモデルファイルをコンパイルして見やすく表示(Pyangみたいなデータモデルツリー)

  • 装置(Netconfサーバ)に対してRPCを実行(Read/Write)

  • RPCの生成、保存

  • Pythonスクリプトの生成、保存

  • YANGモデルの依存グラフの生成

  • Restconfは実験段階


インストール

Readmeそのままなので簡単。私の場合はラボに余ってた古いUbuntuに入れたらスムーズに入った。

pip install --upgrade pip

sudo apt-get install python-virtualenv
sudo apt-get install graphviz
sudo apt-get install libxml2-dev libxslt1-dev python-dev zlib1g-dev
git clone https://github.com/CiscoDevNet/yang-explorer.git
cd yang-explorer
bash setup.sh

YangExplorer.htmlにアドレスとポート番号を追記するのを忘れないように(インストールをlocalhost以外に行う場合)。

cd <install-root>/yang-explorer/server/static

vi YangExplorer.html
+ flashvars.host = '<ip-address>';
+ flashvars.port = '8088';

(参考)私の環境。

kikuta@ubuntu1:~$ cat /etc/os-release | grep VERSION

VERSION="14.04.5 LTS, Trusty Tahr"
VERSION_ID="14.04"

start.shを実行し、ターミナル上げておけばOK。

kikuta@ubuntu1:/home/kikuta/yang-explorer# ls

default-models env.sh README.md server start.sh YangExplorer
docs LICENSE requirements.txt setup.sh v
kikuta@ubuntu1:/home/kikuta/yang-explorer# ./start.sh

Activating virtualenv ..
Starting YangExplorer server ..
Use http://10.71.154.119:8088/static/YangExplorer.html

Performing system checks...

System check identified no issues (0 silenced).
March 27, 2017 - 02:21:55
Django version 1.8.3, using settings 'server.settings'
Starting development server at http://10.71.154.119:8088/
Quit the server with CONTROL-C.

ブラウザでhttp://host:8088/ にアクセスすると、以下が表示される。

SS 2017-03-26 16.29.10.png

Create device profile、またはAdminから、接続対象のデバイス情報を登録しておくと、プロファイルから選択できるようになる。

SS 2017-03-27 23.18.18.png


YANGモデルのダウンロード

インストール時には、ietf-interfaceしか入っていないため、登録したCSR1000Vから取得(ファイルをローカルからアップロードしても良い)。真ん中のタブから「Manage Models」を選択し、デバイスタブから設定済みのプロファイルを選択すると、以下のように装置のYANGモジュールを確認でき、チェックしてSync。

SS 2017-03-26 16.32.24.png

一気にやろうとするとFailしたので、必要分をちょっとずつ。

SS 2017-03-26 17.04.53.png

選んだモジュールに依存する関連モジュールも自動的に補完される。あとは必要に応じてチェックし、Subscribeボタンをポチ。左ペインからYANGモジュールをクリッククリックしていけるようになる。右端ペインでそれぞれの意味を確認。

SS 2017-03-27 23.35.24.png


参考:pyang

こちらから落としてきたYANGモジュールをPyangでツリー表示したところ。これはこれで十分わかりやすい。

sudo pip install pyang

~ $pyang -f tree ietf-interfaces\@2014-05-08.yang 

module: ietf-interfaces
+--rw interfaces
| +--rw interface* [name]
| +--rw name string
| +--rw description? string
| +--rw type identityref
| +--rw enabled? boolean
| +--rw link-up-down-trap-enable? enumeration {if-mib}?
+--ro interfaces-state
+--ro interface* [name]
+--ro name string
+--ro type identityref
+--ro admin-status enumeration {if-mib}?
+--ro oper-status enumeration
+--ro last-change? yang:date-and-time
+--ro if-index int32 {if-mib}?
+--ro phys-address? yang:phys-address
+--ro higher-layer-if* interface-state-ref
+--ro lower-layer-if* interface-state-ref
+--ro speed? yang:gauge64
+--ro statistics
+--ro discontinuity-time yang:date-and-time
+--ro in-octets? yang:counter64
+--ro in-unicast-pkts? yang:counter64
+--ro in-broadcast-pkts? yang:counter64
+--ro in-multicast-pkts? yang:counter64
+--ro in-discards? yang:counter32
+--ro in-errors? yang:counter32
+--ro in-unknown-protos? yang:counter32
+--ro out-octets? yang:counter64
+--ro out-unicast-pkts? yang:counter64
+--ro out-broadcast-pkts? yang:counter64
+--ro out-multicast-pkts? yang:counter64
+--ro out-discards? yang:counter32
+--ro out-errors? yang:counter32


読み込み(Read)

まずはお決まりのcapability取得。

SS 2017-03-27 23.38.16.png

ルーティングインスタンスを取得するRPCを生成して...

SS 2017-03-27 23.41.36.png

Runで取得。真ん中下部のウインドウにリターンが更新。

SS 2017-03-27 23.41.59.png

RPCではなくPythonスクリプトも生成してくれるらしい(Python2.7だけど)。

SS 2017-03-27 23.47.49.png


設定(Write)

空っぽのインターフェースを設定して起動させてみる。


CSR1000V

CSR-2#sh run int gi 2

Building configuration...

Current configuration : 107 bytes
!
interface GigabitEthernet2
no ip address
shutdown
negotiation auto
no mop enabled
no mop sysid
end


左ペインのパラメータを入力して、下部のConfigにチェック。真ん中ペインのRPCボタンをクリックすると、以下のようにRPCを生成。そしてRun。

SS 2017-03-27 23.52.22.png

RPCリプライはOKがリターン。

SS 2017-03-27 23.54.45.png

CSR1000Vにも設定が行われていることを確認。


CSR1000V

CSR-2#sh run int gi 2

Building configuration...

Current configuration : 150 bytes
!
interface GigabitEthernet2
description Set-by-YangExplr
ip address 192.168.2.1 255.255.255.0
negotiation auto
no mop enabled
no mop sysid
end



YANGモデルの依存グラフ

Manage Deviceから適当にSyncしたYANGモジュールだが、真ん中下部の右端のGraphボタンをクリックすると、YANGモジュールの依存関係を表すグラフが表示される。

SS 2017-03-27 23.58.17.png

細かくYANGモジュールを読む前に、ざっと全体を理解するには便利そうです。

SS 2017-03-28 0.01.45.png