SNMPのMIBにあたるgNMIのYANGについて調べています
今朝は3時に目が覚めました。助手の猫さんは寝ていました。4時にトイレに行った時に猫さんが起きてきて、ご飯をあげました。
昨日作ったTCPで受信するプログラムをTLS対応にしましたが、元のgNMIcはTLSで送信できないことがわかりました。
の資料の記述を
の資料の内容を誤解したようです。記憶力の低下を感じました。
なので、今回はTLS対応はなしにします。将来gNMI Serverモードを追加するかもしれません。
最後に調べているのは、gNMIで管理対象から情報を取得する時に指定するPathについです。
で調べた時はサイトに書いてあるものを、そのまま使っていました。
例えばgetコマンドのテストプログラム
package main
import (
"context"
"fmt"
"log"
"github.com/openconfig/gnmic/pkg/api"
"google.golang.org/protobuf/encoding/prototext"
)
func main() {
// create a target
tg, err := api.NewTarget(
api.Name("srl1"),
api.Address("192.168.1.50:57400"),
api.Username("admin"),
api.Password("NokiaSrl1!"),
api.SkipVerify(true),
)
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// create a gNMI client
err = tg.CreateGNMIClient(ctx)
if err != nil {
log.Fatal(err)
}
defer tg.Close()
// create a GetRequest
getReq, err := api.NewGetRequest(
api.Path("/system/name"),
api.Encoding("json_ietf"))
if err != nil {
log.Fatal(err)
}
fmt.Println(prototext.Format(getReq))
// send the created gNMI GetRequest to the created target
getResp, err := tg.Get(ctx, getReq)
if err != nil {
log.Fatal(err)
}
fmt.Println(prototext.Format(getResp))
}
では、Pathに"/system/name"です。
これが、SNMPのOID(オブジェクト識別子)のようなものじゃないかと思います。これがどこで定義されているのかが謎でした。
いろいろ調べてみるとYANGというファイルで定義されているらしいことがわかりました。このファイルをどこから手に入れるか?
SR LinuxにSSHでログインすると
YANGファイルの入手先らしいURLが書いてありました。そのままアクセスするとエラーになりますが、
にアクセスすると
のような画面になってSR Linuxのバージョンを指定して検索できるようです。(赤の矢印)Pathは膨大にあります。YANGファイルのソースコードについては、緑の矢印のところに書いてありました。GitHUBのリポジトリにあるようです。
gNMIcのプロンプトモードの資料
を読んでいるとYANGファイルの扱いとPathの検索について書いてありました。どうやらYANGファイルは、GitHUBからcloneしてgNMIcに読み込ませればPathの検索ができるようです。
の部分です。CisoやJuniperのサンプルもあります。
とりあえず、
$git clone -b v24.7.2 --depth 1 https://github.com/nokia/srlinux-yang-models
$gnmic --file srlinux-yang-models/srlinux-yang-models/srl_nokia/models/system/srl_nokia-system-name.yang --dir srlinux-yang-models/srlinux-yang-models/srl_nokia prompt
のように起動すれば、
のようにPathを検索して補完できます。
プログラムと同じように取得できます。
どうらやcapabilitiesで取得した
- urn:nokia.com:srlinux:chassis:system-name:srl_nokia-system-name, Nokia, 2019-11-30
とYANGファイルは関係してそうです。
まだ、よくわからないところが沢山ありますが、
管理対象から情報を取得するにはPathが必要
SNMPのMIBファイルに相当するYANGファイルでPathが定義されている
対応しているPath(YANG)はcapabilitiesコマンドで取得できそう
YANGファイルをTWSNMPに読み込まなくてもPathがわかれば管理情報の取得はできる
Pathの検索は、メーカーのサイトかgNMIcを使えばよさそう
が、現時点でわかったことです。
明日に続く