基于YANG的可编程网络:用YANG、NETCONF、RESTCONF和gNMI实现网络自动化架构
上QQ阅读APP看书,第一时间看更新

2.10 编程语言

良好的脚本基于良好的应用程序编程接口(API)。API是一组功能和过程,用于创建访问操作系统、应用程序或其他服务功能或数据的应用。基本上API应提供以下功能:

  • 抽象:可编程API应该抽象去除底层实现的复杂性。网络程序员不需要知道不必要的细节,例如:配置的特定顺序;在发生故障时要采取的特定步骤。配置功能更应该像填写高级检查表(这些是你需要的设置;系统可以找出如何正确地对它们进行分组和排序)。
  • 数据规范:API的关键工作(无论是软件还是网络API)是为数据提供规范。首先,它回答了数据是什么——整数、字符串或其他类型的值。接下来它指定了该数据的组织方式。在传统编程中这被称为数据结构,网络可编程中更常见的术语是“模式”,也称为“数据模型”。
  • 访问数据的方法:最后,API为如何读取和操作设备数据提供了标准化框架。

前面给出了YANG开发套件(YDK)[25]示例(请参阅示例2-1)。YDK的主要目标是通过在API中表达模型语义和抽象协议/编码细节来降低YANG数据模型的学习曲线。YDK由定义服务和提供商的核心软件包以及一个或多个基于YANG模型的模块捆绑包[26]组成。每个模块捆绑包都使用捆绑包配置文件和ydk-gen工具来生成。YDK-Py[27]为几个模型捆绑包提供Python API。同样,YDK-Cpp[28]也包括相同捆绑的C++和Go API。C语言也存在类似的捆绑包。

从OpenConfig中获取了更多示例,以下是当前可用的工具:

  • Ygot[29](YANG Go Tools):用于从YANG模块生成Go结构或原型。
  • Goyang:[30]一个采用Go语言的YANG解析器和编译器。
  • pyangbind:[31]一个pyang插件,可将YANG数据模型转换为Python类层次结构。

这些示例再次证明了工具链的重要性,其中编程语言(C、C++、Python、Go,凡此种种)只是其中一个组件。假设运营工程师正在开发和支持基于特定语言的脚本,继续使用同一编程语言开发基于YANG的自动化脚本是完全合理的。