美文网首页
交换机ZTP启动

交换机ZTP启动

作者: Bless_H | 来源:发表于2021-09-26 15:23 被阅读0次

    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

相关文章

  • 交换机ZTP启动

        ZTP配置(Zero Touch Provisioning),为适应批量设备上线而产生的一种自动配置的技术...

  • junos 交换机ztp 安装

    基于centos7 首先安装依赖包依赖两个服务,dhcp ftp安装dhcp ftp dhcpd.conf 这里有...

  • 交换机启动常见问题定位

    今天给大家带来的是交换机启动常见问题定位,下面是本此要涉及到的内容: 启动信息说明盒式交换机启动信息说明框式交换机...

  • 锐捷实战系列(六) 交换机的基本配置

    实训目的 熟悉交换机的基本配置。 能配置交换机的主机名、时间。 保存配置。 查看文本文件 热启动交换机 实训拓扑 ...

  • 交换机密码破解

    原理 交换机启动过程 1、加电自检,检查设备硬件是否完好; 2、启动BootStrap引导程序,搜寻IOS; 3、...

  • RabbitMQ使用总结

    生产者消费者约定:交换机和路由键的名称,先启动消费者,注解会把通道,交换机和通过路由键自动绑定

  • Runloop

    [转]Objective-C之run loop详解转自http://blog.csdn.net/ztp800201...

  • 记录ONOS(1.10.8)对Meter操作的问题

    启动编译好的ONOS并连接OpenFlow交换机 使用REST API添加一个meter POST添加meter的...

  • NSPredicate

    NSPredicate就是一种正则表达式 http://blog.csdn.net/ztp800201/artic...

  • 工业时代2+格雷科技5流体核电燃料棒摆法

    这几天一直在实验流体核电的摆法,我的外围设施是大型热交换机+大型涡轮机。由于大型热交换机每次启动都需要125s来进...

网友评论

      本文标题:交换机ZTP启动

      本文链接:https://www.haomeiwen.com/subject/awaxnltx.html