Пример #1
0
    def rsync_public_key(self):
        '''推送公钥到新加的主机里面'''
        id_list = self.check_server_state()
        if not id_list:
            ins_log.read_log('info', '[PASS]: No new server found, automatically skipping push public key')
          #  print('[PASS]: No new server found, automatically skipping push public key')

            return

        # 根据ID列表查询,获取管理权限推送PublicKey到主机
        new_server_list = []
        rsync_sucess_list = []
        rsync_error_list = []
        with DBContext('r') as session:
            for i in id_list:
                connect_info = session.query(Server.ip, Server.port, AdminUser.system_user,
                                             AdminUser.user_key).outerjoin(AdminUser,
                                                                           AdminUser.admin_user == Server.admin_user).filter(
                    Server.id == i).all()
                new_server_list.append(connect_info)
        # 检查密钥
        sync_key_obj = RsyncPublicKey()
        check = sync_key_obj.check_rsa()
        if check:
            # print('new_server_list-->', new_server_list)
            res_data = start_rsync(new_server_list)
            # print(res_data)
            for res in res_data:
                if not res.get('status'):
                    rsync_error_list.append(res)
                else:
                    # 只返回密钥推送成功的进行更新资产
                    rsync_sucess_list.append(res)

        if rsync_error_list:
            with DBContext('w') as session:
                for i in rsync_error_list:
                    ip = i.get('ip')
                    msg = i.get('msg')
                    error_log = '推送公钥失败, 错误信息:{}'.format(msg)
                    ins_log.read_log('error', error_log)
                    session.query(Server).filter(Server.ip == ip).update({Server.state: 'false'})
                    exist_ip = session.query(AssetErrorLog).filter(AssetErrorLog.ip == ip).first()
                    if exist_ip:
                        session.query(AssetErrorLog).filter(AssetErrorLog.ip == ip).update(
                            {AssetErrorLog.error_log: error_log})
                    else:
                        new_error_log = AssetErrorLog(ip=ip, error_log=error_log)
                        session.add(new_error_log)
                session.commit()

        return rsync_sucess_list
Пример #2
0
def rsync_public_key(server_list):
    """
    推送PublicKey
    :return: 只返回推送成功的,失败的直接写错误日志
    """
    # server_list = [('47.100.231.147', 22, 'root', '-----BEGIN RSA PRIVATE KEYxxxxxEND RSA PRIVATE KEY-----', 'false')]
    ins_log.read_log('info', 'rsync public key to server')
    rsync_error_list = []
    rsync_sucess_list = []
    sync_key_obj = RsyncPublicKey()
    check = sync_key_obj.check_rsa()
    if check:
        res_data = start_rsync(server_list)
        if not res_data.get('status'):
            rsync_error_list.append(res_data)
        else:
            rsync_sucess_list.append(res_data)

    if rsync_error_list:
        write_error_log(rsync_error_list)

    return rsync_sucess_list