LoginSignup
12

More than 5 years have passed since last update.

YANG ExplorerでYANGモデルに慣れる

Last updated at Posted at 2017-03-28

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12