您的位置 首页 golang

网络工程师的Python之路 — RestConf实战(Postman)

版权声明:我已加入“维权骑士”( )的版权保护计划,知乎专栏“网路行者”下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。

如果你喜欢我的文章,请关注我的知乎专栏“网路行者” HTTPS ://zhuanlan.zhihu.com/c_126268929 , 里面有更多像本文一样深度讲解计算机网络技术的优质文章。


作为NetDevOps里比较常见的API之一,前年我在专栏里讲到了NetConf的应用,分为上下两篇:

后来想给Restconf也补上一篇,奈何去年精力都放在Nornir、 Django 以及Golang上去了,最近有空打算也把RestConf这个坑给补了。RestConf将分为两篇来写,第一篇用Postman实战操作,第二篇用Python的requests模块来讲解,以实验的方式快速带大家入手RestConf的实际使用。

本篇主要讲解RestConf在Postman中的实战应用,理论部分只简单带过。


RestConf简介

介绍RestConf之前先来回顾一下NetConf的知识点,因为两者关系密切。

之前在介绍NetConf的时候,我们知道在NetConf中定义了数据集(datastore)的概念,数据集的作用是用来存储一份配置数据的备份,确保设备能从开机时的初始状态进入到它能正常运行时的工作状态(类似于改了配置后需要write memroy,不然重启设备后配置会丢失)。而针对数据集的操作又引入了CRUD这一概念,所谓CRUD是Create、Read、Update、Delete四种操作的首字母缩写,用来表示数据集支持创建、读取、更新、删除四种操作。除此之外,在NetConf的基础上,IETF又在RFC 6020中提出了YANG这个专为NetConf打造的建模语言,YANG语言定义了数据存储内容、配置、状态数据、 RPC 操作,以及事件通知的标准,为CRUD访问的数据集里的数据制定了统一的格式。

而根据RFC 8010的定义,所谓RestConf就是指通过HTTP协议对采用YANG模型的“概念上的数据集”(conceptual datastore)进行CRUD的操作,理论上RestConf和NetConf做的是同样的事(消息层都是基于RPC协议),只是实现的方法不同,NetConf基于 SSH 协议,而RestConf则基于HTTP协议。

HTTP方法和CRUD的对应关系

之前在我《网络工程师的Django之路》视频教学中讲到了HTTP中的GET和POST两种请求方式,除此之外HTTP还有PUT、PATCH以及DELETE三种方式,它们与CRUD对应关系以及在NetDevOps中的应用如下:

HTTP方法

CRUD操作

NetDevOps中应用举例

GET

READ

读取交换机配置

POST

CREATE

添加交换机配置

PUT

UPDATE

替换交换机配置

PATCH

UPDATE

更改交换机配置

DELETE

DELETE

删除交换机配置

下面的实验部分将针对上述RestConf的这几种操作在思科Catalyst 9300交换机(真机)中通过Postman分别进行演示。

Postman

Postman是目前最知名的 Rest Conf工具之一,最早的作者是印度人Abhinav Asthana,其创建Postman的初衷是为了打造一个简化API测试功能的工具,后来Postman一炮而红,Abhinav的前同事Ankit Sobti和Abhijit Kane也加了他的团队。现在Postman已经拿到了INSIGHT PARTNERS 2.25亿美元的D轮融资,总部设在 旧金山 ,两个分部设在 班加罗尔 ,是当前最火热的API工具之一, 思科 的DevNet认证教程里关于RestConf的内容都是基于Postman做演示和讲解的。

Postman的使用是免费的(也有付费版,只是作为网工的我们暂时用不上),支持Windows, Linux MacOS 等主流操作系统,读者可以根据自身情况在其官网下载Download Postman | Get Started for Free。

除Postman之外我们也可以使用curl, HTTPie以及Python的 Request s模块来对网络设备进行基于RestConf的CRUD操作,本篇讲介绍RestConf在Postman中的使用方式,下篇介绍如何通过requests模块在Python使用RestConf。


RestConf实验讲解

实验环境

实验设备:思科Catalyst 9300交换机(真机)x 1台

型号:C9300-48U

