zoukankan      html  css  js  c++  java
  • Upgrade NE script with GUI but cannot support multithread, need to add soon

    #-*- coding:utf-8 -*-

    __authour__='CC'

    from Tkinter import *
    import os
    import telnetlib
    import time
    import shutil
    import socket
    import paramiko
    import glob
    import re
    import threading

    def thread_it(func, *args):
    '''将函数打包进线程'''
    # 创建
    t = threading.Thread(target=func, args=args)
    # 守护 !!!
    t.setDaemon(True)
    # 启动
    t.start()

    def get_version_path(n1,n2,n3,versionNUM):
    if(int(n2)==0 and int(n1)==5):
    n11=n1
    print('Upgrade version is v5.0 version')
    if(int(n2)==1):
    n11=n1 + '.' + n2
    print('Upgrade version is v5.1 version')
    if(int(n2)==5):
    n11=n1 + '.' + n2
    print('Upgrade version is v5.5 version')
    if(int(n1)==6 and int(n2)==0):
    n11=n1 + '.' + n2
    print('Upgrade version is v6.0 version')
    #判断是Temp version or official version
    if int(n3)>500:
    server_path_tp1 ='\\172.18.104.44\R&D TN China\R&D_Server\Version Management\Dev_Version\TempVersion\NPTI\' + 'V' + n11 + '\' + versionNUM
    print 'version is a temp version'
    else:
    server_path_tp1 ='\\172.18.104.44\R&D TN China\R&D_Server\Version Management\Dev_Version\Version to V&V\NPTI\' + 'V' + n11 + '\' +'V' + versionNUM
    print 'version is official vesion'
    #print server_path_tp1
    server_path_tp2=server_path_tp1+'*'

    #通过通配符函数,通配名字"NPT/NPT-1800/V5.1/versionNUM*的路径。
    #print server_path_tp2
    server_path_tp3=glob.glob(server_path_tp2)
    server_path_tp4=server_path_tp3[0]
    server_path=str(server_path_tp4)

    #print server_path

    print ('Version path in server:%s' %server_path)
    #print os.listdir(server_path)
    #print os.getcwd()
    #判断’D:\version\NPT\1800‘是否存在
    path='D:\version\NPT\1800'
    isExists=os.path.exists(path)
    if not isExists:
    os.makedirs(r'D:\version\NPT\1800')
    return server_path



    def sftp_get_version(version_type,server_path,hostname,n1,n2,n3,sha):
    os.chdir('D:\version\NPT\1800')
    s=n1+n2+n3
    #print ('version_type is %d' %version_type)
    if version_type==1 or 3:
    source_file=server_path + '\' +'NPT1800_Emb_'+ s +'.bin'
    dest_file='NPT1800_Emb_'+ s +'.bin'
    shafile= open(server_path + '\' +'NPT1800_Emb_1p1_sha256')
    sha.append(shafile.read( ))
    print ('Hash of version is '+sha[0])
    shafile.close( )
    print ('source_file is %s' %source_file)
    if version_type==2:
    source_file=server_path + '\' +'NPT1800_Emb_2p0_'+ s +'.bin'
    dest_file='NPT1800_Emb_2p0_'+ s +'.bin'
    shafile= open(server_path + '\' +'NPT1800_Emb_2p0_sha256')
    sha.append(shafile.read( ))
    print ('Hash of version is '+sha[0])
    shafile.close( )
    print ('source_file is %s' %source_file)
    #dest_file='NPT1800_Emb.bin'

    FileExists=os.path.isfile(dest_file)
    if not FileExists:
    print 'Start get version ........... '
    shutil.copyfile(source_file,dest_file)
    print 'Get version successfully '
    else:
    print 'File exists'


    try:
    sftp_port = 22
    username='root'
    password='root'
    t=paramiko.Transport(hostname,sftp_port)
    t.connect(username=username,password=password)
    sftp=paramiko.SFTPClient.from_transport(t)
    local_dir = 'D:\version\NPT\1800\'
    remote_dir='/sdboot/up/'
    dest_file1='NPT1800_Emb.bin'
    print 'Start upload new version ......'
    sftp.put(os.path.join(local_dir,dest_file),os.path.join(remote_dir,dest_file1))
    t.close()
    print 'upload new version successful'

    except:
    print "upload new version fail"
    t.close()


    def main(ip,version,mode):
    sha=[]
    hostname =ip
    versionNUM = version
    version_type = int(mode)
    '''
    reset_flag=int(raw_input('Do you want to reset NE automatically or not? yes:1'))
    if reset_flag=1:
    clear_flag=(int(raw_input('Do you want clear NE DB? yes:1')))
    '''
    listNum=versionNUM.split('.',)
    n1=listNum[0]
    n2=listNum[1]
    n3=listNum[2]
    server_path=get_version_path(n1,n2,n3,versionNUM)

    sftp_get_version(version_type,server_path,hostname,n1,n2,n3,sha)


    #记录ssh 登录日志
    paramiko.util.log_to_file("log.log")
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #ssh.connect("某IP地址",22,"用户名", "口令")
    ssh.connect(hostname,22,"root", "root")
    #sh 登录到NE,设置FTP连接权限:
    '''
    stdin, stdout, stderr = ssh.exec_command("/etc/init.d/xinetd stop")
    stdin, stdout, stderr = ssh.exec_command("tcpsvd 0 21 ftpd -w /ftppub &")
    stdin, stdout, stderr = ssh.exec_command("/etc/init.d/xinetd start")
    '''
    #修改startup文件
    stdin, stdout, stderr = ssh.exec_command("sed -i 's/down/up/g' /sdboot/startup")
    ssh1=ssh.invoke_shell()
    ssh1.send('cd /sdboot/up/ ')
    time.sleep(1)
    ssh1.send('sha256sum NPT1800_Emb.bin ')
    time.sleep(7)
    sha1 = ssh1.recv(10000)
    print sha1
    pattern1=re.compile(sha[0])
    hash_match=re.findall(pattern1,sha1)
    if hash_match:
    print "Main MCP hash is OK"
    if version_type ==3:
    dest_file='NPT1800_Emb.bin'
    stdin, stdout, stderr = ssh.exec_command('arp ')
    a=''
    for std in stdout.readlines():
    a+=std
    print a
    pattern2=re.compile('(169.254.1.2|169.254.1.3)')
    backup_ip=re.findall(pattern2,a)
    print('Standby MCP IP is '+backup_ip[0])

    str='ftpput -u root '+backup_ip[0]+' /sdboot/up/'+dest_file+' /sdboot/up/'+dest_file+' '
    print str
    stdin, stdout, stderr = ssh.exec_command(str)
    print stdout.readline()
    b=''
    for std in stdout.readlines():
    b+=std
    print b
    ssh1.send('telnet '+backup_ip[0]+' ')
    time.sleep(1)
    ssh1.send('root ')
    ssh1.send('cd /sdboot/up/ ')
    time.sleep(1)
    ssh1.send('sha256sum NPT1800_Emb.bin ')
    time.sleep(7)
    sha2 = ssh1.recv(10000)
    print sha2
    pattern1=re.compile(sha[0])
    hash_match1=re.findall(pattern1,sha2)
    if hash_match1:
    print "Standby MCP hash is OK"
    #print "Start sync version.........."
    ssh1.send("sed -i 's/down/up/g' /sdboot/startup ")
    time.sleep(1)
    edit_up= ssh1.recv(10000)
    print edit_up
    print "Start to sync standby MCP version of "+hostname
    ssh1.send('sync ')
    else:
    print "Standby MCP shasum error"


    if (hash_match!=[])and(hash_match1!=[]):
    print "Start to sync main MCP version of "+hostname
    stdin, stdout, stderr = ssh.exec_command("sync")
    print stdout.readline()
    print "Finish main MCP sync version"
    time.sleep(100)
    sync_result=ssh1.recv(10000)
    print sync_result
    pattern_sync=re.compile('#')
    sync_complete=re.findall(pattern_sync,sync_result)
    if sync_complete:
    print sync_complete[0]
    print 'Finish Standby MCP sync version'+hostname
    else:
    print 'Standby MCP sync error!'
    else:
    print "shasum error"
    '''
    #+++++++++++++++++Reset++++++++++++++
    if reset_flag=1:
    reset_str='request reset ne'+' '
    clear_str='request reset no-recovery-sdh'+' '
    ssh2=ssh.invoke_shell()
    ssh2.send('lsh ')
    time.sleep(1)
    if clear flag=1:
    ssh2.send(clear_str)
    time.sleep(1)
    ssh2.send('yes ')
    else:
    ssh2.send(reset_str)
    time.sleep(1)
    ssh2.send('yes ')

    '''

    ssh.close()
    raw_input('press any key to exit ')

    root=Tk()
    root.title('NE Upgrage for 1800')
    root.geometry('600x600')
    root.resizable(width=True, height=True)

    #+++++++++Label+++++++++++++++++
    l=Label(root,text='This a simple script to Upgrade NE.Provided by CC',bg='green', font=('Arial',10),width=100, height=5)
    l.pack()
    #+++++++++frame&Label+++++++++++
    frm=Frame(root)
    frm_L=Frame(root)
    Label(frm_L, text='Input NPT1800 IP like a.b.c.d',font=('Arial,10')).pack(side=TOP)
    frm_L.pack(side=TOP)
    #+++++++++IP ENTRY++++++++++++++++
    var_ip=StringVar(root)
    e_ip=Entry(root,textvariable = var_ip)
    var_ip.set('200.200.180.24')
    e_ip.pack(side=TOP)

    frm_R=Frame(root)
    Label(frm_R, text='Input the full name of versionNUM like 5.0.018 please input 5.0.018',font=('Arial,10')).pack(side=TOP)
    frm_R.pack(side=TOP)
    #++++++++VERSION ENTRY+++++++++++++
    var_version=StringVar(root)
    e_version=Entry(root,textvariable = var_version)
    var_version.set('6.0.005')
    e_version.pack(side=TOP)

    #+++++++++++Mode LABEL+++++++++++++
    frm_M=Frame(root)
    Label(frm_M, text='Select the Upgrade mode',font=('Arial,10')).pack(side=TOP)
    frm_M.pack(side=TOP)
    #+++++++++++Mode Selector+++++++++++++
    mode= StringVar()
    mode.set("1")

    radioframe = Frame()
    radioframe.pack()

    # 'text' is the label
    # 'variable' is the name of the variable that all these radio buttons share
    # 'value' is the value this variable takes on when the radio button is selected
    # 'anchor' makes the text appear left justified (default is centered. ick)
    radioframe.choc = Radiobutton(
    radioframe, text="1+0 mode",
    variable=mode, value="1",
    anchor=W)
    radioframe.choc.pack(fill=X)

    radioframe.straw = Radiobutton(
    radioframe, text="2p0 mode",
    variable=mode, value="2",
    anchor=W)
    radioframe.straw.pack(fill=X)

    radioframe.lemon = Radiobutton(
    radioframe, text="1+1 mode",
    variable=mode, value="3",
    anchor=W)
    radioframe.lemon.pack(fill=X)

    # this is a text entry that lets you type in the name of a flavor too.
    '''
    entry = Entry(textvariable=mode)
    entry.pack(fill=X)
    QUIT = Button(text='QUIT', foreground='red',command=quit)
    QUIT.pack(side=BOTTOM, fill=BOTH)
    '''
    frm.pack()
    #+++++++++++++++++++Text+++++++++++
    t=Text(root,width=40,height=20)
    t.insert(4.0,'This advertisement place is available. ')
    t.insert(END,'Just cantact me. ')
    t.insert(END,'This upgrade_script version will not reset NE automatically for you. ')
    t.insert(END,'If you want to add reset function, also cantact me! ')
    #t.insert(SEL_FIRST,'G')
    t.pack(side=BOTTOM)
    #+++++++++++++++++++Button+++++++++++
    def printtime():
    t.insert(END, time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+' ')
    def do_upgrade():
    ip=e_ip.get()
    version=e_version.get()
    version_mode=mode.get()
    main(ip,version,version_mode)
    Button(root,text='Upgrade',command = lambda:thread_it(do_upgrade)).pack()
    #+++++++++++++++++MENU++++++++++++++++++++
    menubar=Menu(root)
    #创建下拉菜单File,然后将其加入到顶级的菜单栏中
    filemenu = Menu(menubar,tearoff=0)
    filemenu.add_command(label="Open", command=printtime)
    filemenu.add_command(label="Save", command=printtime)
    filemenu.add_separator()
    filemenu.add_command(label="Exit", command=root.quit)
    menubar.add_cascade(label="File", menu=filemenu)

    #创建另一个下拉菜单Edit
    editmenu = Menu(menubar, tearoff=0)
    editmenu.add_command(label="Cut", command=printtime)
    editmenu.add_command(label="Copy", command=printtime)
    editmenu.add_command(label="Paste", command=printtime)
    menubar.add_cascade(label="Edit",menu=editmenu)
    #创建下拉菜单Help
    helpmenu = Menu(menubar, tearoff=0)
    helpmenu.add_command(label="About", command=printtime)
    menubar.add_cascade(label="Help", menu=helpmenu)

    #显示菜单
    root.config(menu=menubar)
    #++++++++++++++++++++++++++++++++++++++++++++++++++


    if __name__=='__main__':

    root.mainloop()

  • 相关阅读:
    NOIP 2011 提高组 计算系数(vijos 1739)(方法:二项式定理)
    NOIP 2012 提高组 借教室(vijos 1782) 总览
    NOIP 2012 提高组 借教室(vijos 1782) 线段树85分打法
    NOIP 2011 提高组 铺地毯(vijos 1736)(方法:纯枚举)
    获取指定时间的前一天、后一天及当前时间的前一周、前一个月
    input file禁用手机本地文件选择,只允许拍照上传图片
    给定一个时间,获取该时间所在周的周一及周日
    Fiddler手机抓包软件简单使用将h5效果显示在手机
    解决Linux服务器更换IP后,ssh连接被拒绝问题
    解决Hadoop启动报错:File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
  • 原文地址:https://www.cnblogs.com/AlwaysT-Mac/p/6042651.html
Copyright © 2011-2022 走看看