예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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