Beispiel #1
0
def adv_task_del(request, res, *args, **kwargs):
    if request.method == 'POST':
        task_ids = request.POST.get('task_id')
        res['flag'] = True
        success = []
        fail = []
        # 循环删除
        for task_id in task_ids.split(','):
            task = Task.objects.get(id=task_id)
            try:
                # 调用proxy接口,
                api = APIRequest('{0}/v1.0/job/{1}'.format(task.task_proxy.url, task.task_uuid),
                                 task.task_proxy.username,
                                 CRYPTOR.decrypt(task.task_proxy.password))
                result, code = api.req_del(json.dumps({}))
                if code != 200:
                    raise ServerError(result['messege'])
                else:
                    task.task_statu = '02'
                    task.save()
            except ServerError, e:
                fail.append(task)
                error = e.message
                res['flag'] = False
                res['content'] = error
            except Exception, e:
                fail.append(task)
                res['flag'] = False
                res['content'] = e[1]
            else:
                success.append(task)
Beispiel #2
0
def role_proxy_operator(user_name, obj_name, data, proxy=None, obj_uuid='all', action='add'):
    """
    保存,更新, 删除数据,并把操作结果保存到Task表中
    obj_name: PermRole, PermSudo
    """
    result = res_info = msg_name = ''
    g_lock = threading.Lock()  # 线程锁
    if obj_name == 'PermRole':
        msg_name = u'系统用户'
    elif obj_name == 'PermSudo':
        msg_name = u'SUDO别名'
    g_url = '{0}/v1.0/permission/{1}/{2}'.format(proxy.url, obj_name, obj_uuid)
    try:
        g_lock.acquire()
        # 在每个proxy上(add/update/delete) role/sudo,并返回结果
        api = APIRequest(g_url, proxy.username, CRYPTOR.decrypt(proxy.password))
        if action == 'add':
            result, codes = api.req_post(data)
            pdata = json.loads(data)
            res_info = u'添加{0}{1} {2}'.format(msg_name, pdata['name'], result['messege'])
        elif action == 'update':
            result, codes = api.req_put(data)
            pdata = json.loads(data)
            res_info = u'编辑{0}{1} {2}'.format(msg_name, pdata['name'], result['messege'])
        elif action == 'delete':
            result, codes = api.req_del(data)
            pdata = json.loads(data)
            res_info = u'删除{0}{1} {2}'.format(msg_name, pdata['name'], result['messege'])
        logger.info('role_proxy_%s:%s'%(action, result['messege']))

        # 生成唯一的事件名称,用于从数据库中查询执行结果
        if 'name' not in json.dumps(data):
            raise ValueError('role_proxy_operator: data["name"]不存在')
        task_name = json.loads(data)['name'] + '_' + uuid.uuid4().hex
        # 将事件添加到消息队列中
        task_queue.put({'server': task_name, 'username': user_name})

        # 将执行结果保存到数据库中
        role_task = Task()
        role_task.task_name = task_name
        role_task.proxy_name = proxy.proxy_name
        role_task.role_name = json.loads(data)['name']
        role_task.username = user_name
        role_task.status = 'complete'
        role_task.content = res_info
        role_task.url = g_url
        role_task.start_time = datetime.datetime.now()
        role_task.action = action
        role_task.role_uuid = obj_uuid
        role_task.role_data = data
        role_task.result = result['messege']
        role_task.save()
    except Exception as e:
        logger.error("[role_proxy_operator] %s"%e)
    finally:
        g_lock.release()
    return result
Beispiel #3
0
def asset_del(request,res, *args):
    """
    del a asset
    删除主机
    """
    response = {'msg': u'删除成功'}
    res['operator'] = res['content'] = u'删除主机'
    asset_id = request.GET.get('id', '')
    if asset_id:
        asset = get_object(Asset, id=int(asset_id))
        if asset:
            proxy = asset.proxy
            param = {'names': [asset.name], 'id_unique': asset.id_unique}
            data = json.dumps(param)
            try:
                api = APIRequest('{0}/v1.0/system'.format(proxy.url), proxy.username, CRYPTOR.decrypt(proxy.password))
                result, code = api.req_del(data)
                logger.debug(u'删除单一资产result:%s'%result)
                if code == 200:
                    asset.delete()
                else:
                    response['msg'] = result['messege']
            except Exception as e:
                logger.error(e)
                res['flag'] = 'false'
                res['content'] = e
                response['msg'] = e

    if request.method == 'POST':
        try:
            asset_id_all = request.POST.get('asset_id_all', '')
            asset_list = []
            for asset_id in asset_id_all.split(','):
                asset = get_object(Asset, id=int(asset_id))
                res['content'] += '%s   ' % asset.name
                if asset:
                    asset_list.append(asset)
            proxy_list = Proxy.objects.all()
            execute_thread_tasks(proxy_list, THREAD_NUMBERS, delete_asset_batch, asset_list)
            response['msg'] = u'批量删除主机成功'
        except Exception as e:
            logger.error(e)
            res['flag'] = 'false'
            res['content'] = e
            response['msg'] = e
        return HttpResponse(json.dumps(response), content_type='application/json')
