def post(self): ''' save vip instance edit ''' id = self.get_argument("id", None) data = tornado.escape.json_decode(self.request.body) data['mailto'] = data['mailto'].split(',') vip_group = data['vip_group'].split(',') vip_group_list = [] for vip in vip_group: viplist = vip.split(':') vip_group_list.append({"vip": viplist[0], "port": viplist[1]}) data['vip_group'] = vip_group_list for rs in data['rs']: rs['port'] = rs['port'].split(',') handler = Model('LvsManagerConfig') handler.UpdateLvsManagerConfigVipInstance(id, data) self.write('ok')
def editLvsManagerConfig(self, result): config = yaml.load(open(options.config)) cluster_list = config['cluster'] #{'vip': ['127.0.0.1:80'], 'room': 'wx', 'business': 'flyme', 'rs': ['127.0.0.1:80'], 'line': 'ct', 'persistence_timeout': 60, 'module': 'flyme-80', 'id': '584e4fefc720b28dc4c1d14f','special':'0'} rs_tpl = ''' { "manager_ip": "%s", "monitor": { "type": "TCP_CHECK", "connect_timeout": "3" }, "weight": "100", "index": 0, "server_ip": "%s", "port": [ "%s" ] } ''' vip_tpl = ''' { "vip": "%s", "port": "%s" } ''' insert_tpl = ''' { "mailto": [ "*****@*****.**" ], "owners": "韦浩", "protocol": "TCP", "quorum": "1", "rs": [ {rss} ], "vip_instance": "{module}", "descript": "{business}", "persistence_timeout": "{persistence_timeout}", "hysteresis": "0", "delay_loop": "6", "vip_group": [ {vips} ], "alpha": true, "lb_kind": "FNAT", "cluster_id": "{cluster_id}", "omega": true, "sync_proxy": true, "lb_algo": "wrr" }''' data = json.loads(self.get_argument('data', '{}')) if len(data) == 0: result['message'] = 'invalid data' return id = '' all_lines = {'ct': '电信', 'cu': '联通', 'cm': '移动'} all_rooms = {'ns': '南沙', 'bj': '北京', 'wx': '无锡', 'hk': '香港'} rs = data.get('rs', []) room = data.get('room', '') line = data.get('line', '') vip = data.get('vip', []) business = data.get('business', []) module = data.get('module', '') special = int(data.get('special', '0')) if special: cluster_id = '%s_%s_lvs_cluster_%s' % (room, line, business) else: cluster_id = '%s_%s_lvs_cluster' % (room, line) cluster_flag = False for cluster in cluster_list: if str(cluster['id']) == str(cluster_id): cluster_flag = True break if not cluster_flag: result[ 'message'] = 'cluster %s not found,please contact manager!' % ( cluster_id) return persistence_timeout = data.get('persistence_timeout', '600') if not room in all_rooms: result['message'] = 'room must be in [%s]' % ','.join( all_rooms.keys()) return if not line in all_lines: result['message'] = 'line must be in [%s]' % ','.join( all_lines.keys()) return rs_list = [] vip_list = [] for r in rs: tmp = str(r).split(':') rs_list.append(rs_tpl % (tmp[0], tmp[0], tmp[1])) for v in vip: tmp = str(v).split(':') vip_list.append(vip_tpl % (tmp[0], tmp[1])) dict_data = { 'rss': ','.join(rs_list), 'vips': ','.join(vip_list), 'cluster_id': cluster_id, 'business': business, 'module': module, 'persistence_timeout': persistence_timeout } if 'id' in data: id = str(data['id']) data = json.loads(self._replace(insert_tpl, dict_data)) lvs = Model('LvsManagerConfig') if id == '': id = lvs.insertLvsManagerConfigVipInstance2(data) else: try: info = lvs.getLvsManagerConfigVipInstanceInfo(id) if len(info) == 0: result['message'] = 'cluster %s not found ' % cluster_id return id = lvs.UpdateLvsManagerConfigVipInstance(id, data) except Exception as er: id = False result['message'] = str(er) result['data'] = str(id)