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)
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
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')
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()
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()
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
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
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