![基于YANG的可编程网络:用YANG、NETCONF、RESTCONF和gNMI实现网络自动化架构](https://wfqqreader-1252317822.image.myqcloud.com/cover/684/40935684/b_40935684.jpg)
2.6 数据模型驱动的管理组件
数据模型驱动的管理基于应用建模语言正式描述数据源和API的想法,包括从模型生成行为和代码的能力。YANG是选中的数据模型语言;它允许建模者创建数据模型,定义模型中的数据组织并定义对该数据的约束。YANG模块发布后将充当客户端和服务器之间的合约,每一方都了解对方对其行为的期望。客户端知道如何为服务器创建有效数据,并知道服务器将发送哪些数据。服务器知道管理数据的规则以及它应该如何运作。
图2-4涵盖了数据模型驱动的管理组件,一旦指定并实现了YANG模型,网络管理系统(NMS)就可以选择特定的编码方式(XML、JSON、protobuf、thrift凡此种种)和特定的协议(NETCONF、RESTCONF或gNMI/gRPC)进行传输。不同协议之间的功能存在差异,当然编码和协议(由图中的箭头标记)的组合存在一些限制,这些将在本章后面进行回顾。
![074-1](https://epubservercos.yuewen.com/3B0372/21276926808148206/epubprivate/OEBPS/Images/074-1.jpg?sign=1739040900-jZot9FRIVMi9jFPDPb14PosAqGfdIWo8-0-b6a441af4f68e3780f26e7b4d9cd4d17)
图2-4 数据模型驱动的管理组件
编排器通常通过多个协议/编码提供服务自动化。根据编码和协议选择,你可以生成行为或代码以访问受管设备上的YANG对象(例如,在Python、C++、Go或基本上任何编程语言中)。请注意,随着时间的推移,越来越多的箭头被添加到这个图中。最后所有的组合都成为可能。
编排器在其自动化中使用代码生成。开源工具可能较好地演示数据模型驱动的管理概念和相关代码的呈现方式,如YANG Development Kit(YDK),它直接提供基于YANG模型的API,并在脚本中使用。YDK的主要目标是通过在API中表达模型语义和抽象协议/编码细节来降低YANG数据模型所涉及的学习曲线。示例2-1是Python程序oc-interfaces.py,它演示了派生自open-config-interfaces YANG模块的API生成。
示例2-1 配置BGP会话的PythonYDK示例
![075-1](https://epubservercos.yuewen.com/3B0372/21276926808148206/epubprivate/OEBPS/Images/075-1.jpg?sign=1739040900-cJ4hUMmfYsOcI5WENPX31iX9v78rDE4S-0-28ab31be78c546d206d6a5befe4651ca)
![076-1](https://epubservercos.yuewen.com/3B0372/21276926808148206/epubprivate/OEBPS/Images/076-1.jpg?sign=1739040900-VoWbUztxcl0OcU4UXAN4eu9roIyPimG3-0-7b17292f1684b01c0eaa497d883d427b)
![077-1](https://epubservercos.yuewen.com/3B0372/21276926808148206/epubprivate/OEBPS/Images/077-1.jpg?sign=1739040900-HK7Je7QVFfqnNkh5xggINUiCM3KmtpGc-0-d2bd64765f11493b63a7672ab8611215)
显然还有其他用于代码生成的工具;例如在OpenConfig中参阅http://www.openconfig.net/Software/。[20]
注意生成代码的主要信息源是YANG模块集。这就是IETF和整个行业花费巨大精力尽可能精确地标准化YANG模块的原因。