#初めに
構造や、依存関係など、なかなか理解しにくかったYANGを簡単にブラウジングしたり、NETCONFのRPCメッセージを簡単にビルドできるツールがDevNetで紹介されていたので、備忘録的に掲載しようと思います。
#Cisco YANG Suiteとは
Cisco YANG Suiteは、NETCONF、RESTCONF、gNMIなどのYANGプログラマブルインターフェイスを学習したり、検証するためのツールセットです。
グラフィカルインターフェイスでYANGモジュールの参照や、RPCペイロードメッセージを作成することができ、また、ストリーミングテレメトリ用のgRPCダイヤルアウトモデル駆動型テレメトリコレクターも含まれています。 ツール自体のユーザーインターフェイスはHTML5で更新され、Dockerコンテナーで柔軟にデプロイすることができます。
#環境
YANG SuiteはUbuntuへインストールし、対象デバイスはCML2上のCSR1000vを使用しました。
Ubuntu(20.04.1 LTS (Focal Fossa))
csr1000v-mono-universalk9.17.03.02 (CML2)
#インストール要件と流れ
インストール要件や、手順は下記に詳しく掲載されています。
- YANG Suite in GitHub
インストール要件
YANG Suiteは、DockerコンテナーとしてDocker-composeでインストールするので、YANGSuiteを実行するシステムにDocker、DockerComposeをインストールする必要があります。
今回は、Docker、DockerComposeをインストールしたUbuntu(20.04.1 LTS (Focal Fossa))を使用しました。
インストールの流れ
- YANG Suiteリポジトリのクローン
-
start_yang_suite.sh
の実行
以前に
start_yang_suite.sh
を実行済みの場合はdocker compose up
の実行
①YANG Suiteリポジトリのクローン
virl@api:~$ git clone https://github.com/CiscoDevNet/yangsuite
Cloning into 'yangsuite'...
remote: Enumerating objects: 764, done.
remote: Counting objects: 100% (764/764), done.
remote: Compressing objects: 100% (521/521), done.
remote: Total 764 (delta 302), reused 640 (delta 226), pack-reused 0
Receiving objects: 100% (764/764), 25.23 MiB | 2.37 MiB/s, done.
Resolving deltas: 100% (302/302), done.
②start_yang_suite.sh
の実行
virl@api:~$ cd ./yangsuite/docker/
virl@api:~/yangsuite/docker$ sudo ./start_yang_suite.sh
Hello, please setup YANG Suite admin user.
username: cisco
password:
confirm password:
email: example@example.com
Setup test certificates? (y/n): y
################################################################
## Generating self-signed certificates... ##
## ##
## WARNING: Obtain certificates from a trusted authority! ##
## ##
## NOTE: Some browsers may still reject these certificates!! ##
################################################################
Generating a RSA private key
...+++++
.............+++++
writing new private key to 'nginx/nginx-self-signed.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:OSAKA
Locality Name (eg, city) []:OSAKA
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EXAMPLE
Organizational Unit Name (eg, section) []:EXAMPLE
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:example@example.com
Certificates generated...
Building docker containers...
Building yangsuite
(以下省略)
start_yang_suite.shは、ユーザー名、パスワード、電子メールアドレス、および証明書の詳細を設定するように要求してきます。
以下のようなログが出力されればインストール完了です。
yangsuite_1 | spawned uWSGI master process (pid: 35)
yangsuite_1 | spawned uWSGI worker 1 (pid: 39, cores: 1)
yangsuite_1 | spawned uWSGI worker 2 (pid: 40, cores: 1)
yangsuite_1 | spawned uWSGI worker 3 (pid: 41, cores: 1)
yangsuite_1 | spawned uWSGI worker 4 (pid: 42, cores: 1)
yangsuite_1 | spawned uWSGI worker 5 (pid: 43, cores: 1)
インストールしたOSのブラウザから、http://localhost または、https://localhost:8443
へアクセスすれば__YANG Suite__を使用することができます。
外部デバイスからYANG Suiteへアクセスしたい場合は、インストールする前に、rootディレクトリにある
start_yang_suite.sh
、nginxディレクトリにあるnginx.conf
、yangsuiteディレクトリにある、dockerfile
、production.py
、の__'localhost'の部分を'dockerホストのIPアドレス or FQMN'に書き代えます。
インストール時に要求される証明書の「Common Name」も'dockerホストのIPアドレス or FQMN'__にすれば、外部から『https://{dockerホストのIPアドレス or FQMN}:8443』 でアクセスすることができます。
#YANG Suiteの設定
インストールが完了すれば、YANG Suiteで扱いたいデバイスの登録(Device profiles)、そのデバイスがサポートするYANGモデルの登録(YANG module repository)、そのYANGモデルからYANG Suiteで扱えるようにモジュールセットの作成(YANG module set)などを行います。
YANG Suiteの設定は下記に詳しく掲載されています。
- YANG Suite Docs
####Device profilesの設定
"Setup" > "Device profiles"から、YANG Suiteでアクセスしたいデバイスを登録します。
ルータやスイッチ等のデバイスのホスト名や、IPアドレス、有効にするAPI(gNMI、NETCONF、RESTCONF)の詳細を設定します。
デバイスへのコネクティビティチェックも可能です。
####YANG module repositoryの作成
"Setup" > "YANG files and repositories"から、それぞれのOSごとにリポジトリを作成します。
リポジトリはDevice profilesと関連付けられ、Device profilesに登録したデバイスのOSでサポートされているYANGモデルを登録します。
####YANG module setの作成
"Setup" > "YANG module sets"で、上で作成したYANG module repositoryからYANG module setを作成します。
リポジトリのYANGモジュール全てを指定してYANG module setを作成することもできますが、必要なモジュールとそのモジュールと依存関係のあるモジュールに絞って作成することもできます。YANG Suiteでモジュールをブラウジングするときや、NETCONFやRESTCONFでデバイスからステータスを引き出したり設定を変更したりするときは、このYANG module setsを指定して実行します。
#YANG Suiteの利用
"Device profiles"、"YANG files and repositories"、"YANG module sets"の設定が完了すれば、YANGモジュールのブラウジングや、デバイスへのAPIアクセスが可能になります。
YANG Suiteの利用方法は下記に詳しく掲載されています。
- YANG Suite Docs
####ブラウジング
モジュール読み込んで直感的にわかりやすくツリー状に表示してくれます。便利なのは依存関係も解決して表示してくれるところです。
例えば、「ietf-interfaces」モジュールを読み込めば、拡張モジュールである「ietf-ip」モジュールも読み込んでツリーの中に表示してくれます。
####NETCONFアクセス
NETCONF get-config RPC
作成したYANG module setを指定すればそのモジュールがツリー状に表示されます。デバイスから引き出したい設定や、ステータスをチェックボックスで選択するだけでRPCメッセージをビルドすることができます。あとは、YANG Suiteがそれを対象デバイスに実行してくれるので、pythonの知識がなくても直感的にNETCONFでデバイスにアクセスし、情報を引き出すことができます。
NETCONF edit-config RPC
get-configと同じように、作成したYANG module setを指定すればそのモジュールがツリー状に表示されます。設定変更したleafの'Value'や'Operation'に設定値を入力すればRPCメッセージをビルドすることができます。あとはYANG Suiteがそれを対象デバイスに実行してくれるので、NETCONFで直感的にデバイスの設定変更が実現できます。
#まとめ
デバイスがサポートするYANGモデルは、デバイスからダウンロードすることができます。pythonのncclientでもできますが、GUIはやっぱり簡単です。ブラウジングに関してはYANGモジュールを依存関係も解析した上でツリー状に表示してくれるので構造が直感的にわかります。API接続もYANGツリーから選択したり、leafにパラメータを記入したりするだけで、RPCメッセージが作成されるので、とても便利です。YANG SuiteでビルドされたRPCメッセージを、ncclientでの自動化に活用することもできるので、かなり使えるのではと感じました。
#参考リンク
- Cisco YANG Suite
- YANG Suite in GitHub
- YANG Suite Docs