操作系统版本:IOS-XE 16.12.4 (思科从IOS-XE 16.3开始支持RestConf,更早的版本不支持)

主机操作系统: Windows 8.1

Postman版本:9.0.9

交换机初始配置

思科IOS-XE设备开启RestConf非常简单,但是在有AAA(TACACS或者 RADIUS )的环境里有一些额外的配置需要完成, 这步非常非常非常卡人,思科从IOS-XE 16.3才开始支持RestConf,目前就连思科TAC都不提供技术支持,网上包括思科官方给的资料都很少很模糊。

这里我将给出RestConf在使用本地用户的非AAA环境,和使用AAA的 TACACS 或RADIUS的环境下的初始配置。

  • 本地用户(非AAA环境)
 config  terminal 
restconf
ip http server
ip http secure-server
username test privilege 15 secret test  

是的,你没看错,思科IOS-XE上启用RestConf就这么简单,只需要输入命令restconf启用RestConf,开启HTTP和HTTPS服务,然后配置一个特权级别为15的用户名即可。

  • AAA环境(假设使用思科的ISE)
 config terminal
restconf
ip http server
ip http secure-server

aaa group server tacacs+ ISE
aaa authentication login default group ISE local
aaa authentication login NOAUTH none
aaa authorization exec default group ISE local
aaa session-id common  

这里 aaa authentication login default aaa authorization exec default 这两个思科默认自带的authentcation list以及authorization list是非常容易忽略的配置,请务必确保你的AAA配置中有它们,不然使用RestConf的时候会一直卡在因为权限不够而禁止访问的地方。

Postman初始配置

鉴于不少读者是初次使用Postman,这里给出详细使用步骤:

  1. 第一次进入Postman后,在Start with something new下点击Create New,如果提示注册用户,请按需完成(注册用户名是免费的)。

2. 选择HTTP Request:

3. 进入后,你会看见一个叫做GET Untitled Request的任务标签,点击该标签下面的Headers,在这里添加Content-Type : application/yang-data+ JSON 和Accept : application/yang-data+json两组键值对,如下:

4. 点击Authorization,在Type处选择 Basic Auth,如下:

5. 之后根据自己的环境按需输入交换机本地用户名和密码或者TACACS/RADIUS用户名和密码:

通过GET方法获取交换机配置

首先我们来看下如何在Postman上通过RestConf来获取交换机的running配置(也就是命令行里的show run)。

首先确保你选择的是GET方法,然后在地址栏里输入下面地址:

   

将xx.xx.xx.xx替换成你的交换机的IP地址即可。这里我们用到了思科的”Cisco-IOS-XE-native:native”的YANG模型。点击 Send 按钮后,在下面的Body部分可以看到以JSON格式返回的交换机的running配置。

注意通过RestConf的GET方法获取交换机running配置的耗时会根据交换机running配置文件的大小而异,我的这台9300真机因为配置较多,所以花了24.26秒,如果你们的running配置文件也较大,那么请耐心等待,不要误认为是Postman“卡住了”。

接着我们还可以修改URL,继续通过GET方式配合“Cisco-IOS-XE-native:native”这个YANG模型来提取交换机的主机名、操作系统版本信息、所有端口、 VLAN 等等信息,方法如下:

获取交换机主机名:

   

获取交换机操作系统版本信息:

   

获取交换机端口信息:

   

获取交换机VLAN:

   

使用?depth=修改深度

我们知道YANG模型是树形结构的,Cisco-IOS-XE-native:native这个YANG模型自然也不例外。比如上面我们获取的running配置内容过多,返回的以JSON格式展现的配置一层套了一层又一层,比如”Cisco-IOS-XE-native:native”下面有“version”,”boot”, “banner”等等,而”boot”下面又有”system”,”system”下面又有“Cisco-IOS-XE-switch:switch”,“Cisco-IOS-XE-switch:switch”下面又有”all”等等,有些时候我们其实并不需要如此详尽的信息。

RestConf支持在URL里使用“?depth=”来修改深度,?depth=1表示只返回1层的内容,?depth=2表示返回2层的内容,以此类推。

下面我们尝试对交换机的running配置使用?depth=1,来看下效果:

   

