예제 #1
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        tag_id = data.get('id')
        users = data.get('users')
        db_id_list = data.get('dbs')  ### ID列表
        server_id_list = data.get('servers')  ### ID列表
        proxy_host = data.get('proxy_host', None)

        if not users:
            return self.write(dict(code=-1, msg='授权用户不能为空'))

        with DBContext('w', None, True) as session:
            # if db_id_list:
            # db_list, new_db_list, del_db_list = [], [], []
            # in_db_tags = session.query(DB.id).outerjoin(DBTag, DBTag.db_id == DB.id).filter(
            #     DBTag.tag_id == tag_id).all()
            # for i in in_db_tags:
            #     i = i[0]
            #     db_list.append(i)
            #     if i not in db_id_list:
            #         del_db_list.append(i)
            #         session.query(DBTag).filter(DBTag.db_id == i).delete(synchronize_session=False)
            #
            # for i in db_id_list:
            #     if i not in db_list:
            #         session.add(DBTag(db_id=int(i), tag_id=tag_id))
            #         new_db_list.append(i)

            # if server_id_list:
            # server_list, new_server_list, del_server_list = [], [], []
            # in_server_tags = session.query(Server.id).outerjoin(ServerTag, ServerTag.server_id == Server.id).filter(
            #     ServerTag.tag_id == tag_id).all()
            #
            # for i in in_server_tags:
            #     i = i[0]
            #     server_list.append(i)
            #     if i not in server_id_list:
            #         del_server_list.append(i)
            #
            #         session.query(ServerTag).filter(ServerTag.server_id == i).delete(synchronize_session=False)
            #
            # for i in server_id_list:
            #     if i not in server_list:
            #         session.add(ServerTag(server_id=int(i), tag_id=tag_id))
            #         new_server_list.append(i)
            session.query(DBTag).filter(DBTag.tag_id == int(tag_id)).delete(synchronize_session=False)
            session.add_all([
                DBTag(db_id=i, tag_id=tag_id) for i in db_id_list
            ])

            session.query(ServerTag).filter(ServerTag.tag_id == int(tag_id)).delete(synchronize_session=False)
            session.add_all([
                ServerTag(server_id=i, tag_id=tag_id) for i in server_id_list
            ])
            if users:
                users = ','.join(users)
            session.query(Tag).filter(Tag.id == int(tag_id)).update({Tag.users: users, Tag.proxy_host: proxy_host})
            session.commit()

        self.write(dict(code=0, msg='修改成功'))
예제 #2
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        tag_name = data.get('tag_name')
        users = data.get('users')
        dbs = data.get('dbs')  ### ID列表
        servers = data.get('servers')  ### ID列表
        proxy_host = data.get('proxy_host', None)

        if not tag_name or not users:
            return self.write(dict(code=-1, msg='标签名称不能为空'))

        with DBContext('r') as session:
            exist_id = session.query(Tag.id).filter(Tag.tag_name == tag_name).first()

        if exist_id:
            return self.write(dict(code=-2, msg='标签名称重复'))

        ### 判断是否存在
        with DBContext('w', None, True) as session:
            if users:
                users = ','.join(users)
            new_tag = Tag(tag_name=tag_name, users=users, proxy_host=proxy_host)
            session.add(new_tag)
            session.commit()
            if dbs:
                for db in dbs:
                    session.add(DBTag(db_id=int(db), tag_id=new_tag.id))
            if servers:
                for server in servers:
                    session.add(ServerTag(server_id=int(server), tag_id=new_tag.id))

        self.write(dict(code=0, msg='添加成功'))
예제 #3
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        server_id = data.get('id', None)
        hostname = data.get('hostname', None)
        ip = data.get('ip', None)
        public_ip = data.get('public_ip', None)
        port = data.get('port', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('w', None, True) as session:
            exist_hostname = session.query(Server.hostname).filter(Server.id == server_id).first()
            if exist_hostname[0] != hostname:
                return self.write(dict(code=-2, msg='主机名不能修改'))

            session.query(ServerTag).filter(ServerTag.server_id == server_id).delete(synchronize_session=False)
            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            if all_tags:
                for tag_id in all_tags:
                    session.add(ServerTag(server_id=server_id, tag_id=tag_id[0]))

            session.query(Server).filter(Server.id == server_id).update({Server.hostname: hostname, Server.ip: ip,
                                                                         Server.port: int(port),
                                                                         Server.public_ip: public_ip,
                                                                         Server.idc: idc,
                                                                         Server.admin_user: admin_user,
                                                                         Server.region: region, Server.detail: detail
                                                                         })  # Server.state: 'new'
        # 记录操作,不成功直接Pass
        try:
            modify_data = data
            with DBContext('w', None, True) as session:
                data_info = session.query(Server).filter(Server.id == int(server_id)).all()
                for data in data_info:
                    origion_data = model_to_dict(data)
                    origion_data['create_time'] = str(origion_data['create_time'])
                    origion_data['update_time'] = str(origion_data['update_time'])
                    new_record = AssetOperationalAudit(username=nickname, request_object='主机', request_host=ip,
                                                       request_method='更新', original_data=origion_data,
                                                       modify_data=modify_data)
                    session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))
        return self.write(dict(code=0, msg='编辑成功'))
