在Nexus 3000/9000交换机中开发,调试和部署NX-SDK Python应用程序

本文档介绍了如何在Nexus 3000/9000交换机上使用NX-SDK开发Python应用程序。内容涵盖启用NX-SDK、创建Python文件、实现NX-SDK组件如sdkThread、pyCmdHandler类,以及自定义CLI命令的语法。此外,还讨论了调试和部署应用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:https://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/nx-os-software/213396-develop-debug-and-deploy-nx-sdk-python.html#anc1

背景

  • Cisco NX-SDK允许开发定制应用程序,这些应用程序可以运行在Nexus 9000和Nexus 3000的NX-OS平台上。NX-SDK为客户提供了创建自己的CLI命令和输出、生成响应特定事件的定制系统日志、流定制遥测等功能。

使用NX-SDK开发Python应用程序

启用NX-SDK

要运行任何NX-SDK应用程序,必须首先在设备上启用NX-SDK功能:
switch(config)#feature nxsdk

创建一个Python文件

  • 可以使用NX-OS Bash shell创建和编辑Python文件。为了使用Bash shell,必须首先在设备上启用它:
    switch(config)#feature bash-shell
  • 输入Bash shell并使用vi文本编辑器创建和编辑Python文件:
    switch(config)
    #run bash bash-4.2 $ vi /isan/bin/nxsdk-app.py

注意:最佳做法是在/ isan / bin / 目录中创建Python文件。Python文件需要执行权限才能运行 - 不要将Python文件放在/ bootflash 目录或其任何子目录中。
不需要通过NX-OS创建和编辑Python文件。开发人员可以使用他们的本地环境创建应用程序,并使用他们选择的文件传输协议将完成的文件传输到设备。但是,对于开发人员来说,使用NX-OS实用程序对其脚本进行调试和故障排除可能更有效。

实施NX-SDK组件

  • 建议从NX-SDK GitHub 开始创建NX-SDK Python应用程序。
  • NX-SDK Python应用程序需要四个主要组件:
    • 必须通过import nx_sdk_py语句将NX-SDK导入应用程序。
    • 一个函数(通常名为sdkThread),用于启动NX-SDK应用程序并修改与应用程序相关的各种选项。
    • 创建自定义CLI命令以及sdkThread 函数中自定义CLI命令语法的定义。
    • 一个名为pyCmdHandler的类 ,其方法名为postCliCb,它处理由NX-SDK应用程序添加的自定义CLI命令。

sdkThread功能

  • (thread线程)
  • 功能:用于启动NX-SDK应用程序并修改与应用程序相关的各种选项。
  • 所有Python NX-SDK应用程序都要调用nx_sdk_py库中的三个方法:
    • sdk = nx_sdk_py.NxSdk.getSdkInst(len(sys.argv),sys.argv)
      • 这是第一步。
      • 返回SDK实例对象,表示NX-SDK应用程序已成功注册NX-OS基础结构。
      • 返回None,注册过程发生错误。
    • sdk.startEventLoop()
      • 倒数第二步。
      • 启动NX-SDK应用程序,并允许它与NX-OS基础结构进行交互。
    • nx_sdk_py.NxSdk .__ swig_destroy __(sdk)
      • 最后一步。
      • 允许NX-SDK应用程序的正常退出。
  • 常用的一些方法:
    • tmsg = sdk.getTracer()
      • 返回NxTrace对象,用于生成自定义系统记录,并将事件和错误记录到应用程序的事件历史记录中。
      • 自定义系统日志将显示在设备的系统日志中,通过show logging logfile命令可见。
      • 记录到应用程序事件历史记录的事件可通过show <application-name> nxsdk event-history eventsshow <application-name> nxsdk event-history errors 命令。
      • 例如:通过 show Transceiver_DOM.py nxsdk event-history eventsshow Transceiver_DOM.py nxsdk event-history errors查看名为Transceiver_DOM.py的应用程序的事件历史记录。
    • cliP = sdk.getCliParser()
      • 该对象可用于执行存在的CLI命令以及创建自定义CLI命令。
    • cliP.execShowCmd(“cmd”,return_type)
      • exec执行。
      • cmd:show命令
      • return_typeR_TEXTR_JSONR_XML。如nx_sdk_py.R_JSON.
        • 先确认是否支持JSON和XML,使用show mac address-table dynamic | json,如果输出JSON格式,则支持。
    • cliP.execConfigCmd(cmd_filename)
      • cmd_filename:包含由行分隔的命令的文件的绝对文件路径。
      • 返回一个字符串,成功“SUCCESS”,失败描述异常。
    • sdk.setAppDesc('description string')
      • 设置一个简短的描述。显示在通过CLI上的问号访问的NX-OS上下文相关帮助菜单中。
        • N9K-C93180LC-EX# show Tra?
          track Tracking information
          Transceiver_DOM.py Returns all interfaces with DOM-capable transceivers inserted

    • cliP.addToParseTree()
      • 倒数第三步
      • 将NxCliParser对象添加到NX-OS CLI解析器树,以便用户可以看到自定义CLI命令。
    • sdk.getAppName()
      • 返回APP名称。

