YANG模型简介(一)

举报
HZDX 发表于 2021/09/30 17:09:49 2021/09/30
【摘要】 概述:现有的SNMP模型的MIB由于是平铺的表、不能区分配置和状态,XML模型的Schema是标签语言,对人不直观;在这种情况下,YANG语言应运而生,本期我们从YANG模型的定义、YANG文件与XML之间的关系、YANG模型的语法结构、标准YANG的开发步骤这4个方面来简单聊聊YANG模型。  YANG模型的定义  YANG是一种数据建模语言,一种非标签语言,在YANG模型之前,建模语言一...

概述:现有的SNMP模型的MIB由于是平铺的表、不能区分配置和状态,XML模型的Schema是标签语言,对人不直观;在这种情况下,YANG语言应运而生,本期我们从YANG模型的定义、YANG文件与XML之间的关系、YANG模型的语法结构、标准YANG的开发步骤这4个方面来简单聊聊YANG模型。

  YANG模型的定义  

YANG是一种数据建模语言,一种非标签语言,在YANG模型之前,建模语言一直存在,因此YANG只能定义为Yet Another Next Generation,即称为另一代的新模型。YANG有标准语法定义,基于RFC6020标准,最早由Tail-F提出,2016年IETF发布1.1版本。


  YANG文件与XML之间的关系  

图片2.png

YANG文件就类似模板,填上数据,就可以生成一致的XML,设备使用YANG文件,校验XML、解析出数据。


  YANG模型的语法结构  

YANG模型是一种树形结构,是由无数的叶子、列表、叶列表、容器组成的描述整个设备的一棵树。下面介绍YANG模型的四种主要类型的数据节点,包括叶节点(leaf)、列表节点(list)、叶列表节点(leaf-list)和容器节点(container):

 基础数据类型 

在定义叶节点和叶列表节点时,须指定值类型。YANG原生支持的基础数据类型有binary、bits、boolean、decimal64、empty、enumeration、instance-identifier、int8/16/32/64、leafref、string、uint8/16/32/64、union。

1111.png


 叶(leaf

叶子包含简单的数据,如整数和字符串。它只有一个特定类型的值并且没有子节点。

1.png

定义了一个名为host-nameleaftype表示host-name的值是string类型的。description是对host-name的描述。

 列表(list

列表为一系列数据节点的集合,由key标识,并由unique定义哪些数据节点需保持唯一。子节点可以是容器、叶节点、叶列表。

2.png

定义了一个名为userlist。这个list包含了三个leaf,分别为namefirst-namefull-name。其中namekey,即name是唯一值,其他值(first-namefull-name)可以相同。

 叶列表(leaf-list

叶列表定义了特定类型的值序列。它是只有一个叶子的列表,只能创建和删除。作用相当于只有一个节点的表。

2.1.png

定义了一个名为domain-searchleaf-listdomain-search可以赋值为多个不同的值,但是值的类型都是string

 容器(container

容器节点用于在子树中组织相关的节点。容器只有子节点而没有具体值。容器可以包含任何数量的任何类型(包括叶节点,列表节点,叶列表节点和容器)的子节点。

3.png

定义了一个名为systemcontainer。且system中包含一个名为logincontainerlogin中还包含一个名为messageleaf

除了以上四种主要类型的数据节点外,组(grouping)、分支(choice)、派生类型(typedef)也是YANG模型其中一部分的相关功能定义语句。我们接着往下看:

 组(grouping

如果一组节点可以在不同的模块或节点中重复使用,可以将这一组节点定义为可重用节点组,然后在需要引用的模块或节点中使用uses关键字进行引用。

4.png

定义了一个grouping endpointA模块,它包含两个名为ipportleafB模块是一个名为http-servercontainer,它包含一个名为nameleaf,以及引用了一个grouping endpoint。当<http-server>实例化的时候,需要对name以及endpoint中的ipport进行赋值。

 分支(choice

choice定义了一系列替代选择,同一时间只能有一项存在。一个choice节点包含许多分支,分支用case定义声明。有点像C语言中的case语句。

5.png

一个名为foodcontainer,包含一个choice snackchoice snack2casecase1sports-arena,其包含两个子节点leaf pretzelleaf beercase2late-night,只包含一个子节点leaf chocolate

 派生类型(typedef

除此之外,还可以使用typedef语句从基本类型定义派生新类型。基本类型可以是基础数据类型也可以是派生类型,允许一个层次化的派生类型。派生类型可以作为参数的类型声明。

6.png

通过typedef定义派生类型percent——取值范围为0100的无符号整数。随后,定义了一个名为completedleaf,其类型为上面定义的派生类型percent


  标准YANG的开发步骤  


总体来说,标准yang开发整个过程如下:

 标准yang--->需要映射的主机复杂类-->主机映射yin文件---->devation文件--->app脚本 

1)首先要拿到标准yang文件,可以直接去网上下载,根据yang文件的节点建模块的主机复杂类,和schema的复杂类建模一致。

2)参考标准YANG开发指南修改yang文件,该yang文件只是临时文件,为了转yin文件。

3)使用pyangyang文件转为yin文件,可直接使用以前私有yang转换工具xsd2yang转换过程中出现报错可以不用理会,不影响yin文件的生成,yin文件生成后需要做一些小处理,yin文件里只转出了类和字段的id,未生成类和字段名,需要自己手动添加上去。yin文件归档在和主机schema文件一样的目录即可。

4)生成devation.yang文件和devation.yin文件,归档于多产品目录下

5)完成app lua脚本编写,和shcema app脚本类似。

6)标准yang的调试手段和私有yang一致,使用MG-SOFT NetConf Browser调试验证。


  智能云网  

智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开发社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。

数通网络开放可编程社区里的数通网络开放可编程系统以YANG模型驱动力为基础,提供端到端的开发可编程能力;设备驱动可编程、网络业务可编程、开发设备和业务北向接口,并且提供了安全可靠的保障机制。欢迎各位前来体验。


155813rfhdurcxe3ddxw5l.png

欢迎大家来智能云网社区进行体验学习:戳我戳我


*注:部分文档来源于网络


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。