Beispiel #4
0
def delete_asset_batch(asset_list, proxy=None):
    g_lock = threading.Lock()
    try:
        g_lock.acquire()
        proxy_asset = Asset.objects.filter(proxy__proxy_name=proxy.proxy_name)
        need_delete_asset = set(asset_list) & set(proxy_asset)
        asset_names = [asset.name for asset in need_delete_asset]
        id_uniques = [asset.id_unique for asset in need_delete_asset]
        param = {'names': asset_names, 'id_unique': id_uniques}
        data = json.dumps(param)
        api = APIRequest('{0}/v1.0/system'.format(proxy.url), proxy.username, CRYPTOR.decrypt(proxy.password))
        result, code = api.req_del(data)
        logger.info(u'删除多个资产result:%s'% result)
        if code == 200:
            for item in need_delete_asset:
                item.delete()
    except Exception as e:
        raise ServerError(e)
    finally:
        g_lock.release()
Beispiel #5
0
def delete_asset_batch(asset_list, proxy=None):
    g_lock = threading.Lock()
    try:
        g_lock.acquire()
        proxy_asset = Asset.objects.filter(proxy__proxy_name=proxy.proxy_name)
        need_delete_asset = set(asset_list) & set(proxy_asset)
        asset_names = [asset.name for asset in need_delete_asset]
        id_uniques = [asset.id_unique for asset in need_delete_asset]
        param = {'names': asset_names, 'id_unique': id_uniques}
        data = json.dumps(param)
        api = APIRequest('{0}/v1.0/system'.format(proxy.url), proxy.username,
                         CRYPTOR.decrypt(proxy.password))
        result, code = api.req_del(data)
        logger.info(u'删除多个资产result:%s' % result)
        if code == 200:
            for item in need_delete_asset:
                item.delete()
    except Exception as e:
        raise ServerError(e)
    finally:
        g_lock.release()
Beispiel #6
0
def save_or_delete(obj_name, data, proxy, obj_uuid=None, action='add'):
    """
    保存,更新, 删除数据
    obj_name: 'PermRole'
    obj_uuid: role.uuid_id
    """
    info = ''
    try:
        api = APIRequest('{0}/v1.0/permission/{1}/{2}'.format(proxy.url, obj_name, obj_uuid), proxy.username, CRYPTOR.decrypt(proxy.password))
        if action == 'add':
            result, codes = api.req_post(data)
        elif action == 'update':
            result, codes = api.req_put(data)
        elif action == 'delete':
            result, codes = api.req_del(data)
        if result is not None:
            info = result['messege']
    except Exception as e:
        info = 'error'
        logger.error("[save_or_delete]    %s"%e)
    return info
Beispiel #7
0
def save_or_delete(obj_name, data, proxy, obj_uuid=None, action='add'):
    """
    保存,更新, 删除数据
    obj_name: 'PermRole'
    obj_uuid: role.uuid_id
    """
    info = ''
    try:
        api = APIRequest(
            '{0}/v1.0/permission/{1}/{2}'.format(proxy.url, obj_name,
                                                 obj_uuid), proxy.username,
            CRYPTOR.decrypt(proxy.password))
        if action == 'add':
            result, codes = api.req_post(data)
        elif action == 'update':
            result, codes = api.req_put(data)
        elif action == 'delete':
            result, codes = api.req_del(data)
        if result is not None:
            info = result['messege']
    except Exception as e:
        info = 'error'
        logger.error("[save_or_delete]    %s" % e)
    return info
Beispiel #8
0
def role_proxy_operator(user_name,
                        obj_name,
                        data,
                        proxy=None,
                        obj_uuid='all',
                        action='add'):
    """
    保存,更新, 删除数据,并把操作结果保存到Task表中
    obj_name: PermRole, PermSudo
    """
    result = res_info = msg_name = ''
    g_lock = threading.Lock()  # 线程锁
    if obj_name == 'PermRole':
        msg_name = u'系统用户'
    elif obj_name == 'PermSudo':
        msg_name = u'SUDO别名'
    g_url = '{0}/v1.0/permission/{1}/{2}'.format(proxy.url, obj_name, obj_uuid)
    try:
        g_lock.acquire()
        # 在每个proxy上(add/update/delete) role/sudo,并返回结果
        api = APIRequest(g_url, proxy.username,
                         CRYPTOR.decrypt(proxy.password))
        if action == 'add':
            result, codes = api.req_post(data)
            pdata = json.loads(data)
            res_info = u'添加{0}{1} {2}'.format(msg_name, pdata['name'],
                                              result['messege'])
        elif action == 'update':
            result, codes = api.req_put(data)
            pdata = json.loads(data)
            res_info = u'编辑{0}{1} {2}'.format(msg_name, pdata['name'],
                                              result['messege'])
        elif action == 'delete':
            result, codes = api.req_del(data)
            pdata = json.loads(data)
            res_info = u'删除{0}{1} {2}'.format(msg_name, pdata['name'],
                                              result['messege'])
        logger.info('role_proxy_%s:%s' % (action, result['messege']))

        # 生成唯一的事件名称,用于从数据库中查询执行结果
        if 'name' not in json.dumps(data):
            raise ValueError('role_proxy_operator: data["name"]不存在')
        task_name = json.loads(data)['name'] + '_' + uuid.uuid4().hex
        # 将事件添加到消息队列中
        task_queue.put({'server': task_name, 'username': user_name})

        # 将执行结果保存到数据库中
        role_task = Task()
        role_task.task_name = task_name
        role_task.proxy_name = proxy.proxy_name
        role_task.role_name = json.loads(data)['name']
        role_task.username = user_name
        role_task.status = 'complete'
        role_task.content = res_info
        role_task.url = g_url
        role_task.start_time = datetime.datetime.now()
        role_task.action = action
        role_task.role_uuid = obj_uuid
        role_task.role_data = data
        role_task.result = result['messege']
        role_task.save()
    except Exception as e:
        logger.error("[role_proxy_operator] %s" % e)
    finally:
        g_lock.release()
    return result