创建自定义CLI命令

  • 在使用NX-SDK的Python应用程序中,在sdkThread函数中创建和定义自定义CLI命令。有两种类型的命令:显示命令和配置命令。
    • show:命令显示有关设备,其配置或其环境的信息。
    • config:命令可更改设备的配置,从而修改设备对周围网络的反应。
	import nx_sdk_py
	sdk = nx_sdk_py.NxSdk.getSdkInst(len(sys.argv), sys.argv)
	
	# 该对象可用于执行已存在的CLI命令以及创建自定义CLI命令
    cliP = sdk.getCliParser() 
	
	# 创建show命令:
	nxcmd1 = cliP.newShowCmd("cmd_name","syntax")
	# 创建config命令:
	nxcmd2 = cliP.newConfigCmd("cmd_name","syntax")
  • nxcmd1 = cliP.newShowCmd("cmd_name","syntax")

    • syntax:描述了什么关键字和参数可以在命令中使用。
      • 例如:show ip route 192.168.1.0中的192.168.1.0。show mac address-table dynamic中的dynamic。
    • 返回NxCliCmd对象,函数cliP.newCliCmd(“cmd_type”,“cmd_name”,“syntax”)的子类。
  • nxcmd1.updateParam("<parameter>","help_str",type)

    • <parameter> :命令参数的名称。
    • help_str:设置自定义命令的帮助字符串,并显示在通过CLI上的问号访问的NX-OS上下文相关帮助菜单中
    • type参数中指定的参数的有效类型:
      • P_INTEGER - 指定任何整数
      • P_STRING - 指定任何字符串
      • P_INTERFACE - 指定任何网络接口
      • P_IP_ADDR - 指定任何IP地址
      • P_MAC_ADDR - 指定任何MAC地址
      • P_VRF - 指定任何虚拟路由和转发(VRF)实例
      • nx_sdk_py.P_IP_ADDR)
        -nxcmd1.updateKeyword("keyword","help_str",is_key)
    • keyword 要修改的命令关键字的名称
    • is_key是一个可选的布尔值,默认为False。如果is_key为True,则使用此关键字的命令创建的唯一配置不会覆盖该命令创建的其他唯一配置。
  • 船舰自定义CLI命令后,需要创建pyCmdHandler类的对象,并将其设为NxCliParser对象的CLI回调处理程序对象。具体如下:

cmd_handler = pyCmdHandler()
cliP.setCmdHandler(cmd_handler)

pyCmdHandler类

  • class pyCmdHandler(nx_sdk_py.NxCmdHandler):
  • def postCliCb(self,clicmd)::定义了在sdkThread函数中定义的定义CLI命令在设备上的行为。
    • 返回一个布尔值。True,指该命令已成功执行。
    • clicmd:使用在sdkThread函数中创建命令时为该命令定义的惟一名称。例如在sdkThread中创建了一个命令show_xcvr_dom,则clicmd.getCmdName()是这个名字。根据名成定义行为。
    def postCliCb(self,clicmd):
    	if "show_port_bw_util_cmd" in clicmd.getCmdName():
    		port = nx_sdk_py.void_to_string(clicmd.getParamValue("<port>"))
               if port:
                  clicmd.printConsole("Executed show_port_bw_util_cmd for port: %s" % port)
    	elif "port_bw_threshold_cmd" in clicmd.getCmdName():
    
  • nx_sdk_py.void_to_int 将值转换为整数类型。
  • nx_sdk_py.void_to_string 将值转换为字符串类型。

