来源:https://developer.cisco.com/learning/lab/nxos-intro-03_nxapi-rest/step/1
了解更多:https://developer.cisco.com/site/cisco-nexus-nx-api-references/
概观
- 在Cisco Nexus设备中,最常用的配置方法是使用仅在设备上运行的命令行界面(CLI),该方法具有局限性。思科提供NX-API REST:
- 提供交换机外部可用的特定CLI。
- 将配置操作组合到相对较少的HTTP/HTTPS操作中。
- 使用POST作为传递方法。
- NX-API REST不仅支持
show
命令、基本和高级交换机配置,还可以运行Linux Bash命令。 - 在后端,NX-API REST使用Nginx HTTP服务器。可以指示Nginx服务器以XML或JSON格式返回所请求的数据。
步骤1.启用NX-API功能
- 使用NX-API接口之前,必须在Cisco Nexus交换机上启用nxapi功能。
步骤2.从NX-API Developer Sandbox进行REST API调用
地址:https://sbx-nxos-mgmt.cisco.com
admin / Admin_1234!
步骤3.使用POSTMAN进行NX-API REST调用
- 便于进行分解动作,调试。
- 拿token
POST:https://sbx-nxos-mgmt.cisco.com/api/aaaLogin.json
body中:{ "aaaUser": { "attributes": { "name": "admin", "pwd": "Admin_1234!" } } }
2.添加一个loopback接口来管理、更新路由器。
https://sbx-nxos-mgmt.cisco.com/api/mo/sys/intf/lb-[lo30].json
lb-[lo30].json
表示它是一个环回接口,其中30设置为虚拟接口号。
- 先
GET
,再POST
。
{
"l3LbRtdIf" : {
"attributes" : {
"descr": "My Learning Lab Loopback"
}
}
}
步骤4.使用Python与NX-OS交互
- 以下Python代码获取系统信息,并以漂亮的格式打印出主机名,序列号,正常运行时间和当前设备状态。
~\nxos-code\intro-nxapi\get_sys_info.py
import requests, urllib3
# Disable Self-Signed Cert warning for demo
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Assign requests.Session instance to session variable
session = requests.Session()
# Define URL and PAYLOAD variables
URL = "https://sbx-nxos-mgmt.cisco.com/api/aaaLogin.json"
PAYLOAD = {
"aaaUser": {
"attributes": {
"name": "admin",
"pwd": "Admin_1234!"
}
}
}
# Obtain an authentication cookie
session.post(URL,json=PAYLOAD,verify=False)
# Define SYS_URL variable
SYS_URL = "https://sbx-nxos-mgmt.cisco.com/api/mo/sys.json"
# Obtain system information by making session.get call
# then convert it to JSON format then filter to system attributes
sys_info = session.get(SYS_URL,verify=False).json()["imdata"][0]["topSystem"]["attributes"]
# Print hostname, serial nmber, uptime and current state information
# obtained from the NXOSv9k
print("HOSTNAME:", sys_info["name"])
print("SERIAL NUMBER:", sys_info["serial"])
print("UPTIME:", sys_info["systemUpTime"])
- 输入以下命令运行脚本
$ python get_sys_info.py
HOSTNAME: NXOSv9k-REST-API
SERIAL NUMBER: 9CNCP82CNY5
UPTIME: 01:16:13:49.000
CURRENT STATE: out-of-service
$