Pracovní skupina NETCONF při IETF se zachovala poměrně moudře, když záměrně ponechala zcela stranou svého zájmu vlastní obsah konfigurací. Oprávněně se obávala, že by se veškeré snažení mohlo snadno utopit v religiózních polemikách o logice a struktuře konfiguračních dat, a soustředila se proto výhradně na konfigurační protokol.
Každému bylo ale zároveň jasné, že jistá standardizace datového obsahu bude muset dříve nebo později přijít na řadu, protože bez sjednocení datových modelů – třeba jen částečného – lze těžko mluvit o neutrálním konfiguračním systému, který nezávisí na konkrétním výrobci. Koncem dubna 2008 proto vznikla nová pracovní skupina IETF s názvem NETMOD. Jejím cílem byla jednak standardizace nástrojů pro modelování konfiguračních dat, následně ale pak také vytvoření základních datových modelů, na něž by mohly navázat jiné pracovní skupiny.
K čemu vlastně takové datové modely slouží? Obrazně řečeno jde o kontrakt mezi serverem (síťovým zařízením) a klientem (manažerskou stanicí), který určuje, jak vypadá validní konfigurace, a umožňuje oběma stranám konfigurační data správně interpretovat a používat.
Minule jsme řekli, že NETCONF je založen na XML a předpokládá informační model XML i u konfiguračních dat, která přenáší. Otázka nástrojů pro modelování dat by se tak mohla jevit jako předem vyřízená: Použijí se osvědčené jazyky pro vytváření schémat XML, například W3C XML Schema nebo RELAX NG pro definování struktury a datových typů, a Schematron pro sémantická pravidla. Tato varianta byla skutečně zvažována a dlouze diskutována ještě před založením skupiny NETMOD. Nakonec se ale dohodla jiná cesta – vytvoření nového specializovaného jazyka pro modelování dat. Důvody byly zhruba čtyři:
- Datové modely mají být velmi dobře čitelné pro lidi i software.
- Datový model musí přehledně reprezentovat jak schéma a datové typy, tak i nejrůznější sémantická pravidla a omezení.
- Datový model musí být schopen definovat i nové operace jako rozšíření protokolu NETCONF.
- Datové modely musí být modulární a snadno rozšiřitelné.
Jazyk YANG
Nový jazyk dostal jméno YANG a jeho specifikace je obsahem RFC 6020. Skupina NETMOD si zároveň byla vědoma rizik spojených s vývojem a prosazením nového jazyka, a tak vznikl doprovodný standard RFC 6110, jenž zajišťuje možnost převodu YANGu na rodinu schémových jazyků DSDL, konkrétně RELAX NG, Schematron a DSRL.
Datové modely jsou v jazyce YANG rozděleny do modulů, které mohou být podle potřeby dále členěny do submodulů. Každý modul definuje svůj unikátní jmenný prostor, do něhož patří všechny objekty definované v modulu i všech jeho submodulech. Modul může také importovat jiné moduly a využívat pak jejich definice.
Úplný YANG modul typu „hello, world” vypadá třeba takto:
module hello-world { namespace "http://example.org/hello-world"; prefix hw; container world { description "This contains everything."; leaf greeting { type string; default "Hello, world!"; } } }
Jak vidíme, syntaxe YANGu se podobá jazyku C či konfiguračním souborům BSD démonů. Za zmínku stojí, že YANG definuje i alternativní syntaxi zvanou YIN, která moduly zapisuje pomocí XML. Umožňuje se tím zpracování datových modelů běžnými nástroji XML (v mém případě jde konkrétně o skvělý nXML mód pro Emacs).
Pro mnoho vlastností YANGu najdeme ekvivalenty nebo blízké příbuzné v jazycích schémat XML. YANG umí definovat hierarchické schéma dat (kontejnery, jednotlivé datové položky či jejich posloupnosti apod.) a nabízí i škálu základních datových typů, zhruba srovnatelnou s knihovnou datových typů pro W3C XML Schema. Pro specifikaci sémantických pravidel se používají výrazy XPath.
Speciality jazyka YANG
YANG ale také disponuje některými méně obvyklými až exotickými vlastnostmi.
Především: Schémata XML se běžně používají pro definici jedné konkrétní třídy dokumentů, například XHTML stránky. U YANGu je to složitější, protože jeden datový model se může vztahovat hned na několik tříd dokumentů – konfigurační úložiště, stavová data, zprávy protokolu NETCONF, ale také nové operace a notifikace.
Důležitou zásadou jazyka YANG je normativní charakter textových popisů obsažených v příkazech description
. Tím se bere v úvahu fakt, že všechna relevantní pravidla datových modelů nelze vyjádřit formalizovaným zápisem.
Z technického hlediska je asi nejzajímavějším prvkem jazyka YANG jeho příkaz augment
. Ten umožňuje vzít stávající modul a v libovolném místě jeho hierarchie přidat nové datové elementy nebo i celé podstromy. Podstatné je, že přijímající modul nemusí s takovým rozšířením dopředu nijak počítat. Pro ilustraci uveďme jeden realistický příklad použití:
augment "/if:interfaces/if:interface" { when "if:type = 'ethernet'"; container ethernet { ... } }
Obecný modul pro síťová rozhraní (jehož jmenný prostor je reprezentován prefixem if
) je zde rozšířen o kontejner ethernet
, v němž jsou definovány konfigurační parametry specifické pro rozhraní typu Ethernet. Přesné místo v datovém stromě, kam se má kontejner umístit, je uvedeno jako parametr příkazu augment
( /if:interfaces/if:interface
). Povšimněte si také, že rozšíření je podmíněné – platí pouze pro rozhraní, které mají v elementu if:type
uvedený typ ethernet
.
Základní datové modely
Po dokončení specifikace jazyka YANG a souvisejících standardů se pracovní skupina NETMOD vrhla na vývoj souboru základních (core) datových modelů pro obecně užitečné subsystémy. Měly by sloužit jako východisko pro jiné pracovní skupiny IETF, aby na nich mohly začít budovat své specializované datové modely, kupříkladu pro konfiguraci směrovacích protokolů.
Během roku 2012 budou dokončeny následující datové modely:
- základní systémové parametry (draft-ietf-netmod-system-mgmt)
- obecné síťové rozhraní (draft-ietf-netmod-interfaces-cfg)
- základní konfigurace IPv4 a IPv6 (draft-ietf-netmod-ip-cfg)
- směrovací subsystém (draft-ietf-netmod-routing-cfg)
- subsystém SNMP (draft-bjorklund-netmod-snmp-cfg)
Implementace
Nástroje pro práci s datovými modely v jazyce YANG jsou implementovány ve dvou open source programech: Yuma a pyang. Kromě kontroly správnosti YANG modulů například převádějí datové modely do jiných podob (RELAX NG/Schematron, UML) a také umějí proti datovým modelům validovat XML dokumenty různých typů.
Závěr
Jazyk YANG je poměrně mladý a trpí proto obvyklými problémy typu slepice-vejce. Jeho přijetí v komunitě IETF i mimo ni bylo ale celkem příznivé a několik projektů již YANG také ve větší míře využívá:
- OpenFlow – správa a konfigurace přepínačů s technologií OpenFlow;
- IPFIX – konfigurace zařízení pro sběr a zpracování informací o IP tocích;
- DNSCCM – správa a konfigurace serverů DNS.
Může se stát, že jazyk YANG v dlouhodobější perspektivě přesáhne svým významem rámec protokolu NETCONF, pro který byl výslovně vytvořen. NETCONF je totiž přece jen poplatný situaci v době svého vzniku, tedy téměř před deseti lety. Opakovaně se například objevují diskuse o možnosti použití YANGu v moderních aplikačních programových rozhraních typu REST.