一个小测试,实现HCL
模拟器下利用python
脚本根据交换机的背板MAC地址(真机环境可以换成序列号)自动加载配置。
环境介绍:
- HCL v5.7.1
- Python 3.10.10
- Tftpd64 version 4.60
步骤
编写python脚本
制作一个后缀名为.py
的脚本。主要作用是空配置交换机开机执行自动配置,下载到本地并执行文件
由于HCL模拟器里的交换机序列号都一样的,勉为其难改用背板MAC地址;如果是真机设备直接用序列号;脚本中预留了序列号的代码,简单修改一下便可
- 设备 H3C S6850_1: MAC_ADDRESS:68-bf-6d-ad-01-04
- 设备 H3C S6850_2: MAC_ADDRESS:68-45-dc-f1-02-04
#!/usr/bin/python
#-*-coding:utf-8-*-
import comware
import platformtools
def do_reboot():
# scheduler job reboot
platformtools.CLI('system-view ;scheduler job startup_reboot ;command 1 reboot force ;quit')
# exec-delay
platformtools.CLI('system-view ;scheduler schedule do_reboot ;job startup_reboot ;time once delay 1')
def apply_sw1_config():
# Specify system startup
platformtools.CLI('restore startup-configuration from 172.31.100.2 sw1_config.cfg')
do_reboot()
def apply_sw2_config():
# Specify system startup
platformtools.CLI('restore startup-configuration from 172.31.100.2 sw2_config.cfg')
do_reboot()
# more device ...
# def apply_sw3_config():
# # Specify system startup
# platformtools.CLI('restore startup-configuration from 172.31.100.2 sw3_config.cfg')
# do_reboot()
# find DEVICE_SERIAL_NUMBER
res = platformtools.CLI('dis dev man', False)
for i in res.get_output():
# if 'DEVICE_SERIAL_NUMBER' in i:
if '68-bf-6d-ad-01-04' in i:
apply_sw1_config()
break
if '68-45-dc-f1-02-04' in i:
apply_sw2_config()
break
# more device ...
# if 'DEVICE_SERIAL_NUMBER' in i:
# apply_sw2_config()
# break
准备设备配置文件
sw1_config.cfg
sw2_config.cfg
#
sysname sw1_s6850
#
telnet server enable
ssh server enable
#
vlan 10 to 20
#
int vlan 1
ip add 172.31.100.10 24
#
int vlan 10
ip add 192.168.10.254 24
#
interface GigabitEthernet 1/0/23
port link-type trunk
port trunk permit vlan all
undo shutdown
#
interface GigabitEthernet 1/0/24
port link-type trunk
port trunk permit vlan all
undo shutdown
#
local-user admin
password simple Cisco123!@#
authorization-attribute user-role network-admin
authorization-attribute user-role network-operator
service-type ssh telnet
quit
#
line vty 0 63
authentication-mode scheme
user-role network-operator
#
return
启动HTTP服务端
搭建一个简单的http服务端(可以使用网上的各种小工具,安全性自己判断),如果有python
环境可以直接启动一个简易的http服务端,搭建完成后使用浏览器打开链接,确保url
能正确指向第一步中的python脚本文件。
PS D:\TEMP\tftpd64.460> python -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
浏览器URL测试
配置TFTP服务端和DHCP服务端参数
- TFTP目录选择设备配置文件的目录
- 如果电脑有多块网卡,选择绑定需要用到的网卡IP地址
- DHCP填写的Boot File 是python脚本文件的URL
Tips:为了方便使用建议把device.py
和设备.cfg
配置文件统一放到TFTP的目录下,http服务端的启动命令也在TFTP目录下启动。
启动测试
- 临时关闭本机环境中的其他DHCP服务端
- HCL模拟器里的交换机桥接到本地
- 模拟器设备开机
TFTP软件观察发现已经分配两个地址
第一台S6850 启动,观察发现下载了device.py
文件,并按照py脚本
命令执行了一些配置
第二台S6850 启动,观察发现下载了device.py
文件,并按照py脚本
命令执行了一些配置
按照设定的1分钟后重启设备,观察到出现两次Press ENTER to get started.
表示已经重启了;设备名称也按照配置文件里的更改了
使用SSH登陆设备,能通过配置文件里配置的IP地址登陆设备
查看sw1的一些配置
结束
- HCL模拟器的序列号一致不能通过序列号操作,实为憾事
- 这个方法可应用在一定规模的组网,前提条件是安装前要记录安装位置与设备序列号的对应关系
- 这个方法只能应用在完全空配置的设备,保存过配置的交换机就不能操作了
- 如果是真实设备使用,注意本机电脑的防火墙设置
- 前线安装人员要确定设备已加电和设备端口的指示灯状态
- 方法操作没有问题,但是有时候去实施,甲方看到你老是在电脑面前操作,这个体现不出工作量,需要注意,两天的活你半小时不到干完了
- 修改一下脚本,还能用在没有console线的环境下应急,同样确保设备是空配置启动
device.py
文件里的代码有一个重启设备的定时任务,由于是做实验我设置了1分钟后重启,如果是真实环境这个延时重启建议配置时间大一点