YANG模型简介(一)

网友投稿 3204 2022-05-30

概述:现有的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之间的关系

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。

YANG模型简介(一)

叶(leaf)

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

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

列表(list)

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

定义了一个名为user的list。这个list包含了三个leaf,分别为name、first-name和full-name。其中name为key,即name是唯一值,其他值(first-name和full-name)可以相同。

叶列表(leaf-list)

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

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

容器(container)

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

定义了一个名为system的container。且system中包含一个名为login的container。login中还包含一个名为message的leaf。

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

组(grouping)

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

定义了一个grouping endpoint的A模块,它包含两个名为ip和port的leaf。B模块是一个名为http-server的container,它包含一个名为name的leaf,以及引用了一个grouping endpoint。当实例化的时候,需要对name以及endpoint中的ip和port进行赋值。

分支(choice)

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

一个名为food的container,包含一个choice snack。choice snack有2个case,case1为sports-arena,其包含两个子节点leaf pretzel和leaf beer。case2为late-night,只包含一个子节点leaf chocolate。

派生类型(typedef)

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

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

标准YANG的开发步骤

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

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

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

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

(3)使用pyang将yang文件转为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模型驱动力为基础,提供端到端的开发可编程能力;设备驱动可编程、网络业务可编程、开发设备和业务北向接口,并且提供了安全可靠的保障机制。欢迎各位前来体验。

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

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

容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java虚拟机生态技术及其7种编程语言探秘(上)
下一篇:从One-hot, Word embedding到Transformer,一步步教你理解Bert
相关文章