def inventory_detail(request, id,format=None): """ Retrieve, update or delete a server assets instance. """ try: inventory = Ansible_Inventory.objects.get(id=id) except Ansible_Inventory.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': source = {} for ds in inventory.inventory_group.all(): source[ds.group_name] = {} hosts = [] for ser in ds.inventory_group_server.all(): assets = Assets.objects.get(id=ser.server) if hasattr(assets,'server_assets'):hosts.append( assets.server_assets.ip) elif hasattr(assets,'network_assets'):hosts.append(assets.network_assets.ip) source[ds.group_name]['hosts'] = hosts if ds.ext_vars: try: source[ds.group_name]['vars'] = eval(ds.ext_vars) except Exception ,ex: source[ds.group_name]['vars'] = {} logger.warn(msg="获取资产组变量失败: {ex}".format(ex=ex)) return JsonResponse({"code":200,"msg":"success","data":source})
def inventory(self, inventory): sList = [] resource = {} try: inventory = Ansible_Inventory.objects.get(id=inventory) except Exception, ex: logger.warn(msg="资产组查询失败:{id}".format(id=inventory, ex=ex))
def db_sqlorder_audit(request): try: config = SQL_Audit_Control.objects.get(id=1) except: return render(request, 'orders/db_sqlorder_audit.html', { "user": request.user, "errinfo": "请先在数据管理-基础配置-SQL工单审核配置,做好相关配置。" }) if request.method == "GET": try: try: audit_group = [] for g in json.loads(config.audit_group): audit_group.append(int(g)) except: audit_group = [] userList = User.objects.filter(groups__in=audit_group) dataBaseList = DataBase_Server_Config.objects.all() serviceList = Service_Assets.objects.all() projectList = Project_Assets.objects.all() except Exception, ex: logger.warn(msg="获取SQL审核配置信息失败: {ex}".format(ex=str(ex))) return render( request, 'orders/db_sqlorder_audit.html', { "user": request.user, "dataBaseList": dataBaseList, "userList": userList, "serviceList": serviceList, "projectList": projectList })
def source(self, assetsList): sList = [] resource = [] for assets in assetsList: data = {} if hasattr(assets, 'server_assets'): try: sList.append(assets.server_assets.ip) data["ip"] = assets.server_assets.ip data["port"] = int(assets.server_assets.port) data["username"] = assets.server_assets.username data["sudo_passwd"] = assets.server_assets.sudo_passwd if assets.server_assets.keyfile != 1: data["password"] = assets.server_assets.passwd except Exception, ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) elif hasattr(assets, 'network_assets'): try: sList.append(assets.network_assets.ip) data["ip"] = assets.network_assets.ip data["port"] = int(assets.network_assets.port) data["password"] = assets.network_assets.passwd, data["username"] = assets.network_assets.username data["sudo_passwd"] = assets.network_assets.sudo_passwd data["connection"] = 'local' except Exception, ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex))
def asset_info(request, id,format=None): """ Retrieve, update or delete a server assets instance. """ try: assets = Assets.objects.get(id=id) except Assets.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'POST': dataList = [] try: if assets.assets_type in ['server','vmser']: dataList.append({"name":'CPU型号',"value":assets.server_assets.cpu}) dataList.append({"name":'CPU个数',"value":assets.server_assets.vcpu_number}) dataList.append({"name":'硬盘容量',"value":str(int(assets.server_assets.disk_total)/1024)+'GB'}) dataList.append({"name":'内存容量',"value":str(assets.server_assets.ram_total)+'MB'}) dataList.append({"name":'操作系统',"value":assets.server_assets.system}) dataList.append({"name":'内核版本',"value":assets.server_assets.kernel}) dataList.append({"name":'主机名',"value":assets.server_assets.hostname}) dataList.append({"name":'资产备注',"value":assets.mark}) else: dataList.append({"name":'CPU型号',"value":assets.network_assets.cpu}) dataList.append({"name":'内存容量',"value":assets.network_assets.stone}) dataList.append({"name":'背板带宽',"value":assets.network_assets.bandwidth}) dataList.append({"name":'端口总数',"value":assets.network_assets.port_number}) dataList.append({"name":'资产备注',"value":assets.mark}) except Exception ,ex: logger.warn(msg="获取资产信息失败: {ex}".format(ex=ex)) return JsonResponse({"code":200,"msg":"success","data":dataList})
def inventory(self, inventory): sList = [] resource = {} groups = '' try: inventory = Ansible_Inventory.objects.get(id=inventory) except Exception as ex: logger.warn(msg="资产组查询失败:{id}".format(id=inventory, ex=ex)) for ds in inventory.inventory_group.all(): resource[ds.group_name] = {} hosts = [] for ser in ds.inventory_group_server.all(): assets = Assets.objects.get(id=ser.server) data = {} if hasattr(assets, 'server_assets'): try: serverIp = assets.server_assets.ip data["ip"] = serverIp data["port"] = int(assets.server_assets.port) data["username"] = assets.server_assets.username data["sudo_passwd"] = assets.server_assets.sudo_passwd if assets.server_assets.keyfile != 1: data["password"] = assets.server_assets.passwd except Exception as ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) elif hasattr(assets, 'network_assets'): try: serverIp = assets.network_assets.ip data["ip"] = serverIp data["port"] = int(assets.network_assets.port) data["password"] = assets.network_assets.passwd, data["username"] = assets.network_assets.username data["sudo_passwd"] = assets.network_assets.sudo_passwd data["connection"] = 'local' except Exception as ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) if assets.host_vars: try: for k, v in eval(assets.host_vars).items(): if k not in [ "ip", "port", "username", "password", "ip" ]: data[k] = v except Exception as ex: logger.warn(msg="资产: {assets},转换host_vars失败:{ex}". format(assets=assets.id, ex=ex)) if serverIp not in sList: sList.append(serverIp) hosts.append(data) resource[ds.group_name]['hosts'] = hosts groups += ds.group_name + ',' try: if ds.ext_vars: resource[ds.group_name]['vars'] = eval(ds.ext_vars) except Exception as ex: logger.warn( msg="资产组变量转换失败: {id} {ex}".format(id=inventory, ex=ex)) resource[ds.group_name]['vars'] = None return sList, resource, groups
def queryAssetsByIp(self, ipList): sList = [] resource = [] for ip in ipList: data = {} server = Server_Assets.objects.filter(ip=ip).count() network = Network_Assets.objects.filter(ip=ip).count() if server > 0: try: server_assets = Server_Assets.objects.get(ip=ip) sList.append(server_assets.ip) data["ip"] = server_assets.ip data["port"] = int(server_assets.port) data["username"] = server_assets.username data["sudo_passwd"] = server_assets.sudo_passwd if server_assets.keyfile != 1: data["password"] = server_assets.passwd except Exception, ex: logger.warn(msg="server_id:{assets}, error:{ex}".format( assets=server_assets.id, ex=ex)) if server_assets.assets.host_vars: try: for k, v in eval( server_assets.assets.host_vars).items(): if k not in [ "ip", "port", "username", "password", "ip" ]: data[k] = v except Exception, ex: logger.warn( msg="资产: {assets},转换host_vars失败:{ex}".format( assets=server_assets.assets.id, ex=ex))
def inventory_detail(request, id, format=None): """ Retrieve, update or delete a server assets instance. """ try: inventory = Ansible_Inventory.objects.get(id=id) except Ansible_Inventory.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': source = {} for ds in inventory.inventory_group.all(): source[ds.group_name] = {} hosts = [] for ser in ds.inventory_group_server.all(): assets = Assets.objects.get(id=ser.server) if hasattr(assets, 'server_assets'): hosts.append(assets.server_assets.ip) elif hasattr(assets, 'network_assets'): hosts.append(assets.network_assets.ip) source[ds.group_name]['hosts'] = hosts if ds.ext_vars: try: source[ds.group_name]['vars'] = eval(ds.ext_vars) except Exception, ex: source[ds.group_name]['vars'] = {} logger.warn(msg="获取资产组变量失败: {ex}".format(ex=ex)) return JsonResponse({"code": 200, "msg": "success", "data": source})
def assets_view(request,aid): try: assets = Assets.objects.get(id=aid) userList = User.objects.all() except: return render(request,'404.html',{"user":request.user}, ) if assets.assets_type in ['server','vmser']: try: asset_ram = assets.ram_assets_set.all() except: asset_ram = [] try: asset_disk = assets.disk_assets_set.all() except: asset_disk = [] try: asset_nks = assets.networkcard_assets_set.all() except Exception, ex: asset_nks = [] logger.warn(msg="获取网卡设备资产失败: {ex}".format(ex=str(ex))) try: asset_body = assets.server_assets except: return render(request,'assets/assets_view.html',{"user":request.user}, ) return render(request,'assets/assets_view.html',{"user":request.user,"asset_type":assets.assets_type, "asset_main":assets,"asset_body":asset_body, "asset_ram":asset_ram,"asset_disk":asset_disk, "baseAssets":getBaseAssets(),'userList':userList, "asset_nks":asset_nks}, )
def lpush(redisKey,data): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.lpush(redisKey, data) redisConn = None except Exception, ex: logger.warn(msg="Lpush redis data failed: {ex}".format(ex=str(ex))) return False
def ansible_inventory_modf(request,id): if request.method == "GET": try: inventory = Ansible_Inventory.objects.get(id=id) except Exception,ex: logger.warn(msg="获取资产组失败: {ex}".format(ex=str(ex))) serverList = AssetsSource().serverList() return render(request,'apps/apps_inventory_modf.html',{"user":request.user,"serverList":serverList,"inventory":inventory})
def lpush(redisKey,data): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.lpush(redisKey, data) redisConn = None except Exception as ex: logger.warn(msg="Lpush redis data failed: {ex}".format(ex=str(ex))) return False
def delete(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.delete(redisKey) redisConn = None except Exception, ex: logger.warn(msg="Delete redis key failed: {ex}".format(ex=str(ex))) return False
def delete(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.delete(redisKey) redisConn = None except Exception as ex: logger.warn(msg="Delete redis key failed: {ex}".format(ex=str(ex))) return False
def order_list(request, page): if request.method == "GET": if request.user.is_superuser: orderList = Order_System.objects.all().order_by("-id")[0:1000] else: orderList = Order_System.objects.filter( Q(order_user=request.user.id) | Q(order_executor=request.user.id)).order_by("-id")[0:1000] for ds in orderList: try: if ds.order_executor == request.user.id: ds.perm = 1 ds.order_user = User.objects.get(id=ds.order_user).username ds.order_executor = User.objects.get( id=ds.order_executor).username if ds.order_type == 1: ds.order_url = '/deploy_order/status/{id}/'.format( id=ds.id) ds.order_content = ds.project_order.order_content else: ds.order_url = '/db/sql/order/run/{id}/'.format(id=ds.id) if ds.sql_audit_order.order_type == 'file' and ds.sql_audit_order.order_file: filePath = os.getcwd() + '/upload/' + str( ds.sql_audit_order.order_file) with open(filePath, 'r') as f: ds.order_content = f.read(1000) else: ds.order_content = ds.sql_audit_order.order_sql except Exception, ex: logger.warn( msg="获取审核SQL[{id}]错误: {ex}".format(id=ds.id, ex=str(ex))) orderRbt = Order() #工单类型总计 orderType = orderRbt.countOrderType() #用户列表 usernameList = orderRbt.getUserNameList() #分页信息 paginator = Paginator(orderList, 25) try: orderList = paginator.page(page) except PageNotAnInteger: orderList = paginator.page(1) except EmptyPage: orderList = paginator.page(paginator.num_pages) return render( request, 'orders/order_list.html', { "user": request.user, "orderList": orderList, "orderType": orderType, "monthDataList": orderRbt.getMonthOrderCount(), "codeDataList": orderRbt.getOrderCount(type=1, day=7), "usernameList": usernameList, "sqlDataList": orderRbt.getOrderCount(type=0, day=7), "statusList": Order().getOrderStatusCount() }, )
def rpop(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) data = redisConn.rpop(redisKey) redisConn = None return data except Exception as ex: logger.warn(msg="Rpop redis data failed: {ex}".format(ex=str(ex))) return False
def article_category(request, pid): try: category = Category.objects.get(id=pid) except Exception, ex: logger.warn(msg="分类不存在: {ex}".format(ex=ex)) return render(request, 'wiki/wiki_base.html', { "user": request.user, "errorInfo": "分类不存在: {ex}".format(ex=ex) })
def article_tag(request, pid): try: tag = Tag.objects.get(id=pid) except Exception, ex: logger.warn(msg="标签不存在: {ex}".format(ex=ex)) return render(request, 'wiki/wiki_base.html', { "user": request.user, "errorInfo": "标签不存在: {ex}".format(ex=ex) })
def get(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) result = redisConn.get(redisKey) redisConn = None return result except Exception, ex: logger.warn(msg="Get redis key failed: {ex}".format(ex=str(ex))) return False
def get(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) result = redisConn.get(redisKey) redisConn = None return result except Exception as ex: logger.warn(msg="Get redis key failed: {ex}".format(ex=str(ex))) return False
def set(redisKey,value): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.set(redisKey, value) redisConn.expire(redisKey, 300) redisConn = None except Exception, ex: logger.warn(msg="Set redis key failed: {ex}".format(ex=str(ex))) return False
def set(redisKey,value): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) redisConn.set(redisKey, value) redisConn.expire(redisKey, 300) redisConn = None except Exception as ex: logger.warn(msg="Set redis key failed: {ex}".format(ex=str(ex))) return False
def rpop(redisKey): try: redisConn = APBase.getRedisConnection(APBase.REDSI_POOL) data = redisConn.rpop(redisKey) redisConn = None return data except Exception, ex: logger.warn(msg="Rpop redis data failed: {ex}".format(ex=str(ex))) return False
def assets_facts(request,args=None): if request.method == "POST" and request.user.has_perm('OpsManage.change_server_assets'): server_id = request.POST.get('server_id') genre = request.POST.get('type') if genre == 'setup': try: server_assets = Server_Assets.objects.get(id=request.POST.get('server_id')) if server_assets.keyfile == 1:resource = [{"hostname": server_assets.ip, "port": int(server_assets.port),"username": server_assets.username}] else:resource = [{"hostname": server_assets.ip, "port": server_assets.port,"username": server_assets.username, "password": server_assets.passwd}] except Exception,ex: logger.error(msg="更新资产失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"数据更新失败-查询不到该主机资料~","code":502}) ANS = ANSRunner(resource) ANS.run_model(host_list=[server_assets.ip],module_name='setup',module_args="") data = ANS.handle_cmdb_data(ANS.get_model_result()) if data: for ds in data: status = ds.get('status') if status == 0: try: assets = Assets.objects.get(id=server_assets.assets_id) Assets.objects.filter(id=server_assets.assets_id).update(sn=ds.get('serial'),model=ds.get('model'), manufacturer=ds.get('manufacturer')) except Exception, ex: logger.error(msg="获取服务器信息失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"数据更新失败-查询不到该主机的资产信息","code":403}) try: Server_Assets.objects.filter(id=server_id).update(cpu_number=ds.get('cpu_number'),kernel=ds.get('kernel'), selinux=ds.get('selinux'),hostname=ds.get('hostname'), system=ds.get('system'),cpu=ds.get('cpu'), disk_total=ds.get('disk_total'),cpu_core=ds.get('cpu_core'), swap=ds.get('swap'),ram_total=ds.get('ram_total'), vcpu_number=ds.get('vcpu_number') ) recordAssets.delay(user=str(request.user),content="修改服务器资产:{ip}".format(ip=server_assets.ip),type="server",id=server_assets.id) except Exception, ex: logger.error(msg="更新服务器信息失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"数据更新失败-写入数据失败","code":400}) for nk in ds.get('nks'): macaddress = nk.get('macaddress') count = NetworkCard_Assets.objects.filter(assets=assets,macaddress=macaddress).count() if count > 0: try: NetworkCard_Assets.objects.filter(assets=assets,macaddress=macaddress).update(assets=assets,device=nk.get('device'), ip=nk.get('address'),module=nk.get('module'), mtu=nk.get('mtu'),active=nk.get('active')) except Exception, ex: logger.warn(msg="更新服务器网卡信息失败: {ex}".format(ex=str(ex))) else: try: NetworkCard_Assets.objects.create(assets=assets,device=nk.get('device'), macaddress=nk.get('macaddress'), ip=nk.get('address'),module=nk.get('module'), mtu=nk.get('mtu'),active=nk.get('active')) except Exception, ex: logger.warn(msg="写入服务器网卡信息失败: {ex}".format(ex=str(ex)))
def queryAssetsByIp(self, ipList): sList = [] resource = [] for ip in ipList: server = Server_Assets.objects.filter(ip=ip).count() network = Network_Assets.objects.filter(ip=ip).count() if server > 0: try: server_assets = Server_Assets.objects.get(ip=ip) sList.append(server_assets.ip) if server_assets.keyfile == 1: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username, "sudo_passwd": server_assets.sudo_passwd }) else: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username, "password": server_assets.passwd, "sudo_passwd": server_assets.sudo_passwd }) except Exception, ex: logger.warn(msg="server_id:{assets}, error:{ex}".format( assets=server_assets.id, ex=ex)) elif network > 0: try: network_assets = Network_Assets.objects.get(ip=ip) sList.append(network_assets.ip) resource.append({ "hostname": network_assets.ip, "port": int(network_assets.port), "username": network_assets.username, "password": network_assets.passwd, "sudo_passwd": network_assets.sudo_passwd, "connection": 'local' }) except Exception, ex: logger.warn(msg="network_id:{assets}, error:{ex}".format( assets=server_assets.id, ex=ex))
def ansible_inventory(request): if request.method == "GET": inventoryList = [] for ds in Ansible_Inventory.objects.all(): try: ds.user = User.objects.get(id=ds.user).username except Exception,ex: logger.warn(msg="查询用户信息失败: {ex}".format(ex=str(ex))) inventoryList.append(ds) serverList = AssetsSource().serverList() return render(request,'apps/apps_inventory.html',{"user":request.user,"serverList":serverList, "inventoryList":inventoryList}, )
def db_sqlorder_list(request, page): if request.method == "GET": try: if request.user.is_superuser: orderList = SQL_Audit_Order.objects.all().order_by( "-id")[0:1000] else: orderList = SQL_Audit_Order.objects.filter( Q(order_apply=request.user.id) | Q(order_executor=request.user.id)).order_by( "-id")[0:1000] for ds in orderList: try: if ds.order_executor == request.user.id: ds.perm = 1 ds.order_apply = User.objects.get( id=ds.order_apply).username ds.order_executor = User.objects.get( id=ds.order_executor).username if ds.order_type == 'file': filePath = os.getcwd() + '/upload/' + str( ds.order_file) with open(filePath, 'r') as f: ds.order_sql = f.read(1000) except Exception, ex: logger.warn(msg="获取审核SQL[{id}]错误: {ex}".format(id=ds.id, ex=str(ex))) except Exception, ex: logger.warn(msg="获取SQL审核列表错误: {ex}".format(ex=str(ex))) totalOrder = SQL_Audit_Order.objects.all().count() doneOrder = SQL_Audit_Order.objects.filter(order_status=2).count() rollbackOrder = SQL_Audit_Order.objects.filter(order_status=3).count() rejectOrder = SQL_Audit_Order.objects.filter(order_status=4).count() paginator = Paginator(orderList, 25) try: orderList = paginator.page(page) except PageNotAnInteger: orderList = paginator.page(1) except EmptyPage: orderList = paginator.page(paginator.num_pages) return render( request, 'database/db_sqlorder_list.html', { "user": request.user, "orderList": orderList, "totalOrder": totalOrder, "doneOrder": doneOrder, "rollbackOrder": rollbackOrder, "rejectOrder": rejectOrder, }, )
def task_view(request): if request.method == "GET": try: workList = WorkerState.objects.all() regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'): regTaskList.append(task) except Exception, ex: logger.warn(msg="获取Celery Task失败: {ex}".format(ex=str(ex))) taskLog = [] return render(request,'task/task_view.html', {"user":request.user,"regTaskList":regTaskList,"workList":workList}, )
def order_list(request,page): if request.method == "GET": if request.user.is_superuser: orderList = Order_System.objects.all().order_by("-id")[0:1000] else: orderList = Order_System.objects.filter(Q(order_user=request.user.id) | Q(order_executor=request.user.id)).order_by("-id")[0:1000] for ds in orderList: try: if ds.order_executor == request.user.id:ds.perm = 1 ds.order_user = User.objects.get(id=ds.order_user).username ds.order_executor = User.objects.get(id=ds.order_executor).username if ds.order_type == 1: ds.order_url = '/deploy_order/status/{id}/'.format(id=ds.id) ds.order_content = ds.project_order.order_content elif ds.order_type == 0: ds.order_url = '/db/sql/order/run/{id}/'.format(id=ds.id) if ds.sql_audit_order.order_type == 'file' and ds.sql_audit_order.order_file: filePath = os.getcwd() + '/upload/' + str(ds.sql_audit_order.order_file) with open(filePath, 'r') as f: ds.order_content = f.read(1000) else:ds.order_content = ds.sql_audit_order.order_sql elif ds.order_type == 2: ds.order_url = '/file/upload/run/{id}/'.format(id=ds.id) ds.order_content = ds.fileupload_audit_order.order_content elif ds.order_type == 3: ds.order_url = '/file/download/run/{id}/'.format(id=ds.id) ds.order_content = ds.filedownload_audit_order.order_content else:ds.order_content = '未知' except Exception, ex: logger.warn(msg="获取审核SQL[{id}]错误: {ex}".format(id=ds.id,ex=str(ex))) orderRbt = Order() #工单类型总计 orderType = orderRbt.countOrderType() #用户列表 usernameList = orderRbt.getUserNameList() #分页信息 paginator = Paginator(orderList, 25) try: orderList = paginator.page(page) except PageNotAnInteger: orderList = paginator.page(1) except EmptyPage: orderList = paginator.page(paginator.num_pages) return render(request,'orders/order_list.html',{"user":request.user,"orderList":orderList, "orderType":orderType,"monthDataList":orderRbt.getMonthOrderCount(), "codeDataList":orderRbt.getOrderCount(type=1, day=7),"usernameList":usernameList, "sqlDataList":orderRbt.getOrderCount(type=0, day=7), "statusList":Order().getOrderStatusCount()}, )
def source(self, assetsList): sList = [] resource = [] for assets in assetsList: if hasattr(assets, 'server_assets'): try: sList.append(assets.server_assets.ip) if assets.server_assets.keyfile == 1: resource.append({ "hostname": assets.server_assets.ip, "port": int(assets.server_assets.port), "username": assets.server_assets.username, "sudo_passwd": assets.server_assets.sudo_passwd }) else: resource.append({ "hostname": assets.server_assets.ip, "port": int(assets.server_assets.port), "username": assets.server_assets.username, "password": assets.server_assets.passwd, "sudo_passwd": assets.server_assets.sudo_passwd }) except Exception, ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) elif hasattr(assets, 'network_assets'): try: sList.append(assets.network_assets.ip) resource.append({ "hostname": assets.network_assets.ip, "port": int(assets.network_assets.port), "username": assets.network_assets.username, "password": assets.network_assets.passwd, "sudo_passwd": assets.network_assets.sudo_passwd, "connection": 'local' }) except Exception, ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex))
def article_add(request): if request.method == "GET": tagList = Tag.objects.all() categoryList = Category.objects.all() return render(request,'wiki/wiki_post.html',{"user":request.user,"tagList":tagList,"categoryList":categoryList}) elif request.method == "POST": title = request.POST.get('title') content = request.POST.get('content') category = request.POST.get('category') tags = request.POST.getlist('tag[]') try: category = Category.objects.get(id=category) except Exception ,ex: logger.warn(msg="获取分类失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"获取分类失败: {ex}".format(ex=str(ex)),"code":500,'data':[]}) try: article = Post.objects.create(title=title,content=content,category=category, author=User.objects.get(username=request.user)) except Exception ,ex: logger.warn(msg="创建文章失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"创建文章失败: {ex}".format(ex=str(ex)),"code":500,'data':[]})
def db_sqlorder_audit(request): try: config = SQL_Audit_Control.objects.get(id=1) except: return render(request,'orders/db_sqlorder_audit.html',{"user":request.user,"errinfo":"请先在数据管理-基础配置-SQL工单审核配置,做好相关配置。"}) if request.method == "GET": try: try: audit_group = [] for g in json.loads(config.audit_group): audit_group.append(int(g)) except: audit_group = [] userList = User.objects.filter(groups__in=audit_group) dataBaseList = DataBase_Server_Config.objects.all() serviceList = Service_Assets.objects.all() projectList = Project_Assets.objects.all() except Exception, ex: logger.warn(msg="获取SQL审核配置信息失败: {ex}".format(ex=str(ex))) return render(request,'orders/db_sqlorder_audit.html',{"user":request.user,"dataBaseList":dataBaseList,"userList":userList, "serviceList":serviceList,"projectList":projectList})
def db_status(request, id, format=None): try: dbServer = DataBase_Server_Config.objects.get(id=id) except DataBase_Server_Config.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'POST': dataList = [] mysql = MySQLPool(host=dbServer.db_host, port=dbServer.db_port, user=dbServer.db_user, passwd=dbServer.db_passwd, dbName=dbServer.db_name) version = mysql.execute(sql='SELECT VERSION() as version;') if isinstance(version, tuple): data = {} data['name'] = 'Version' try: data['value'] = version[1][0][0] dataList.append(data) except Exception, ex: data['value'] = '未知' logger.warn(msg="获取MySQL版本信息失败: {ex}".format(ex=ex)) status = mysql.execute(sql='show status;') if isinstance(status, tuple): for ds in status[1]: data = {} if ds[0].lower() in MySQL.keysList: data['value'] = ds[1] data['name'] = ds[0].capitalize() dataList.append(data) logs = mysql.execute(sql='show global variables;') if isinstance(logs, tuple): for ds in logs[1]: data = {} if ds[0].lower() in MySQL.keysList: data['value'] = ds[1] data['name'] = ds[0].capitalize() dataList.append(data) return JsonResponse({"code": 200, "msg": "success", "data": dataList})
def article_add(request): if request.method == "GET": tagList = Tag.objects.all() categoryList = Category.objects.all() return render(request, 'wiki/wiki_post.html', { "user": request.user, "tagList": tagList, "categoryList": categoryList }) elif request.method == "POST": title = request.POST.get('title') content = request.POST.get('content') category = request.POST.get('category') tags = request.POST.getlist('tag[]') try: category = Category.objects.get(id=category) except Exception, ex: logger.warn(msg="获取分类失败: {ex}".format(ex=str(ex))) return JsonResponse({ 'msg': "获取分类失败: {ex}".format(ex=str(ex)), "code": 500, 'data': [] }) try: article = Post.objects.create( title=title, content=content, category=category, author=User.objects.get(username=request.user)) except Exception, ex: logger.warn(msg="创建文章失败: {ex}".format(ex=str(ex))) return JsonResponse({ 'msg': "创建文章失败: {ex}".format(ex=str(ex)), "code": 500, 'data': [] })
def db_config(request): if request.method == "GET": groupList = Group.objects.all() sqlList = Custom_High_Risk_SQL.objects.all() dataBaseList = DataBase_Server_Config.objects.all() serviceList = Service_Assets.objects.all() serList = Server_Assets.objects.all() projectList = Project_Assets.objects.all() try: config = SQL_Audit_Control.objects.get(id=1) gList = json.loads(config.audit_group) audit_group = [] for g in gList: audit_group.append(int(g)) for g in groupList: if g.id in audit_group:g.count = 1 except Exception,ex: logger.warn(msg="获取SQL审核配置信息失败: {ex}".format(ex=str(ex))) config = None try: incept = Inception_Server_Config.objects.get(id=1) except Exception, ex: logger.warn(msg="获取Inception服务器信息失败: {ex}".format(ex=str(ex))) incept = None
def db_config(request): if request.method == "GET": groupList = Group.objects.all() sqlList = Custom_High_Risk_SQL.objects.all() dataBaseList = DataBase_Server_Config.objects.all() serviceList = Service_Assets.objects.all() serList = Server_Assets.objects.all() projectList = Project_Assets.objects.all() try: config = SQL_Audit_Control.objects.get(id=1) gList = json.loads(config.audit_group) audit_group = [] for g in gList: audit_group.append(int(g)) for g in groupList: if g.id in audit_group: g.count = 1 except Exception, ex: logger.warn(msg="获取SQL审核配置信息失败: {ex}".format(ex=str(ex))) config = None try: incept = Inception_Server_Config.objects.get(id=1) except Exception, ex: logger.warn(msg="获取Inception服务器信息失败: {ex}".format(ex=str(ex))) incept = None
def source(self, assetsList): sList = [] resource = [] for assets in assetsList: data = {} if hasattr(assets, 'server_assets'): try: sList.append(assets.server_assets.ip) data["ip"] = assets.server_assets.ip data["port"] = int(assets.server_assets.port) data["username"] = assets.server_assets.username data["sudo_passwd"] = assets.server_assets.sudo_passwd if assets.server_assets.keyfile == 0: data["password"] = assets.server_assets.passwd except Exception as ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) elif hasattr(assets, 'network_assets'): try: sList.append(assets.network_assets.ip) data["ip"] = assets.network_assets.ip data["port"] = int(assets.network_assets.port) data["password"] = assets.network_assets.passwd, data["username"] = assets.network_assets.username data["sudo_passwd"] = assets.network_assets.sudo_passwd data["connection"] = 'local' except Exception as ex: logger.warn(msg="id:{assets}, error:{ex}".format( assets=assets.id, ex=ex)) if assets.host_vars: try: for k, v in eval(assets.host_vars).items(): if k not in [ "ip", "port", "username", "password", "ip" ]: data[k] = v except Exception as ex: logger.warn(msg="资产: {assets},转换host_vars失败:{ex}".format( assets=assets.id, ex=ex)) resource.append(data) return sList, resource
category = Category.objects.get(id=category) except Exception ,ex: logger.warn(msg="获取分类失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"获取分类失败: {ex}".format(ex=str(ex)),"code":500,'data':[]}) try: article = Post.objects.create(title=title,content=content,category=category, author=User.objects.get(username=request.user)) except Exception ,ex: logger.warn(msg="创建文章失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"创建文章失败: {ex}".format(ex=str(ex)),"code":500,'data':[]}) try: for tg in tags: tag = Tag.objects.get(id=tg) article.tags.add(tag) except Exception ,ex: logger.warn(msg="创建文章标签失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg':"文章添加成功","code":200,'data':[]}) @login_required() @csrf_exempt def upload_image(request): if request.method == 'POST': f = request.FILES["upload"] callback = request.GET.get('CKEditorFuncNum','1') if f: try: datePath = time.strftime("%Y/%m/%d/",time.localtime()) path = os.getcwd() + "/upload/wiki/" + datePath filePath = path + f.name if os.path.isdir(os.path.dirname(filePath)) is not True:os.makedirs(os.path.dirname(filePath)) with open(filePath, 'wb+') as destination:
def article_tag(request,pid): try: tag = Tag.objects.get(id=pid) except Exception,ex: logger.warn(msg="标签不存在: {ex}".format(ex=ex)) return render(request,'wiki/wiki_base.html',{"user":request.user,"errorInfo":"标签不存在: {ex}".format(ex=ex)})
content=content, category=category, author=User.objects.get(username=request.user)) except Exception, ex: logger.warn(msg="创建文章失败: {ex}".format(ex=str(ex))) return JsonResponse({ 'msg': "创建文章失败: {ex}".format(ex=str(ex)), "code": 500, 'data': [] }) try: for tg in tags: tag = Tag.objects.get(id=tg) article.tags.add(tag) except Exception, ex: logger.warn(msg="创建文章标签失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg': "文章添加成功", "code": 200, 'data': []}) @login_required() @csrf_exempt def upload_image(request): if request.method == 'POST': f = request.FILES["upload"] callback = request.GET.get('CKEditorFuncNum', '1') if f: try: datePath = time.strftime("%Y/%m/%d/", time.localtime()) path = os.getcwd() + "/upload/wiki/" + datePath filePath = path + f.name if os.path.isdir(os.path.dirname(filePath)) is not True:
if hasattr(assets, 'server_assets'): postServerList.append(assets.server_assets.ip) if assets.server_assets.ip not in tagret_server_list: Project_Number.objects.create( dir=request.POST.get('dir'), server=assets.server_assets.ip, project=project) elif assets.server_assets.ip in tagret_server_list and request.POST.get( 'dir'): try: Project_Number.objects.filter( project=project, server=assets.server_assets.ip).update( dir=request.POST.get('dir')) except Exception, e: logger.warn(msg="部署项目修改目标服务器失败: {ex}".format( ex=ex)) except Exception, ex: logger.error(msg="部署项目修改失败: {ex}".format(ex=ex)) return JsonResponse({ 'msg': "部署项目修改失败: {ex}".format(ex=ex), "code": 500, 'data': [] }) #清除目标主机 - delList = list( set(tagret_server_list).difference(set(postServerList))) for ip in delList: Project_Number.objects.filter(project=project, server=ip).delete() return JsonResponse({'msg': "部署项目修改成功", "code": 200, 'data': []})
if rbkSql.get('status') == 'success' and rbkSql.get('data'): for sql in rbkSql.get('data'): rollBackSql.append(sql[0]) elif order.sql_audit_order.order_type=='file': filePath = os.getcwd() + '/upload/' + str(order.sql_audit_order.order_file) with open(filePath, 'r') as f: order.sql_audit_order.order_sql = f.read() return render(request,'database/db_sqlorder_run.html',{"user":request.user,"order":order,"sqlResultList":sqlResultList,"rollBackSql":rollBackSql,"oscStatus":oscStatus}) elif request.method == "POST": if request.POST.get('type') == 'exec' and order.order_status == 8 and order.prem == 1: try: count = SQL_Order_Execute_Result.objects.filter(order=order.sql_audit_order).count() if count > 0:return JsonResponse({'msg':"该SQL已经被执行过,请勿重复执行","code":500,'data':[]}) except Exception,ex: logger.warn(msg="执行SQL[{id}]错误: {ex}".format(id=id,ex=str(ex))) if order.sql_audit_order.order_type == 'online': try: config = SQL_Audit_Control.objects.get(id=1) incept = Inception( host=order.sql_audit_order.order_db.db_host, name=order.sql_audit_order.order_db.db_name, user=order.sql_audit_order.order_db.db_user, passwd=order.sql_audit_order.order_db.db_passwd, port=order.sql_audit_order.order_db.db_port ) if config.t_backup_sql == 0 and order.sql_audit_order.order_db.db_env == 'test':action = '--disable-remote-backup;' elif config.p_backup_sql == 0 and order.sql_audit_order.order_db.db_env == 'prod':action = '--disable-remote-backup;' else:action = None result = incept.execSql(order.sql_audit_order.order_sql,action) if result.get('status') == 'success':
data = dict() work = WorkerState.objects.get(id=taskLog.worker_id) data['id'] = taskLog.id data['task_id'] = taskLog.task_id data['worker'] = work.hostname if task.has_key(taskLog.name):data['name'] = task[taskLog.name] else:data['name'] = taskLog.name data['tstamp'] = taskLog.tstamp data['args'] = taskLog.args.replace('[u','[') data['kwargs'] = taskLog.kwargs.replace('u\'','\'') data['result'] = taskLog.result data['state'] = taskLog.state data['runtime'] = taskLog.runtime return JsonResponse({"code":200,"data":data,"msg":"操作成功"}) except Exception,ex: logger.warn(msg="查看Celery Task运行日志失败: {ex}".format(ex=str(ex))) return JsonResponse({"code":500,"data":None,"msg":"日志查看失败。"}) elif op == 'delete': try: taskLog.delete() return JsonResponse({"code":200,"data":None,"msg":"删除成功"}) except Exception,ex: return JsonResponse({"code":500,"data":ex,"msg":"日志删除失败"}) elif op == 'kill': try: revoke(taskLog.task_id, terminate=True) return JsonResponse({"code":200,"data":None,"msg":"任务终止成功"}) except Exception,ex: logger.warn(msg="终止任务失败: {ex}".format(ex=str(ex))) return JsonResponse({"code":500,"data":ex,"msg":"任务终止成功"}) else:return JsonResponse({"code":500,"data":"终止任务失败: {ex}".format(ex=str(ex)),"msg":"不支持的操作或者您没有权限操作操作此项。"})
def article_category(request,pid): try: category = Category.objects.get(id=pid) except Exception,ex: logger.warn(msg="分类不存在: {ex}".format(ex=ex)) return render(request,'wiki/wiki_base.html',{"user":request.user,"errorInfo":"分类不存在: {ex}".format(ex=ex)})
def apps_script_online_run(request, pid): try: script = Ansible_Script.objects.get(id=pid) numberList = json.loads(script.script_server) except: return render( request, 'apps/apps_script_modf.html', { "user": request.user, "errorInfo": "剧本不存在,可能已经被删除." }, ) def saveScript(content, filePath): if os.path.isdir(os.path.dirname(filePath)) is not True: os.makedirs(os.path.dirname(filePath)) #判断文件存放的目录是否存在,不存在就创建 with open(filePath, 'w') as f: f.write(content) return filePath if request.method == "GET": projectList = Project_Assets.objects.all() serverList = Server_Assets.objects.all() for ds in serverList: if ds.ip in numberList: ds.count = 1 else: ds.count = 0 script_file = os.getcwd() + '/' + str(script.script_file) if os.path.exists(script_file): content = '' with open(script_file, "r") as f: for line in f.readlines(): content = content + line script.script_contents = content groupList = Group.objects.all() userList = User.objects.all() serviceList = [] try: project = Service_Assets.objects.get( id=script.script_service).project serviceList = Service_Assets.objects.filter(project=project) except: project = None return render( request, 'apps/apps_script_modf.html', { "user": request.user, "userList": userList, "script": script, "serverList": serverList, "groupList": groupList, "serviceList": serviceList, "project": project, "projectList": projectList }, ) elif request.method == "POST" and request.user.has_perm( 'OpsManage.can_exec_ansible_script'): resource = [] sList = [] if request.POST.get('server_model') in ['service', 'group', 'custom']: if request.POST.get('server_model') == 'custom': serverList = request.POST.getlist('ansible_server[]') for server in serverList: server_assets = Server_Assets.objects.get(id=server) sList.append(server_assets.ip) if server_assets.keyfile == 1: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username }) else: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username, "password": server_assets.passwd }) elif request.POST.get('server_model') == 'group': serverList = Assets.objects.filter( group=request.POST.get('ansible_group'), assets_type__in=["server", "vmser"]) for server in serverList: sList.append(server.server_assets.ip) if server.server_assets.keyfile == 1: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username }) else: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username, "password": server.server_assets.passwd }) elif request.POST.get('server_model') == 'service': serverList = Assets.objects.filter( business=request.POST.get('ansible_service'), assets_type__in=["server", "vmser"]) for server in serverList: try: sList.append(server.server_assets.ip) except Exception, ex: logger.warn(msg="获取业务失败: {ex}".format(ex=ex)) continue if server.server_assets.keyfile == 1: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username }) else: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username, "password": server.server_assets.passwd }) if request.POST.get('type') == 'save' and request.POST.get( 'script_file'): filePath = os.getcwd() + '/' + str(script.script_file) saveScript(content=request.POST.get('script_file'), filePath=filePath) try: Ansible_Script.objects.filter(id=pid).update( script_server=json.dumps(sList), script_group=request.POST.get('ansible_group', 0), script_service=request.POST.get('ansible_service', 0), script_type=request.POST.get('server_model')) except Exception, ex: logger.error(msg="保存脚本失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg': str(ex), "code": 500, 'data': []}) return JsonResponse({'msg': "保存成功", "code": 200, 'data': []})
def apps_script_online(request): if request.method == "GET": serverList = Server_Assets.objects.all() groupList = Group.objects.all() serviceList = Service_Assets.objects.all() projectList = Project_Assets.objects.all() return render( request, 'apps/apps_script_online.html', { "user": request.user, "ans_uuid": uuid.uuid4(), "serverList": serverList, "groupList": groupList, "serviceList": serviceList, "projectList": projectList }) elif request.method == "POST" and request.user.has_perm( 'OpsManage.can_exec_ansible_script'): resource = [] sList = [] def saveScript(content, filePath): if os.path.isdir(os.path.dirname(filePath)) is not True: os.makedirs(os.path.dirname(filePath)) #判断文件存放的目录是否存在,不存在就创建 with open(filePath, 'w') as f: f.write(content) return filePath if request.POST.get('server_model') in ['service', 'group', 'custom']: if request.POST.get('server_model') == 'custom': serverList = request.POST.getlist('ansible_server[]') for server in serverList: server_assets = Server_Assets.objects.get(id=server) sList.append(server_assets.ip) if server_assets.keyfile == 1: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username }) else: resource.append({ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username, "password": server_assets.passwd }) elif request.POST.get('server_model') == 'group': try: serverList = Assets.objects.filter( group=request.POST.get('ansible_group', 0), assets_type__in=["server", "vmser"]) except: serverList = [] for server in serverList: try: sList.append(server.server_assets.ip) except Exception, ex: logger.warn(msg="获取组信息失败: {ex}".format(ex=ex)) continue if server.server_assets.keyfile == 1: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username }) else: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username, "password": server.server_assets.passwd }) elif request.POST.get('server_model') == 'service': try: serverList = Assets.objects.filter( business=int(request.POST.get('ansible_service', 0)), assets_type__in=["server", "vmser"]) except: serverList = [] for server in serverList: try: sList.append(server.server_assets.ip) except Exception, ex: logger.warn(msg="获取业务信息失败: {ex}".format(ex=ex)) continue if server.server_assets.keyfile == 1: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username }) else: resource.append({ "hostname": server.server_assets.ip, "port": int(server.server_assets.port), "username": server.server_assets.username, "password": server.server_assets.passwd }) if len(sList) > 0 and request.POST.get( 'type') == 'run' and request.POST.get('script_file'): filePath = saveScript(content=request.POST.get('script_file'), filePath='/tmp/script-{ram}'.format( ram=uuid.uuid4().hex[0:8])) redisKey = request.POST.get('ans_uuid') logId = AnsibleRecord.Model.insert(user=str(request.user), ans_model='script', ans_server=','.join(sList), ans_args=filePath) DsRedis.OpsAnsibleModel.delete(redisKey) DsRedis.OpsAnsibleModel.lpush( redisKey, "[Start] Ansible Model: {model} Script:{args}".format( model='script', args=filePath)) if request.POST.get('ansible_debug') == 'on': ANS = ANSRunner(resource, redisKey, logId, verbosity=4) else: ANS = ANSRunner(resource, redisKey, logId) ANS.run_model(host_list=sList, module_name='script', module_args=filePath) DsRedis.OpsAnsibleModel.lpush(redisKey, "[Done] Ansible Done.") try: os.remove(filePath) except Exception, ex: logger.warn(msg="删除文件失败: {ex}".format(ex=ex)) return JsonResponse({'msg': "操作成功", "code": 200, 'data': []})