YANG(Yet Another Next Generation):データモデル言語の紹介
YANGは、ネットワーク機器の構成や状態のモデル化を目的とした
データモデル言語です。この言語は、主にNETCONFやRESTCONFといったネットワーク管理プロトコルと連携して利用されます。YANGを用いることで、ネットワーク機器の設定や状態、リモートプロシージャコール(RPC)、通知の内容を体系的に定義できます。
YANGの特徴
モジュール構造
YANGにおいて、モジュールは基本的な構造単位です。ネットワーク機器や機能に基づいて、単一のモジュールで全体をカバーすることもできますし、機能ごとに複数のモジュールを作成して親モジュールにまとめることも可能です。この場合、関連付けられたモジュールは「サブモジュール」と呼ばれ、サブモジュールはさらに他のサブモジュールを含むことができます。通常、モジュールやサブモジュールは各々独立したファイルに記述され、親モジュールがサブモジュールを取り込む際には「include」ステートメントを使います。
データの木構造定義
YANGには、データの構造を四つの主要なステートメントで表現します。これにより、木構造形式の
データモデルを効果的に作成できます。
- - leaf:単一のスカラー値を持つノードを定義します。leafで定義されたノードは追加の下位構造を持たないのが特徴です。
- - leaf-list:同型の値を持つノードの配列を定義します。この配列に含まれる各値は一意である必要があります。
- - container:他のノードのまとまりとして機能し、木構造における枝として役立ちます。container自体は直接の値を持ちません。
- - list:同族の下位構造を複数保持するためのステートメントで、その名の通りリストを形成します。リスト内には「key」ステートメントが含まれ、主キーの役割を果たします。
状態のモデル化
YANGを使用することで、機器の設定を保持するノードだけでなく、機器の状態を示すノードも定義できます。この機能は、NETCONFのget操作によって取得された情報を管理するために有用です。状態ノードはconfigステートメントでfalseに設定されており、これにより設定ノードとは区別されています。
組み込まれたデータ型
YANGでは、いくつかのデータ型が元から用意されています。これら組み込みのデータ型、または他の導出されたデータ型を組み合わせたり、制限を設けることで新たな型を定義し、それをノードに適用できます。型の定義にはtypedefステートメントを使用します。
ノードの再利用
groupingステートメントを活用することで、特定のノードをグループとしてまとめ、モデル内で再利用することが可能です。この機能により、異なる部分で同じデータ構造を持つ場合に定義を統一でき、整合性が保たれます。
モデルの拡張
既存のモデルを拡張する場合、augmentステートメントを利用して他のモジュールを追加することができます。これは、標準的な構成と特定のベンダーによる独自の設定を統合する際に役立つ方法です。
RPCと通知のモデル化
rpcステートメントを用いると、NETCONFなどのRPCインターフェースのモデル化が可能です。これにより、入力パラメータや出力情報の型をそれぞれinputステートメントとoutputステートメントで定義できます。また、機器から発信される通知の情報型も定義できます。
他のデータ形式への変換
YANGのモデルはXMLやYINとして表現でき、これによりXML解析が可能なアプリケーションや機器での利用が容易になります。また、YANGモデルをDSDL形式で表現することも推奨され、これに関する具体的なマッピングはRFC 6110に規定されています。さらに、JSON形式への変換に関してはRFC 7951でその手法が取り決められています。
仕様と実装
YANGに関する仕様は、以下のRFCによって定義されています:
- - RFC 6020:NETCONF用のデータモデリング言語としてのYANG
- - RFC 7950:YANG 1.1データモデリング言語
YANGの実装には、
Pythonで書かれたモデル検証ツールである「pyang」や、モデルの視覚化やRPC実行機能を持つ「YangExplorerFlash」が含まれます。
公式サイトと関連リソース
公式サイトや関連する外部リソースでは、YANGに関するさまざまなツールやチュートリアルが提供されています。