pyCmdHandler类举例

  • ip_move:跟踪Cisco Nexus上各接口之间用户指定的IP地址的移动

自定义CLI命令语法示例

关键字

此show命令接受单个关键字mac并添加一个帮助字符串。

 nx_cmd = cliP.newShowCmd("show_misprogrammed", "mac") 
 nx_cmd.updateKeyword("mac", "Shows all misprogrammed MAC addresses on this device") 

单参数

此命令使用单个参数< mac >,(<>表示这是一个参数)。参数中添加了一个用于检查错误编程的MAC地址辅助字符串。
nx_sdk_py.P_MAC_ADDR参数用于将参数的类型定义为MAC地址,从而防止最终用户输入其他类型,例如字符串,整数或IP地址。

nx_cmd = cliP.newShowCmd("show_misprogrammed_mac", "<mac>") 
 nx_cmd.updateParam("<mac>", "MAC address to check for misprogramming", nx_sdk_py.P_MAC_ADDR) 

可选关键字或参数

  • 可选加外面加[]。

nx_cmd = cliP.newShowCmd( "show_misprogrammed_mac" , "[mac]" )
nx_cmd = cliP.newShowCmd("show_misprogrammed_mac", "[<mac>]")

单关键字和参数

nx_cmd = cliP.newShowCmd("show_misprogrammed", "mac <mac-address>") 
 nx_cmd.updateKeyword("mac", "Check MAC address for misprogramming") 
 nx_cmd.updateParam("<mac-address>", "MAC address to check for misprogramming", nx_sdk_py.P_MAC_ADDR) 

多个关键字和参数

nx_cmd = cliP.newShowCmd("show_misprogrammed", "(mac <mac-address> | ip <ip-address>)") 
 nx_cmd.updateKeyword("mac", "Check MAC address for misprogramming") 
 nx_cmd.updateParam("<mac-address>", "MAC address to check for misprogramming", nx_sdk_py.P_MAC_ADDR) 
 nx_cmd.updateKeyword("ip", "Check IP address for misprogramming") 
 nx_cmd.updateParam("<ip-address>", "IP address to check for misprogramming", nx_sdk_py.P_IP_ADDR) 

具有可选关键字的多个关键字和参数

nx_cmd = cliP.newShowCmd("show_misprogrammed", "(mac <mac-address> | ip <ip-address>) [clear]") 
 nx_cmd.updateKeyword("mac", "Check MAC address for misprogramming") 
 nx_cmd.updateParam("<mac-address>", "MAC address to check for misprogramming", nx_sdk_py.P_MAC_ADDR) 
 nx_cmd.updateKeyword("ip", "Check IP address for misprogramming") 
 nx_cmd.updateParam("<ip-address>", "IP address to check for misprogramming", nx_sdk_py.P_IP_ADDR) 
 nx_cmd.updateKeyword("clear", "Clears addresses detected to be misprogrammed") 

具有可选参数的多个关键字和参数

nx_cmd = cliP.newShowCmd("show_misprogrammed", "(mac <mac-address> | ip <ip-address>) [<module>]") 
 nx_cmd.updateKeyword("mac", "Check MAC address for misprogramming") 
 nx_cmd.updateParam("<mac-address>", "MAC address to check for misprogramming", nx_sdk_py.P_MAC_ADDR) 
 nx_cmd.updateKeyword("ip", "Check IP address for misprogramming") 
 nx_cmd.updateParam("<ip-address>", "IP address to check for misprogramming", nx_sdk_py.P_IP_ADDR) 
 nx_cmd.updateParam("<module>", "Clears addresses detected to be misprogrammed", nx_sdk_py.P_INTEGER) 

使用NX-SDK调试Python应用程序

使用NX-SDK部署Python应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值