技術を楽しもう!

IT(ネットワーク)業界を中心に、仕事や趣味等、色々な技術を記録します。

Cisco IOS-XEのRESTCONFリファレンスを求めて

https://1.bp.blogspot.com/-0hciu8mcdZw/Xwkxc3dqZvI/AAAAAAABaAg/cdheKwEazuUwVsUvzo_8kvAX9q6APd4VgCNcBGAsYHQ/s400/eye_ganseihirou_computer_man.png

前書き

下記の記事でRESTCONFの使い方を説明しました。 www.it-enjoy.com

ただ、RESTCONFは任意のshow commandは実行できず、 あらかじめYANGで定義された値を読み書きできる、というものです。

YANGを大まかに説明すると 「〇〇というコマンドで××という値が設定できるよ、入力可能な範囲は0から100の数値」 というような定義付けを行ったものです。

では、何が定義されているか、どうやって確認すれば良いのでしょう?
例えばCisco IOS-XEのYANGは下記で公開されています。 github.com

とはいえ、下記のようなファイルを見たところで、見やすさに欠けるような・・・ f:id:takashi-tobey:20210225165721p:plain

というわけでリファレンスを探したところ、以下の記事を見つけました。

IOS-XEのRESTCONF APIドキュメントに関して - Cisco Community

Cisco従業員の方のコメントをやや乱暴に解釈すると、 YANGが公開されているのでそれを自分で見てね!詳細ドキュメントは無いです! という状態のようです。

というわけでYANGの見方を調べないとどうにもならないことがわかりました。

見やすい方法を模索してみる

更に調べていると、下記のようなツールを発見。 どうやらツリー構造で表示できるHTMLファイルを出力してくれるらしい。 JavaScript Tree · mbj4668/pyang Wiki · GitHub

ダウンロード

右側のDownloadsから、「pyang-1.5.tar.gz」をダウンロードします。 f:id:takashi-tobey:20210225161225p:plain

pyangのインストール

検証用のCentOSがあるので、こちらにインストールすることにします。

tar xfvz pyang-1.5.tar.gz
cd pyang-1.5
python setup.py install --prefix=/usr/local
YANGファイルのダウンロード

Githubから必要なYANGファイルを持ってきます。

cd /root
git clone https://github.com/YangModels/yang/
使い方

ローカルでWebサーバ(httpd)が動いていたので、Webrootのディレクトリに保存します。 CiscoIOS-XE Version 16.12.1のYANGから、 Cisco-IOS-XE-interfaces-oper.yang をGUIで見たいときは、 下記のように実行すると、HTMLファイルが作成されます。

cd /root/yang/vendor/cisco/xe/16121
pyang -f jstree Cisco-IOS-XE-interfaces-oper.yang > /var/www/html/Cisco-IOS-XE-interfaces-oper.html
表示結果

CentOSでブラウザを起動し、下記のように入力すると表示されます。 ツリー展開できるので、割と見やすい形かなと思います。

http://localhost/Cisco-IOS-XE-interfaces-oper.html

f:id:takashi-tobey:20210225162222p:plain

見方

右の方に「Path」という表記があるので紛らわしいのですが、 左側のツリー構造から辿ります。

例えば、admin-status の値を取得したければ、 下記のようなツリー構造であることを確認します。

f:id:takashi-tobey:20210225163815p:plain

大まかなルールとして、 https://IPアドレス/restconf/data/ に続けてツリー構造を入力します。 interface[name]となっているところは、interface=GigabitEthernet1 のようにします。

METHOD URL
GET https://192.168.1.1/restconf/data/Cisco-IOS-XE-interfaces-oper:interfaces/interface=GigabitEthernet1/admin-status

結果

{
    "Cisco-IOS-XE-interfaces-oper:admin-status": "if-state-up"
}

後書き

pyangは、CLIでtree構造を表示するのが主流で、Web上に解説記事もたくさんあるのですが、 CLIだと見るのに慣れが必要なので、他の手法がないか調べた結果を記事にしてみました。

とはいえ、いずれの場合でも、どの値にアクセスできるかは、 ある程度YANGのファイル名やツリー構造から推測するしかなく、 運用の前に実際のshow コマンドの値と見比べたり、 保守契約先経由でメーカに確認して裏を取るのが安心だと思います。