至于?depth=2,?depth=3等等就留给读者自行去尝试。

通过PATCH方法更改交换机配置

前面在介绍CRUD和HTTP的五种方法的对比时已经提到了,PATCH和PUT都可以用来为交换机做配置,它们的区别是前者是用来”更改”配置的,而后者是用来”替换”配置。

这里以9300交换机其中的Gi0/0端口为对象,来具体演示下PATCH和PUT两者的区别,看下到底要怎么理解这个“更改”和“替换”。

首先来看下Gi0/0端口当前的配置,可以看到该端口目前是没有IP地址的:

这里我们首先手动为它添加一个ip:192.168.2.11

回到Postman,通过以下GET方式得到gi0/0配置了IP后的状态:

   

注意这里我们通过在后面加上 “/ GigabitEthernet=0%2F0” 来过滤出了Gi0/0这个端口。

在RestConf中,分隔符”/”需要用”%2F”来表示,你不能写成 GigabitEthernet=0/0, 切记。

接下来我们将上面执行GET方式得到的这段Gi0/0端口的JSON代码全选并复制:

然后在Postman里依次将GET方式改为PATCH,然后点击Body,选择 raw ,最后将刚才复制的JSON代码粘贴到raw下面的代码框里,如下所示:

接着我们在raw代码框里面将192.168.2.11改为192.168.2.12,然后点击SEND,如下:

最后回到交换机上,可以看到Gi0/0端口的ip已经从192.168.2.11变为192.168.2.12:

通过PUT方式替换交换机配置

接下来我们再看如何通过PUT方式来替换交换机配置,看它和PATCH方式的差异在哪。

首先我们手动为Gi0/0添加一个secondary IP – 192.168.3.12:

回到POSTMAN,用GET方式查看Gi0/0状态,可以看到新添加的secondary IP:

接下来打开Postman左侧的History,找到之前我们给Gi0/0配置的JSON代码,然后点击Send以 PATCH 的方式从新配置一遍:

这时回到交换机上, 发现192.168.3.12这个secondary IP依然存在 原因就在于PATCH是不具备覆盖配置的功能的,只能在现有配置的基础上添加配置或修改已有的配置

这时我们把PATCH改为PUT,点击Send再配置一次:

回到交换机下,发现之前gi0/0的配置已经 被PUT覆盖 ,192.168.3.12这个secondary IP已经不在了。

可以看出相较于PATCH,PUT提供的覆盖配置的功能更贴合思科“基于意图的网络”(Intent-Based Networking)的概念,即“我不管设备上当前是什么样的配置,我只想看到设备上出现且仅出现我需要的配置。”

通过DELETE方式来删除设备配置

最后我们来看下怎么通过DELETE方式删除交换机的配置。这里以VLAN配置举例,首先我们看到当前9300下面没有VLAN 2:

在Postman通过GET方式验证:

注意在Cisco-IOS-XE-native:native这个YANG模型下要过滤出具体的单个VLAN,比如VLAN 2,方式如下:

   

回到交换机手动添加Vlan2,将其取名为RestConf:

再次回到Postman上通过GET方式验证,可以看到出现了新创建的VLAN 2:

接下来我们通过DELETE方式刚刚创建的VLAN 2,方法很简单,只需要在Postman中将GET方式改为DELETE即可:

回到交换机上show vlan brief验证,可以看到刚刚配置好的vlan 2已经通过RestConf被删除掉了:

更多思科Cisco-IOS-XE-native:native YANG模型的使用

到这里在Postman中通过RestConf的GET、PUT、PATCH、DELETE几种方式对网络设备执行CRUD的基本操作就介绍完了,想必大家也很想知道除了本文中讲到的running配置、hostname、version、interface、vlan之外我们还能对 思科交换机 的其他配置做什么操作。

这里给出Github上Cisco-IOS-XE-native:native YANG模型的源码,大家可以根据自己的需要加以学习:

文章来源:智云一二三科技

文章标题:网络工程师的Python之路 — RestConf实战(Postman)

文章地址:https://www.zhihuclub.com/99448.shtml

关于作者: 智云科技

热门文章

网站地图