YANG模型簡介(一)
概述:現(xiàn)有的SNMP模型的MIB由于是平鋪的表、不能區(qū)分配置和狀態(tài),XML模型的Schema是標(biāo)簽語言,對人不直觀;在這種情況下,YANG語言應(yīng)運而生,本期我們從YANG模型的定義、YANG文件與XML之間的關(guān)系、YANG模型的語法結(jié)構(gòu)、標(biāo)準(zhǔn)YANG的開發(fā)步驟這4個方面來簡單聊聊YANG模型。
YANG模型的定義
YANG是一種數(shù)據(jù)建模語言,一種非標(biāo)簽語言,在YANG模型之前,建模語言一直存在,因此YANG只能定義為Yet Another Next Generation,即稱為另一代的新模型。YANG有標(biāo)準(zhǔn)語法定義,基于RFC6020標(biāo)準(zhǔn),最早由Tail-F提出,2016年IETF發(fā)布1.1版本。
YANG文件與XML之間的關(guān)系
YANG文件就類似模板,填上數(shù)據(jù),就可以生成一致的XML,設(shè)備使用YANG文件,校驗XML、解析出數(shù)據(jù)。
YANG模型的語法結(jié)構(gòu)
YANG模型是一種樹形結(jié)構(gòu),是由無數(shù)的葉子、列表、葉列表、容器組成的描述整個設(shè)備的一棵樹。下面介紹YANG模型的四種主要類型的數(shù)據(jù)節(jié)點,包括葉節(jié)點(leaf)、列表節(jié)點(list)、葉列表節(jié)點(leaf-list)和容器節(jié)點(container):
基礎(chǔ)數(shù)據(jù)類型
在定義葉節(jié)點和葉列表節(jié)點時,須指定值類型。YANG原生支持的基礎(chǔ)數(shù)據(jù)類型有binary、bits、boolean、decimal64、empty、enumeration、instance-identifier、int8/16/32/64、leafref、string、uint8/16/32/64、union。
葉(leaf)
葉子包含簡單的數(shù)據(jù),如整數(shù)和字符串。它只有一個特定類型的值并且沒有子節(jié)點。
定義了一個名為host-name的leaf。type表示host-name的值是string類型的。description是對host-name的描述。
列表(list)
列表為一系列數(shù)據(jù)節(jié)點的集合,由key標(biāo)識,并由unique定義哪些數(shù)據(jù)節(jié)點需保持唯一。子節(jié)點可以是容器、葉節(jié)點、葉列表。
定義了一個名為user的list。這個list包含了三個leaf,分別為name、first-name和full-name。其中name為key,即name是唯一值,其他值(first-name和full-name)可以相同。
葉列表(leaf-list)
葉列表定義了特定類型的值序列。它是只有一個葉子的列表,只能創(chuàng)建和刪除。作用相當(dāng)于只有一個節(jié)點的表。
定義了一個名為domain-search的leaf-list。domain-search可以賦值為多個不同的值,但是值的類型都是string。
容器(container)
容器節(jié)點用于在子樹中組織相關(guān)的節(jié)點。容器只有子節(jié)點而沒有具體值。容器可以包含任何數(shù)量的任何類型(包括葉節(jié)點,列表節(jié)點,葉列表節(jié)點和容器)的子節(jié)點。
定義了一個名為system的container。且system中包含一個名為login的container。login中還包含一個名為message的leaf。
除了以上四種主要類型的數(shù)據(jù)節(jié)點外,組(grouping)、分支(choice)、派生類型(typedef)也是YANG模型其中一部分的相關(guān)功能定義語句。我們接著往下看:
組(grouping)
如果一組節(jié)點可以在不同的模塊或節(jié)點中重復(fù)使用,可以將這一組節(jié)點定義為可重用節(jié)點組,然后在需要引用的模塊或節(jié)點中使用uses關(guān)鍵字進行引用。
定義了一個grouping endpoint的A模塊,它包含兩個名為ip和port的leaf。B模塊是一個名為http-server的container,它包含一個名為name的leaf,以及引用了一個grouping endpoint。當(dāng)
分支(choice)
choice定義了一系列替代選擇,同一時間只能有一項存在。一個choice節(jié)點包含許多分支,分支用case定義聲明。有點像C語言中的case語句。
一個名為food的container,包含一個choice snack。choice snack有2個case,case1為sports-arena,其包含兩個子節(jié)點leaf pretzel和leaf beer。case2為late-night,只包含一個子節(jié)點leaf chocolate。
派生類型(typedef)
除此之外,還可以使用typedef語句從基本類型定義派生新類型。基本類型可以是基礎(chǔ)數(shù)據(jù)類型也可以是派生類型,允許一個層次化的派生類型。派生類型可以作為參數(shù)的類型聲明。
通過typedef定義派生類型percent——取值范圍為0到100的無符號整數(shù)。隨后,定義了一個名為completed的leaf,其類型為上面定義的派生類型percent。
標(biāo)準(zhǔn)YANG的開發(fā)步驟
總體來說,標(biāo)準(zhǔn)yang開發(fā)整個過程如下:
標(biāo)準(zhǔn)yang--->需要映射的主機復(fù)雜類-->主機映射yin文件---->devation文件--->app腳本
(1)首先要拿到標(biāo)準(zhǔn)yang文件,可以直接去網(wǎng)上下載,根據(jù)yang文件的節(jié)點建模塊的主機復(fù)雜類,和schema的復(fù)雜類建模一致。
(2)參考標(biāo)準(zhǔn)YANG開發(fā)指南修改yang文件,該yang文件只是臨時文件,為了轉(zhuǎn)yin文件。
(3)使用pyang將yang文件轉(zhuǎn)為yin文件,可直接使用以前私有yang轉(zhuǎn)換工具xsd2yang,轉(zhuǎn)換過程中出現(xiàn)報錯可以不用理會,不影響yin文件的生成,yin文件生成后需要做一些小處理,yin文件里只轉(zhuǎn)出了類和字段的id,未生成類和字段名,需要自己手動添加上去。yin文件歸檔在和主機schema文件一樣的目錄即可。
(4)生成devation.yang文件和devation.yin文件,歸檔于多產(chǎn)品目錄下
(5)完成app lua腳本編寫,和shcema app腳本類似。
(6)標(biāo)準(zhǔn)yang的調(diào)試手段和私有yang一致,使用MG-SOFT NetConf Browser調(diào)試驗證。
智能云網(wǎng)
智能云網(wǎng)社區(qū)是華為專為開發(fā)者打造的“學(xué)習(xí)、開發(fā)、驗證、交流”一站式支持與服務(wù)平臺,該平臺涵蓋多領(lǐng)域知識。目前承載了云園區(qū)網(wǎng)絡(luò),云廣域網(wǎng)絡(luò),數(shù)通網(wǎng)絡(luò)開放可編程,超融合數(shù)據(jù)中心網(wǎng)絡(luò),數(shù)通網(wǎng)絡(luò)設(shè)備開發(fā)社區(qū)共五個場景。為了響應(yīng)廣大開發(fā)者需求,還提供了開發(fā)者交流、API?體驗中心、多媒體課件、SDK工具包、開發(fā)者工具以及遠(yuǎn)程實驗室共六大工具,讓開發(fā)者輕松開發(fā)。
數(shù)通網(wǎng)絡(luò)開放可編程社區(qū)里的數(shù)通網(wǎng)絡(luò)開放可編程系統(tǒng)以YANG模型驅(qū)動力為基礎(chǔ),提供端到端的開發(fā)可編程能力;設(shè)備驅(qū)動可編程、網(wǎng)絡(luò)業(yè)務(wù)可編程、開發(fā)設(shè)備和業(yè)務(wù)北向接口,并且提供了安全可靠的保障機制。歡迎各位前來體驗。
歡迎大家來智能云網(wǎng)社區(qū)進行體驗學(xué)習(xí):《戳我戳我》
*注:部分文檔來源于網(wǎng)絡(luò)
容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。