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/ にアクセスすると、以下が表示される。
Create device profile、またはAdminから、接続対象のデバイス情報を登録しておくと、プロファイルから選択できるようになる。
#YANGモデルのダウンロード
インストール時には、ietf-interfaceしか入っていないため、登録したCSR1000Vから取得(ファイルをローカルからアップロードしても良い)。真ん中のタブから「Manage Models」を選択し、デバイスタブから設定済みのプロファイルを選択すると、以下のように装置のYANGモジュールを確認でき、チェックしてSync。
一気にやろうとするとFailしたので、必要分をちょっとずつ。
選んだモジュールに依存する関連モジュールも自動的に補完される。あとは必要に応じてチェックし、Subscribeボタンをポチ。左ペインからYANGモジュールをクリッククリックしていけるようになる。右端ペインでそれぞれの意味を確認。
#参考: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取得。
RPCではなくPythonスクリプトも生成してくれるらしい(Python2.7だけど)。
#設定(Write)
空っぽのインターフェースを設定して起動させてみる。
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。
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モジュールの依存関係を表すグラフが表示される。
細かくYANGモジュールを読む前に、ざっと全体を理解するには便利そうです。