Hlavní navigace

Modelování konfiguračních dat v jazyku YANG

Ladislav Lhotka 7. 5. 2012

V předchozím článku jsme se věnovali otevřenému protokolu NETCONF, který umožňuje vzdáleně konfigurovat různé síťové prvky nebo služby bez ohledu na výrobce. Na obsah předchozího článku nyní navážeme a společně si popíšeme nástroje pro modelování konfigurací, stavových dat a dalších informací.

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:

  1. Datové modely mají být velmi dobře čitelné pro lidi i software.
  2. Datový model musí přehledně reprezentovat jak schéma a datové typy, tak i nejrůznější sémantická pravidla a omezení.
  3. Datový model musí být schopen definovat i nové operace jako rozšíření protokolu NETCONF.
  4. 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:

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.

Našli jste v článku chybu?

9. 5. 2012 16:06

Vuk (neregistrovaný)

Ano, modelovat se tím dá ledacos, router od Juniperu například (ačkoli to asi vzniklo nějakou konverzí z něčeho jiného, podle toho, jak to vypadá). 'grouping', 'when', ani 'refine' nejsou v některých situacích dost silné a k vybřednutí z copy-paste to nemusí stačit. (Trochu ujetý příklad - 40 podobných kontejnerů lišících se například v typu či jménu některého uzlu.)

Čímž nechci říct, že YANG je na nic, ale někdy bohužel poslouží leda jako mezijazyk, k čemuž zas tak úplně stavěný není.

9. 5. 2012 9:23

MNO (neregistrovaný)

Existuje Groovy yangbuilder, kterym lze generovat i slozite yangy se syntaxi podobnou jako ma yang.

https://bitbucket.org/bubbles.way/yangbuilder

Lze tak 'kombinovat' yang + groovy (programovani)

Napr.
https://bitbucket.org/bubbles.way/yangbuilder/src/c8dc63ba13fb/templates/scripts/example1Yang.groovy


Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky