現在、私は (レガシー) Python プロジェクトの一部として YANG を使用しています。
Python 辞書として編成されたデータを検証するために使用されるスキーマを定義する作業に行き詰まっています。多くのコードベースがこのデータを使用しているため、可能であれば、現在の構造を維持したいと考えています。
「変更されていない」データ:
"namespace": { # Mandatory
"management": { # Optional
"interfaces": { # Mandatory
"m0": { # Optional
"leaf1": "..."
}
}
},
"benchmark": { # Optional
"interfaces": { # Mandatory
"b0": { # Optional
"leaf1": "...",
"leaf2": "..."
},
"b1": { # Optional
"leaf1": "...",
"leaf2": "..."
}
}
}
}
私の問題は、「オプション」(例で) としてマークされているものはすべてコンテナーとしてモデル化されますが、 RFC6020に従ってオプション (つまり、必須の false;) として定義できないようです。
したがって、リストを使用するモデルを定義しました。つまり、Python Dict の一部のノード (management、benchmark、m0、b0、b1) はリスト要素になり、現在の方法ではアクセスできません。data['namespace']['management']...
変更された例は次のようになります。
"namespace": [
{
"desc": "management",
"interfaces": [
{
"leaf1": "..."
}
]
},
{
"desc": "benchmark",
"interfaces": [
{
"leaf1": "...",
"leaf2": "..."
},
{
"leaf1": "...",
"leaf2": "..."
}
]
}
]
記述 (私の現在のスニペット) YANG モデル:
list namespace {
description "Namespace definitions.";
key desc;
leaf desc { type string; }
uses leaf-definitions;
list interfaces {
key leaf1;
uses leaf-definitions;
}
}
検証は成功し、データの変換 (それ自体) は問題ありませんが、壊れたコードが山積みになっています。
これは私の質問につながります:
- 私は正しいですか - YANG のコンテナは常に必須ですか?
- このシナリオをモデル化する別の方法はありますか? (「あまり」を壊さずに)
私は YANG を始めたばかりなので、ご意見をお寄せいただきありがとうございます。