交换机ZTP启动

2021-09-26  本文已影响0人  Bless_H

    ZTP配置(Zero Touch Provisioning),为适应批量设备上线而产生的一种自动配置的技术,这次研究ZTP的目标是实现上线自动升级设备版本,根据设备SN自动获取配置。

H3C交换机ZTP启动

版本和补丁管理

这一部分比较复杂后续再研究

配置获取

    第二部分比较简单先研究第二部分,根据设备SN获取对应的配置。下面是测试的环境:


测试环境.png

重要提示
1.首先是这个python的脚本是不能在本机运行的只能在H3C交换机上运行,并且在H3C交换机上不能编辑这个脚本,所以我们在开始调试时,要把H3C交换机的FTP打开,我们在写程序电脑上写完之后直接ftp推送到H3C交换机调试。
2.前期测试的时候直接运行脚本,我的思路是先把tftp获取这个脚本的过程跳过去,先调试脚本可以从文件服务器获取指定的文件,然后调试没有问题了,再调试tftp这块来自动获取python文件执行。

DHCP配置

DHCP配置.png

    除了普通的DHCP外加了两个配置一个是next-server,这个字段是标识tftpserver,一个是option 67,这个自动是标识要从tftp下载的文件。

TFTP配置

    是参照着这个链接里配置的,把对应的文件放在tftpboot文件夹里就可以了。


tftp配置.png

获取配置文件的代码

    大致思路就是获取设备sn,通过sn来下载指定的配置文件,然后设置启动配置文件,重启设备。排除掉设备版本管理,单纯获取配置文件加载配置文件还是比较容易的。

import re
import comware
import os
import time

username = 'test'
password = 'blessliu..'
hostname = '10.63.100.254'
protocol = 'ftp'
login_timeout = 10


vrf = ''
local_path = 'flash:/'
config_local_name = 'startup.cfg'
remote_config_name = ''
cfg_dir = ''


python_log_name = ""

def write2Log(info):
  global python_log_name, local_path
  if python_log_name == "":
    try:
      python_log_name = "%spython_%s" %(local_path, "ztp.log")
    except Exception as inst:
      print inst
  fd = open(python_log_name, "a")
  fd.write(info)
  fd.flush()
  fd.close()

#get device serial number and return the config
def getCfgFileName():

    write2Log("[*]getiting device serial number...")
    print "[*]getiting device serial number..."

    run_comd = comware.CLI('dis dev man', False)
    res = run_comd.get_output()
    dev_sn = res[3].split(':')[1].strip()
    remote_config_name = 'conf_' + dev_sn + '.cfg'
    
    write2Log("[*]Starting Copy of %s.\n" % remote_config_name)
    print "[*]remote config name: %s" % remote_config_name

    return remote_config_name

#clear local file
def removeFile(filename):
  try:
    os.remove(filename)
  except os.error:
    pass


#Copy the configure file from ftp server
def doCopyFile(src,des,login_timeou = 10):
  global username,password,hostname,protocol,vrf

  write2Log("[*]Starting Copy of %s.\n" % src)
  print "[*]Starting Copy of %s.\n" % src
  try:

    removeFile(des)
    obj = comware.Transfer(protocol, hostname, src, des, vrf, login_timeout, username, password)
    if obj.get_error() != None:
      write2Log("[-]copy %s failed: %s \n" % (src, obj.get_error()))
      print "[-]copy %s failed: %s \n" % (src, obj.get_error())
      return False
  except Exception as inst:
    write2Log("[-] copy %s exception: %s\n" % (src, inst))
    print "[-] copy %s exception: %s\n " % (src, inst)
    return False
  write2Log("[+]copy file %s to %s success\n" % (src, des))
  print "[+]INFO: Completed Copy of %s\n" % src
  return True
 

#set start up config
def startupCfg():
  global local_path, config_local_name
  result = None
  dest = "%s%s" %(local_path, config_local_name)
  write2Log("[*]startup saved-configuration %s begin\n" %dest)
  print "[*]startup saved-configuration %s begin\n" %dest

  comd = "startup saved-configuration %s main" % dest

  print "[-----]" + comd 

  try:
    result = comware.CLI(comd, False)
    if result == None:
      write2Log("[-]startupstartup saved-configuration %s failed.\n" % dest)
      print "[-]startup saved-configuration %s failed.\n" % dest
      return False
  except Exception as inst:
    write2Log("[-]startup %s exception: %s \n" % (dest, inst))
    print "[-]startup %s exception: %s \n " % (dest, inst)
    return False
  write2Log("[+]startup saved-configuration %s success" % dest)
  print "[+]: Completed Startup Saved-configuration.\n"
  return True

remote_config_name = getCfgFileName()
removeFile(config_local_name)
doCopyFile(src=remote_config_name,des='flash:/startup.cfg')
startupCfg()
result = comware.CLI('reboot force', False)
time.sleep(0.5)
result = comware.CLI('Y', False)

    这部分代码已经测试过了,目前没有什么问题,后面会增加堆叠以及版本控制的方面。

参考链接
1.H3C官方文档(太过简单了,离谱)
http://www.h3c.com/cn/d_201905/1182215_30005_0.htm
2.CSDN博客(完整的脚本,所有关于H3C_ZTP的都是这个版本)
https://blog.csdn.net/weixin_45537413/article/details/111350873
3.PXE环境搭建
https://docs.virtuozzo.com/virtuozzo_hybrid_server_7_installation_using_pxe_guide/preparing-for-pxe-installation/configuring-dhcp-server.html

上一篇 下一篇

猜你喜欢

热点阅读