Пример #1
0
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}) 
Пример #2
0
 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))
Пример #3
0
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
            })
Пример #4
0
 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))
Пример #5
0
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})   
            
Пример #6
0
 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
Пример #7
0
 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))
Пример #8
0
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})
Пример #9
0
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},
                            )   
Пример #10
0
 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
Пример #11
0
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})
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
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()
            },
        )
Пример #16
0
 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        
Пример #17
0
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)
        })
Пример #18
0
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)
        })
Пример #19
0
 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      
Пример #20
0
 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      
Пример #21
0
 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
Пример #22
0
 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
Пример #23
0
 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        
Пример #24
0
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)))
Пример #25
0
 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))
Пример #26
0
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},
                                  )
Пример #27
0
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,
            },
        )
Пример #28
0
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},
                     )    
Пример #29
0
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()},
                                  )    
Пример #30
0
 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))
Пример #31
0
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':[]})  
Пример #32
0
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})
Пример #33
0
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})
Пример #34
0
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': []
            })
Пример #35
0
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
Пример #36
0
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
Пример #37
0
 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
Пример #38
0
            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:
Пример #39
0
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)}) 
Пример #40
0
                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:
Пример #41
0
                    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': []})
Пример #42
0
                 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':
Пример #43
0
             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":"不支持的操作或者您没有权限操作操作此项。"})            
Пример #44
0
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)}) 
Пример #45
0
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': []})
Пример #46
0
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': []})