文件读取方式升级项目

import os, sys, time, datetime, shutil
import paramiko,hashlib,threading


class Update(object):
    def __init__(self):
        self.Twip = []
        self.Twtp = []
        self.menu = {
            "project": {
                "SMS_PLAT": ["192.168.1.240:/usr/java/tomcat71/webapps/"],
                "AppletPay": ["192.168.1.240:/usr/java/tomcat79/webapps/"],
                "C1_FLEX": ["192.168.1.238:/usr/java/tomcat72/webapps/", "192.168.150.238:/usr/java/tomcat6/webapps/"],
                "P1_CENTER":["192.168.150.238:/usr/java/tomcat6/webapps/"],
                "A1_BILL":["192.168.1.234:/usr/java/tomcat72/webapps/","192.168.1.236:/usr/java/tomcat72/webapps/"],
                "L2_PLAT":["192.168.1.240:/usr/java/tomcat76/webapps/"]
            }
        }

    def Cmd(self, HS, file, path, hp):
        HOST, PORT = HS, 22
        spfile = '/home/bruce/tmp/' + file
        bpfile = '/home/bruce/back/' + file
        transport = paramiko.Transport((HOST, PORT))
        key = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
        transport.connect(username='root', pkey=key)
        sftp = paramiko.SFTPClient.from_transport(transport)
        try:
            sftp.get(hp + path + '/' +file, bpfile+'.bak')
            print("%s\n================备份成功==================" % (path + '/' + file))
        except FileNotFoundError as e:
            print('\n',e,'远程主机没有此文件\n')
        try:
            sftp.put(spfile, hp + path + '/' + file)
            print("%s\n================升级成功==================" % (path + '/' + file))
        except FileNotFoundError as e:
            print('\n',e,'远程路径不存在\n')
        transport.close()

    def Readfile(self, filename):
        m = Update()
        with open(filename, 'r') as f:
            for line in f:
                if len(line.strip()) != 0:
                    line = line.strip().split('\\')
                    src_path = '/'.join(line[0:-1])
                    loadfile = line.pop()
                    if line[0] in self.menu["project"]:
                        th = []
                        for i in self.menu["project"][line[0]]:
                            ip = i.split(':')[0]
                            self.Twip.append(i.split(':')[0])
                            sp = i.split(':')[1]

                            Tomcat = sp.split('/')[3]
                            self.Twtp.append(sp.split('/')[3])
                            print(i)
                            t1 = threading.Thread(target=m.Cmd,args=(ip,loadfile,src_path,sp,))
                            t1.start()
                            th.append(t1)
                        for h in th:
                            h.join()

                    elif not os.path.isfile('/home/bruce/tmp/' + loadfile):
                        print("%s 文件不存在" % loadfile)
                        exit()
            else:
                TH = []
                for t, p in zip(set(self.Twip), self.Twtp):
                    t2=threading.Thread(target=m.Retomcat,args=(t, p,))
                    t2.start()
                    TH.append(t2)
                for p in TH:
                    p.join()

    def Retomcat(self, HS, TM):
        ssh = paramiko.SSHClient()
        HOST, PORT = HS, 22
        msg = 'sh /etc/init.d/tomcatd ' + TM + ' restart'

        key = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        ssh.connect(hostname=HOST, port=22, username="root", pkey=key)

        stdin, stdout, stderr = ssh.exec_command(msg)

        res, err = stdout.read(), stderr.read()
        rest = res if res else err
        print(HOST)
        print(rest.decode())

        ssh.close()

if __name__ == '__main__':
    u = Update()
    u.Readfile('user_file')

 

posted @ 2017-10-27 14:51  bruce61  阅读(134)  评论(0)    收藏  举报