所以del x[1:4]表示从下标为1的元素开始删除到下标为4-1的元素为止吗?
最近让我写一篇NETCONF在网络运维中实际应用的读者越来越多,趁着最近回沙特后能把KAUST堆满仓库的3850, 9200, 9300等IOS-XE真机设备拿出来做实验,趁这个机会我就写写NETCONF,YANG和ncclient,分为上、下两篇,上篇讲NETCONF和YANG,下篇讲ncclient,包含理论和实战。以后有时间也会讲讲REST和RESTCONF。
2002年6月,互联网架构委员会(Internet Architeture Board,简称IAB)举办了一个主题为Network Management的workshop,邀请了一大帮研发界业内名气响当当的巨佬(大多来自IETF)共同商议讨论彼时普遍使用的网络管理协议,找出它们各自的优势和缺点,并列出一个优秀的网络管理协议必须具备的特征,准备为开发下一代网络管理协议(NextGen
在这个背景下,IETF于2006年12月率先发布了RFC 4741, 也就是NETCONF这个基于XML,用来替代CLI、SNMP的网络配置和管理协议。在随后几年加加改改进行一番修订后,IETF又于2011年6月以RFC 6241作为终稿将其再次发布。
虽然NETCONF年龄不算小,但是倒退10年前你要是问一个网络工程师什么是NETCONF(更别提YANG了),大概率你会看到对方一脸懵逼的把你看着,因为当时主流的思科IOS设备根本就不支持NETCONF,当时的思科对NETCONF并不感冒,而是自己闭门造车分别在2007年和2012年搞出了WSMA(Web Service Management Agent)和onePK这两个API。那些年跟随思科的步伐一路从CCNA,CCNP,CCIE摸爬滚打起来的网工压根就没听说过还有这么一个书上不会教,考试不会考,工作中也基本用不到的非常小众的技术。十年河东十年河西,这些年随着SDN和网络运维自动化技术的强势崛起,NETCONF终于在诞生10多年后在传统计算机网络这个行业里有了一定的曝光率,跟着RESTCONF和gRPC这俩哥们一起站在时代的风口上飞了起来。
关于NETCONF的理论部分网上有很多资料,最权威的肯定还是RFC 6241,这里做一下总结:
/YangModels/yang)上存放着大部分标准(standard)和私有(vendor)的YANG模型,截止2020年9月,标准模型中包含IETF,IEEE,ETSI等国际知名组织和协会制定的YANG模块,私有模型中包含思科,Juniper,华为,诺基亚,富士通在内的厂商自己制定的YANG模块。
我们可以通过git clone来下载上述所有标准和私有的YANG模型及其对应的模块:
下载完毕后,当前目录下多出来了一个名叫yang的子目录,其中yang/standard/ietf/RFC下包含了全部由IETF制定的YANG模块,其中也包含我们上面举例的ietf-interfaces模块(不在截图里)。
你也许会问,怎么和上面我们举例的ietf-interfaces模块内容不一样?这是因为上面的例子中我们是以树形格式(Tree View Format)展开ietf-interfaces模块,而这里用cat查看的是该模块的源代码。我们可以用pyang这个Python模块来以树形格式的形式查看一个YANG模块的具体结构。
Pyang是Python专为YANG开发的一个开源模块,主要有三个功能:1. 用来验证YANG模块代码的准确性,2. 将YANG模块转换成其他格式(比如我们前面讲到的树形格式), 3. 从YANG模块中生成代码。这里我们主要讲下如何使用Pyang来将刚才的ietf-interfaces.yang这个模块转化为树形格式。
首先通过pip下载安装pyang:
讲完理论后来做实验。实验环境很简单,就是一台CENTOS 7主机和一台思科3850的交换机直连。
2. 回到主机,通过SSH访问交换机的830端口:
3. 连接成功后,交换机会回复一个hello包,以及一长串capabilities,也就是该交换机支持的yang model:既有思科的,也有IETF的,由于回显内容过多,下图只截取部分以作演示:
4. 随后我们复制粘贴下列XML代码向交换机回复一个hello包(交换机不会做出任何回应),之后主机和交换机之间的netconf session即建立成功。
5. 发送下列XML代码向交换机查询Gi1/0/33端口的配置:
随即交换机会回复一个rpc-reply包(下图红框中的部分),后面的内容即我们请求的Gi1/0/33端口的配置信息,包括该端口下的description和IP地址(为空)。
注意复制RPC-REPLY内容时不要把末尾的]]>]]>给一并复制了(前面讲了它们不是XML语言的一部分),不然Code Beautify会报错:
7. 接下来我们用下面这段XML代码来查询交换机的running configuration。请自行尝试这里就不放截图了:
这里我故意没做缩进,就是为了告诉你XML没有严格要求代码缩进。
这里我们使用到了这个前文NETCONF理论部分讲到的基本操作,通常下面会接一个,表示需要修改配置的目标,表示数据集,这里我们要更改的是startup这个数据集(也可以使用running/),后面的表示这里我们使用了前面讲到了的思科私有(Native)YANG模型。
回到交换机上验证Gi1/0/33的配置:
之后回到交换机上验证Gi1/0/33的配置:
关于NETCONF和YANG的理论和实战就讲到这里,可以看到NETCONF这种通过复制粘贴XML代码的操作方式对传统工程师来说很不适应,虽然不太好用,但NETCONF确实是SDN时代网工们必须掌握的技能之一。下篇我将继续讲解ncclient这个Python专为NETCONF客户端开发的第三方模块,看看NETCONF结合Python会不会省事一些。