예제 #4
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        nickname = self.get_current_nickname()
        hostname = data.get('hostname', None)
        ip = data.get('ip', None)
        port = data.get('port', 22)
        public_ip = data.get('public_ip', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        state = data.get('state', 'new')
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('r') as session:
            exist_id = session.query(Server.id).filter(Server.hostname == hostname).first()
            exist_ip = session.query(Server.id).filter(Server.ip == ip).first()
        if exist_id or exist_ip:
            return self.write(dict(code=-2, msg='不要重复记录'))

        with DBContext('w', None, True) as session:
            new_server = Server(hostname=hostname, ip=ip, public_ip=public_ip, port=int(port), idc=idc,
                                admin_user=admin_user, region=region, state=state, detail=detail)
            session.add(new_server)

            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            # print('all_tags', all_tags)
            if all_tags:
                for tag_id in all_tags:
                    session.add(ServerTag(server_id=new_server.id, tag_id=tag_id[0]))

        # 记录,记录错误也不要影响用户正常添加
        try:
            with DBContext('w', None, True) as session:

                new_record = AssetOperationalAudit(username=nickname, request_object='主机', request_host=ip,
                                                   request_method='新增', modify_data=data)
                session.add(new_record)
        except Exception as err:
            ins_log.read_log('error', 'operational_audit error:{err}'.format(err=err))

        return self.write(dict(code=0, msg='添加成功'))
예제 #5
0
    def post(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        hostname = data.get('hostname', None)
        port = data.get('port', 22)
        public_ip = data.get('public_ip', None)
        private_ip = data.get('private_ip', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        state = data.get('state', 'new')
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not public_ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(public_ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('r') as session:
            exist_id = session.query(
                Server.id).filter(Server.hostname == hostname).first()
            exist_ip = session.query(
                Server.id).filter(Server.public_ip == public_ip).first()
        if exist_id or exist_ip:
            return self.write(dict(code=-2, msg='不要重复记录'))

        with DBContext('w', None, True) as session:
            new_server = Server(hostname=hostname,
                                public_ip=public_ip,
                                private_ip=private_ip,
                                port=int(port),
                                idc=idc,
                                admin_user=admin_user,
                                region=region,
                                state=state,
                                detail=detail)
            session.add(new_server)

            all_tags = session.query(Tag.id).filter(
                Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            # print('all_tags', all_tags)
            if all_tags:
                for tag_id in all_tags:
                    session.add(
                        ServerTag(server_id=new_server.id, tag_id=tag_id[0]))

        return self.write(dict(code=0, msg='添加成功'))
예제 #6
0
    def put(self, *args, **kwargs):
        data = json.loads(self.request.body.decode("utf-8"))
        server_id = data.get('id', None)
        hostname = data.get('hostname', None)
        ip = data.get('ip', None)
        public_ip = data.get('public_ip', None)
        port = data.get('port', None)
        idc = data.get('idc', None)
        admin_user = data.get('admin_user', None)
        region = data.get('region', None)
        tag_list = data.get('tag_list', [])
        detail = data.get('detail', None)

        if not hostname or not ip or not port:
            return self.write(dict(code=-1, msg='关键参数不能为空'))

        if not admin_user:
            return self.write(dict(code=-1, msg='管理用户不能为空'))

        if not check_ip(ip):
            return self.write(dict(code=-1, msg="IP格式不正确"))

        if not type(port) is int and int(port) >= 65535:
            return self.write(dict(code=-1, msg="端口格式不正确"))

        with DBContext('w', None, True) as session:
            exist_hostname = session.query(Server.hostname).filter(Server.id == server_id).first()
            if exist_hostname[0] != hostname:
                return self.write(dict(code=-2, msg='主机名不能修改'))

            session.query(ServerTag).filter(ServerTag.server_id == server_id).delete(synchronize_session=False)
            all_tags = session.query(Tag.id).filter(Tag.tag_name.in_(tag_list)).order_by(Tag.id).all()
            if all_tags:
                for tag_id in all_tags:
                    session.add(ServerTag(server_id=server_id, tag_id=tag_id[0]))

            session.query(Server).filter(Server.id == server_id).update({Server.hostname: hostname, Server.ip: ip,
                                                                         Server.port: int(port),
                                                                         Server.public_ip: public_ip,
                                                                         Server.idc: idc,
                                                                         Server.admin_user: admin_user,
                                                                         Server.region: region, Server.detail: detail
                                                                         })  # Server.state: 'new'

        return self.write(dict(code=0, msg='编辑成功'))
예제 #7
0
    def hand_update_all_rule(self):
        '''更新所有规则'''
        with DBContext('w') as session:
            tag_rule_list = []
            tag_rule = session.query(TagRule).all()
            for r in tag_rule:
                tag_rule_data = model_to_dict(r)
                tag_rule_list.append(tag_rule_data)

            for rule in tag_rule_list:
                tag_name = rule.get('tag_name')
                idc_rule = rule.get('idc_rule')
                hostname_rule = rule.get('hostname_rule')

                # 查到这个tag_name的tag_id
                tag_id = session.query(Tag.id).filter(or_(Tag.tag_name == tag_name)).first()
                tag_id = int(tag_id[0])

                # 子查询此Tag现有的主机,肯定不能删除用户手动加的主机,不然会被打死
                tag_exist_serverid_list = session.query(ServerTag.server_id).filter(ServerTag.tag_id.in_(
                    session.query(Tag.id).filter(or_(Tag.tag_name == tag_name)))).all()

                tag_exist_serverid_list = [s_id[0] for s_id in tag_exist_serverid_list]
                # print('User already exists server id list-->', tag_exist_serverid_list)
                ins_log.read_log('info',
                                 '{},already exists server id list: {}'.format(tag_name, tag_exist_serverid_list))
                if idc_rule and not hostname_rule:
                    # 根据idc自动匹配到的主机
                    idc_matching_serverid_list = session.query(Server.id).filter(Server.idc == idc_rule).all()
                    idc_matching_serverid_list = [s_id[0] for s_id in idc_matching_serverid_list]
                    # print('根据IDC匹配到的主机列表:{}'.format(idc_matching_serverid_list))
                    ins_log.read_log('info','IDC:{} Matching server id list: {}'.format(idc_rule, idc_matching_serverid_list))

                    # list合并 集合去重
                    tocal_server_id_list = []
                    tocal_server_id_list.extend(tag_exist_serverid_list)
                    tocal_server_id_list.extend(idc_matching_serverid_list)
                    tocal_server_id_list = list(set(tocal_server_id_list))
                    # print('Tocal:{}'.format(tocal_server_id_list))
                    ins_log.read_log('info', 'Tocal:{}'.format(tocal_server_id_list))
                    session.query(ServerTag).filter(ServerTag.tag_id == tag_id).delete()
                    session.add_all([ServerTag(server_id=int(i), tag_id=tag_id) for i in tocal_server_id_list])


                elif hostname_rule or not idc_rule:
                    # 根据hostname自动匹配到的主机
                    hostname_matching_serverid_list = session.query(Server.id).filter(
                        or_(Server.hostname.like('%{}%'.format(hostname_rule)))).all()
                    hostname_matching_serverid_list = [s_id[0] for s_id in hostname_matching_serverid_list]
                    ins_log.read_log('info',
                        'hostname:{} Matching server id list: {}'.format(hostname_rule,
                                                                         hostname_matching_serverid_list))

                    # list合并 集合去重
                    tocal_server_id_list = []
                    tocal_server_id_list.extend(tag_exist_serverid_list)
                    tocal_server_id_list.extend(hostname_matching_serverid_list)
                    tocal_server_id_list = list(set(tocal_server_id_list))
                    # print('Tocal:{}'.format(tocal_server_id_list))
                    ins_log.read_log('info', 'Tocal:{}'.format(tocal_server_id_list))

                    # 先删除、后添加
                    session.query(ServerTag).filter(ServerTag.tag_id == tag_id).delete(synchronize_session=False)
                    session.add_all([ServerTag(server_id=int(i), tag_id=tag_id) for i in tocal_server_id_list])

                elif idc_rule and hostname_rule:
                    # 根据IDC+hostname同时匹配到的主机
                    idc_matching_serverid_list = session.query(Server.id).filter(Server.idc == idc_rule).all()
                    idc_matching_serverid_list = [s_id[0] for s_id in idc_matching_serverid_list]
                    hostname_matching_serverid_list = session.query(Server.id).filter(
                        or_(Server.hostname.like('%{}%'.format(hostname_rule)))).all()
                    hostname_matching_serverid_list = [s_id[0] for s_id in hostname_matching_serverid_list]

                    # list合并、集合去重
                    tocal_server_id_list = []
                    tocal_server_id_list.extend(idc_matching_serverid_list)
                    tocal_server_id_list.extend(hostname_matching_serverid_list)
                    tocal_server_id_list.extend(tag_exist_serverid_list)
                    tocal_server_id_list = list(set(tocal_server_id_list))
                    # print('Tocal:{}'.format(tocal_server_id_list))
                    ins_log.read_log('info', 'Tocal:{}'.format(tocal_server_id_list))
                    # 先删除、后添加
                    session.query(ServerTag).filter(ServerTag.tag_id == tag_id).delete(synchronize_session=False)
                    session.add_all([ServerTag(server_id=int(i), tag_id=tag_id) for i in tocal_server_id_list])

                session.commit()