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='修改成功'))
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='添加成功'))
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='编辑成功'))
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='添加成功'))
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='添加成功'))
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='编辑成功'))
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()