02-Tcl配置
本章节下载: 02-Tcl配置 (193.85 KB)
目 录
设备系统软件内置了Tcl(Tool Command Language)解析器,支持直接运行Tcl脚本命令,以实现通过脚本自动化配置设备。
设备系统软件自带的原生命令行(以下简称Platform命令)也可在Tcl环境中执行。用户只需在用户视图下输入tclsh命令,即可进入Tcl配置视图。在此视图下:
· 可直接输入并执行Tcl脚本命令(支持Tcl 8.5全部语法)。
· 也可直接输入Platform命令,Tcl配置视图的执行权限与配置方式等同于用户视图。
两种命令输入后直接按回车即可执行。
通过Tcl脚本配置设备或在Tcl配置视图下执行Platform命令的过程中,如需退回上一级视图,只能使用quit命令。如需退回Tcl配置视图,不能使用return命令,可以使用组合键<Ctrl+Z>。
在Tcl配置视图下编辑命令时,遵循以下约定:
· 用户需保证输入的Tcl脚本命令可以正确执行。
· 由于执行Tcl脚本命令过程无法使用快捷键或命令行方式中断,如果用户通过Telnet/SSH方式登录设备并执行脚本命令时出现问题,需要关闭当前连接来终止执行过程;如果用户通过Console口方式登录设备并执行脚本命令时出现问题,则可以通过重启设备或者通过其他方式登录设备执行free line命令断开该Console用户线的连接。有关free line命令的详细介绍,请参见“基础配置命令”中的“登录设备”。
建议用户通过Telnet/SSH方式登录设备并进入Tcl视图执行脚本命令。
· 在Tcl中定义的环境变量可以应用到Platform命令。
· Tcl脚本命令不支持输入“?”键获得在线帮助和Tab键补全功能。
· 已经成功执行的Tcl脚本命令不会记录在历史命令缓冲区中。
· 通过Tcl脚本命令read stdin进行读取操作时,可以通过<Ctrl+D>结束读取。
(1) 从用户视图进入Tcl配置视图。
tclsh
(2) 根据需求执行Tcl脚本。
Tcl command
(3) 从Tcl配置视图退回到用户视图。
¡ tclquit
¡ quit
在Tcl配置视图下,可通过以下两种方式执行Platform命令:
· 直接输入命令:直接输入Platform命令即可执行。若该命令字与Tcl命令冲突,则优先执行Tcl命令。
· 使用cli关键字:在Platform命令前添加cli关键字(例如:cli display device)。此方式可确保在命令冲突时,优先执行Platform命令。
在Tcl配置视图下执行Platform命令时,遵循以下约定:
· 当Platform命令配置的字符串被特殊字符""或{}包围时,只有在特殊字符前加上\,该特殊字符才有效。例如,在接口视图下设置描述信息为"a"时,需要执行description \"a\";如果执行description "a",配置结果为description a。
· Platform命令支持输入“?”键获得在线帮助和Tab键补全功能。关于输入“?”键获得在线帮助和Tab键补全功能的详细描述,请参见“基础配置指导”中的“CLI”。
· cli命令是Tcl脚本命令,不支持输入“?”键获得在线帮助和Tab键补全功能。
· 已经成功执行的Platform命令会记录在历史命令缓冲区中,使用上下光标键可以调用执行过的命令。
· 通过以下三种方式,可以一次执行多条Platform命令:
¡ 在同一行连续键入多条Platform命令,命令间用分号隔开。多条命令会按顺序下发并执行。例如vlan 2;description Tech。
¡ 在cli命令后连续键入需要执行的多条Platform命令,每条Platform命令之间使用空格加分号进行分隔,在第一条Platform命令的前方和最后一条Platform命令的后方添加英文格式的双引号。例如cli "vlan 2 ;description Tech"。
¡ 多次输入cli命令和Platform命令的组合,每组之间使用空格加分号分隔。例如cli vlan 2 ;cli description Tech。
(1) 从用户视图进入Tcl配置视图。
tclsh
(2) 执行Platform命令。
¡ 直接执行Platform命令。
Command
¡ 通过增加cli命令关键字执行Platform命令。
cli command
(3) 从Tcl配置视图退回到用户视图。
¡ tclquit
¡ quit
用来创建CLI通道。
【命令】
::platformtools::create-cli
【使用指导】
CLI通道用于下发命令行配置(相关API为write-cli)。
多次执行本命令可以创建多个CLI通道。创建的CLI通道名称依次为cli0、cli1、……,以此类推。
不同的CLI通道之间互相独立,可看作不同的命令行终端。
【举例】
# 创建一个CLI通道。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::create-cli
【结果】
cli0
用来删除CLI通道。
【命令】
::platformtools::destroy-cli cli-channel-name
【参数】
cli-channel-name:已创建的CLI通道名称。
【举例】
# 删除已创建的CLI通道cli0。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::destroy-cli cli0
用来在CLI通道中执行Platform命令。
【命令】
::platformtools::write-cli cli-channel-name command
【参数】
cli-channel-name:已创建的CLI通道名称。
command:表示要下发的Platform命令。命令前后需要添加英文格式的双引号。仅支持下发一条命令。
【使用指导】
CLI通道在后台下发命令,不显示任何输出信息,不支持下发需要和用户交互确认的命令。
CLI通道缺省从用户视图开始下发命令;当需要下发其他视图的命令时,需要先下发进入视图的命令,再下发具体的配置命令。
【举例】
# 在已创建的CLI通道cli0中下发命令进入系统视图,并修改设备名称为abc。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::write-cli cli0 "system-view"
<Sysname-tcl> ::platformtools::write-cli cli0 "sysname abc"
<Sysname-tcl>
【结果】
<abc-tcl>
用来执行Platform命令。
【命令】
::platformtools::execute-shell-cmd command
【参数】
command:表示要下发的Platform命令。命令前后需要添加英文格式的双引号。多条命令之间以空格加分号分隔,例如"system-view ;sysname test"。
【使用指导】
下发命令从用户视图开始,如果command中不指定视图,直接输入命令,表示该命令在用户视图下执行;当需要执行其他视图的命令时,需要先输入进视图的命令,再输入具体的配置命令。
【举例】
# 使用Tcl API进入系统视图,修改设备名称为test,并执行ping命令。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::execute-shell-cmd "system-view ;sysname test ;ping 192.168.56.1"
【结果】
<Sysname> system-view
System View: return to User View with Ctrl+Z.
[Sysname] sysname test
[test] ping 192.168.56.1
Ping 192.168.56.1 (192.168.56.1): 56 data bytes, press the char(ASCII 0) to break
56 bytes from 192.168.56.1: icmp_seq=0 ttl=128 time=1.000 ms
...
用来获取当前系统支持的最大slot编号。
【命令】
::platformtools::getmaxslotnumber
【使用指导】
该命令获取的是全局slot编号。
【举例】
# 使用Tcl API获取系统支持的最大slot编号。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::getmaxslotnumber
【结果】
839
用来获取当前系统支持的最小slot编号。
【命令】
::platformtools::getminslotnumber
【举例】
# 使用Tcl API获取系统支持的最小slot编号。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::getminslotnumber
【结果】
0
用来获取主用主控板所在的槽位号。
【命令】
::platformtools::get_self_slot
【返回值】
返回一个列表对象,格式为:(-1,slot-number),其中slot-number表示主用主控板所在的槽位号。
【举例】
# 使用Tcl API获取主用主控板所在的槽位号。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::get_self_slot
【结果】
(-1,0)
用来获取slot信息。
【命令】
::platformtools::get_slot_info global-slot-number
【参数】
global-slot-number:全局slot编号。
【返回值】
返回一个字典对象,返回值始终为Chassis chassis-number Slot slot-number Cpu CPU-number Role role Status status。chassis-number表示设备的成员编号,slot-number表示单板所在的槽位号,CPU-number表示单板上主CPU的编号,role表示单板的角色,status表示单板的状态。
【举例】
# 使用Tcl API获取指定slot的信息。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::get_slot_info 1
【结果】
Chassis Slot 1 Cpu 0 Role Master Status Normal
用来获取所有备用主控板所在的槽位号。
【命令】
::platformtools::get_standby_slot
【返回值】
返回一个列表对象,格式为:(-1,slot-number),其中slot-number表示备用主控板所在的槽位号。如果设备上没有备用主控板,则返回空值。
【举例】
# 使用Tcl API获取备用主控板所在的槽位号。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::get_standby_slot
【结果】
(-1,1),(-1,2)
用来将指定文件通过指定协议下载到本地。
【命令】
::platformtools::transfer protocol server-ip source-file dest-file vpn-instance-name session-timeout user-name password
【参数】
protocol:表示下载文件时使用的协议。取值为:
· ftp:表示使用FTP协议传输文件。
· tftp:表示使用TFTP协议传输文件。
· http:表示使用HTTP协议传输文件。
server-ip:表示远程服务器的IP地址。
source-file:表示服务器上源文件的名称。
dest-file:表示保存到本地的目的文件的名称。
vpn-instance-name:指定目的端所属的MPLS L3VPN的VPN实例名称,为1~31个字符的字符串,区分大小写。
session-timeout:表示下载文件时连接超时时间,单位为秒,取值必须大于等于0。取值为0时,将使用超时时间300秒。
user-name:表示登录时使用的用户名称。
password:表示登录时使用的用户密码。
【举例】
# 使用Tcl API将FTP服务器上的文件“testfile”下载到设备上,目的文件名为“flash:/localfile.cfg”。
<Sysname> tclsh
<Sysname-tcl> ::platformtools::transfer ftp 192.168.3.76 testfile flash:/localfile.cfg vpn1 0 admin admin
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!
