def run(host, option): # print(host) # print(cmd) try: cmd = option['command'] ssh = myParamiko.get_ssh(host) except KeyError as e: error_info = 'option error' print(error_info) msg = 'error|[%s] : is fail [%s]' % (host['hostname'], error_info) return msg except Exception as e: msg = 'error|[%s] : [%s] is fail [%s]' % (host['hostname'], cmd, e) return msg #print(ssh)# 获取ssh对象 stdin, stdout, stderr = ssh.exec_command(cmd) # 执行命令 # 获取标准输出或错误输出内容 stdout_msg = stdout.read().decode() stderr_msg = stderr.read().decode() print("[%s] : [%s]" % (host['hostname'], cmd)) if not stderr_msg: # 如果标准错误输出内容为空说明执行成功 print(stdout_msg) msg = 'info|[%s] : [%s] is successful' % (host['hostname'], cmd) return msg else: print(stderr_msg) msg = 'error|[%s] : [%s] is fail [%s]' % (host['hostname'], cmd, stderr_msg) return msg
def run(host, option): # print(host) # print(cmd) try: cmd = option['command'] ssh = myParamiko.get_ssh(host) except KeyError as e: error_info = 'option error' print(error_info) msg = 'error|[%s] : is fail [%s]' %(host['hostname'], error_info ) return msg except Exception as e: msg = 'error|[%s] : [%s] is fail [%s]' %(host['hostname'], cmd, e) return msg #print(ssh)# 获取ssh对象 stdin, stdout, stderr = ssh.exec_command(cmd) # 执行命令 # 获取标准输出或错误输出内容 stdout_msg = stdout.read().decode() stderr_msg = stderr.read().decode() print("[%s] : [%s]" %(host['hostname'], cmd)) if not stderr_msg: # 如果标准错误输出内容为空说明执行成功 print(stdout_msg) msg = 'info|[%s] : [%s] is successful' %(host['hostname'], cmd) return msg else: print(stderr_msg) msg = 'error|[%s] : [%s] is fail [%s]' %(host['hostname'], cmd, stderr_msg) return msg
def get(host, option): ''' 下载文件函数 :param host: 主机信息 :param option: 相关参数 :return: 日志消息 ''' #print(option) import os import time from conf import conf ssh = myParamiko.get_ssh(host) try: src_file = option['src'] # 获取源文件 dst_path = option['dst'] # 获取目标目录 if not os.path.isdir(dst_path): # 判断目标目录是否存在 raise myParamiko.dst_error(dst_path) # 抛出目标不存在异常 dst_path = os.path.join(dst_path, time.strftime("%Y%m%d%H%M%S", time.localtime())) # 生成带日期时间的目录,解决文件名重复问题 if not os.path.isdir(dst_path): # 判断是否存在,解决多个进程创建同一个目录是的报错 os.mkdir(dst_path) print("[%s] get file: [%s]" %(host['hostname'], src_file)) stdin, stdout, stderr = ssh.exec_command('ls -l %s' %src_file)# 通过执行远端ls -l来判断远端源文件是否存在 if stderr.read().decode() == '': # 如果没有报错信息则说明执行成功 dst_path = os.path.join(dst_path, host['hostname']) # 在目标目录后面加一以主机名命名的目录 os.mkdir(dst_path) # 创建新的目标目录 sftp, tran = myParamiko.get_sftp(host) # 创建和sftp对象和transport对象 dst_file = os.path.join(dst_path, os.path.split(src_file)[1]) # 组成完整的目标文件 sftp.get(src_file, dst_file) # 下载文件 tran.close() success_info = 'get file %s to %s is successful' %(src_file, dst_file, ) print(success_info) msg = 'info|[%s] : %s' %(host['hostname'], success_info) else: raise myParamiko.src_error(src_file) # 抛出源文件不存在异常 except KeyError as e: # options['src']的key错误,说明指令文件相关指令错误 error_info = 'option error' print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' %(host['hostname'], src_file, error_info ) except (myParamiko.src_error,myParamiko.dst_error) as e: # 这两是自定异常,用来捕获爆出的源文件或目录不存在的异常 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' %(host['hostname'], src_file, error_info ) except IOError as e: # 捕获文件操作异常,比如没有权限等 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' %(host['hostname'], src_file, error_info ) except Exception as e: # 捕获其他异常 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' %(host['hostname'], src_file, error_info ) return msg
def get(host, option): ''' 下载文件函数 :param host: 主机信息 :param option: 相关参数 :return: 日志消息 ''' #print(option) import os import time from conf import conf ssh = myParamiko.get_ssh(host) try: src_file = option['src'] # 获取源文件 dst_path = option['dst'] # 获取目标目录 if not os.path.isdir(dst_path): # 判断目标目录是否存在 raise myParamiko.dst_error(dst_path) # 抛出目标不存在异常 dst_path = os.path.join( dst_path, time.strftime("%Y%m%d%H%M%S", time.localtime())) # 生成带日期时间的目录,解决文件名重复问题 if not os.path.isdir(dst_path): # 判断是否存在,解决多个进程创建同一个目录是的报错 os.mkdir(dst_path) print("[%s] get file: [%s]" % (host['hostname'], src_file)) stdin, stdout, stderr = ssh.exec_command( 'ls -l %s' % src_file) # 通过执行远端ls -l来判断远端源文件是否存在 if stderr.read().decode() == '': # 如果没有报错信息则说明执行成功 dst_path = os.path.join(dst_path, host['hostname']) # 在目标目录后面加一以主机名命名的目录 os.mkdir(dst_path) # 创建新的目标目录 sftp, tran = myParamiko.get_sftp(host) # 创建和sftp对象和transport对象 dst_file = os.path.join(dst_path, os.path.split(src_file)[1]) # 组成完整的目标文件 sftp.get(src_file, dst_file) # 下载文件 tran.close() success_info = 'get file %s to %s is successful' % ( src_file, dst_file, ) print(success_info) msg = 'info|[%s] : %s' % (host['hostname'], success_info) else: raise myParamiko.src_error(src_file) # 抛出源文件不存在异常 except KeyError as e: # options['src']的key错误,说明指令文件相关指令错误 error_info = 'option error' print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' % (host['hostname'], src_file, error_info) except (myParamiko.src_error, myParamiko.dst_error) as e: # 这两是自定异常,用来捕获爆出的源文件或目录不存在的异常 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' % (host['hostname'], src_file, error_info) except IOError as e: # 捕获文件操作异常,比如没有权限等 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' % (host['hostname'], src_file, error_info) except Exception as e: # 捕获其他异常 error_info = e print(error_info) msg = 'error|[%s] : get file %s is fail [%s]' % (host['hostname'], src_file, error_info) return msg