![見出し画像](https://assets.st-note.com/production/uploads/images/155914357/rectangle_large_type_2_4a227711c0a1b21164a7c177ec857f8e.png?width=1200)
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でログインすると
![](https://assets.st-note.com/img/1727467213-ToVOfWtn3rH89hPByzA7U1Fc.png?width=1200)
YANGファイルの入手先らしいURLが書いてありました。そのままアクセスするとエラーになりますが、
にアクセスすると
![](https://assets.st-note.com/img/1727467494-2SpTBVu1JgxLNAYGrOHPQC80.png?width=1200)
のような画面になって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
のように起動すれば、
![](https://assets.st-note.com/img/1727469996-8rStxnGmDsb1y2HoTuOdZzC6.png?width=1200)
のようにPathを検索して補完できます。
プログラムと同じように取得できます。
![](https://assets.st-note.com/img/1727470127-slXaoYMdNtKPjf3T76wmDZFb.png?width=1200)
どうらや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を使えばよさそう
が、現時点でわかったことです。
明日に続く
いいなと思ったら応援しよう!
![twsnmp](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?width=600&crop=1:1,smart)